Use CreateTempAlloca to make sure alloca is in entry block. (#165)
This commit is contained in:
Родитель
a3306bff1d
Коммит
cea8048912
|
@ -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");
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче