Use CreateTempAlloca to make sure alloca is in entry block. (#165)

This commit is contained in:
Xiang Li 2017-03-28 18:44:31 -07:00 коммит произвёл GitHub
Родитель a3306bff1d
Коммит cea8048912
3 изменённых файлов: 20 добавлений и 1 удалений

Просмотреть файл

@ -236,7 +236,7 @@ RValue CodeGenFunction::EmitCXXMemberOrOperatorMemberCallExpr(
llvm::Type *Ty = ConvertType(LV.getType());
llvm::Constant *zero = Builder.getInt32(0);
llvm::Value *TmpThis = Builder.CreateAlloca(Ty);
llvm::Value *TmpThis = CreateTempAlloca(Ty);
for (unsigned i = 0; i < Ty->getVectorNumElements(); i++) {
llvm::Value *EltIdx = Elts->getAggregateElement(i);
llvm::Value *EltGEP = Builder.CreateGEP(This, {zero, EltIdx});

Просмотреть файл

@ -0,0 +1,14 @@
// RUN: %dxc -E main -T ps_6_0 %s
int i;
float4 v;
float4 main() : SV_Target
{
float4 vec = 0;
if (i > 0)
vec = v.xyzw[i];
return vec;
}

Просмотреть файл

@ -300,6 +300,7 @@ public:
TEST_METHOD(CodeGenAbs1)
TEST_METHOD(CodeGenAbs2)
TEST_METHOD(CodeGenAllLit)
TEST_METHOD(CodeGenAllocaAtEntryBlk)
TEST_METHOD(CodeGenAddUint64)
TEST_METHOD(CodeGenArrayArg)
TEST_METHOD(CodeGenArrayArg2)
@ -1982,6 +1983,10 @@ TEST_F(CompilerTest, CodeGenAllLit) {
CodeGenTest(L"..\\CodeGenHLSL\\all_lit.hlsl");
}
TEST_F(CompilerTest, CodeGenAllocaAtEntryBlk) {
CodeGenTest(L"..\\CodeGenHLSL\\alloca_at_entry_blk.hlsl");
}
TEST_F(CompilerTest, CodeGenAddUint64) {
CodeGenTestCheck(L"..\\CodeGenHLSL\\AddUint64.hlsl");
}