Browse Source

Don't need store the return val after call. (#64)

Xiang Li 8 years ago
parent
commit
4072c971dd

+ 1 - 2
lib/Transforms/Scalar/ScalarReplAggregatesHLSL.cpp

@@ -4647,8 +4647,7 @@ void SROA_Parameter_HLSL::createFlattenedFunctionCall(Function *F, Function *fla
        DILocation *DL = DILocation::get(F->getContext(), funcDI->getLine(), 0,  funcDI);
        DILocation *DL = DILocation::get(F->getContext(), funcDI->getLine(), 0,  funcDI);
        DIB.insertDeclare(retValAddr, RetVar, Expr, DL, CI);
        DIB.insertDeclare(retValAddr, RetVar, Expr, DL, CI);
     }
     }
-    // Create store after call.
-    RetBuilder.CreateStore(CI, retValAddr);
+
     // Load ret value and replace CI.
     // Load ret value and replace CI.
     Value *newRetVal = RetBuilder.CreateLoad(retValAddr);
     Value *newRetVal = RetBuilder.CreateLoad(retValAddr);
     CI->replaceAllUsesWith(newRetVal);
     CI->replaceAllUsesWith(newRetVal);

+ 14 - 0
tools/clang/test/CodeGenHLSL/recursive3.hlsl

@@ -0,0 +1,14 @@
+// RUN: %dxc -E main -T ps_6_0 %s | FileCheck %s
+
+// CHECK: Recursion is not permitted
+
+float test_ret()
+{
+    return test_ret();
+}
+
+float4 main(float a : A, float b:B) : SV_TARGET
+{
+  return test_ret();
+}
+

+ 5 - 0
tools/clang/unittests/HLSL/ValidationTest.cpp

@@ -77,6 +77,7 @@ public:
   TEST_METHOD(TypedUAVStoreFullMask1)
   TEST_METHOD(TypedUAVStoreFullMask1)
   TEST_METHOD(Recursive)
   TEST_METHOD(Recursive)
   TEST_METHOD(Recursive2)
   TEST_METHOD(Recursive2)
+  TEST_METHOD(Recursive3)
   TEST_METHOD(UserDefineFunction)
   TEST_METHOD(UserDefineFunction)
   TEST_METHOD(ResourceRangeOverlap0)
   TEST_METHOD(ResourceRangeOverlap0)
   TEST_METHOD(ResourceRangeOverlap1)
   TEST_METHOD(ResourceRangeOverlap1)
@@ -930,6 +931,10 @@ TEST_F(ValidationTest, Recursive2) {
     TestCheck(L"..\\CodeGenHLSL\\recursive2.hlsl");
     TestCheck(L"..\\CodeGenHLSL\\recursive2.hlsl");
 }
 }
 
 
+TEST_F(ValidationTest, Recursive3) {
+    TestCheck(L"..\\CodeGenHLSL\\recursive3.hlsl");
+}
+
 TEST_F(ValidationTest, UserDefineFunction) {
 TEST_F(ValidationTest, UserDefineFunction) {
     TestCheck(L"..\\CodeGenHLSL\\recursive2.hlsl");
     TestCheck(L"..\\CodeGenHLSL\\recursive2.hlsl");
 }
 }