Use cast instead of dyn_cast.
authorDevang Patel <dpatel@apple.com>
Tue, 4 Mar 2008 21:45:28 +0000 (21:45 +0000)
committerDevang Patel <dpatel@apple.com>
Tue, 4 Mar 2008 21:45:28 +0000 (21:45 +0000)
Update test to use multiple return value directly, instead of relying on -sretpromotion.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47907 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/InlineFunction.cpp
test/Transforms/Inline/2008-03-04-StructRet.ll

index 6dda6d3313a97f7f1c230786862fba613d445a99..79b370031023bdb76a5d9dc9b5296595ebea110a 100644 (file)
@@ -448,8 +448,7 @@ bool llvm::InlineFunction(CallSite CS, CallGraph *CG, const TargetData *TD) {
         // Multiple return values.
         for (Value::use_iterator RUI = TheCall->use_begin(),
                RUE = TheCall->use_end(); RUI != RUE; ) {
-          GetResultInst *GR = dyn_cast<GetResultInst>(RUI++);
-          assert (GR && "Invalid Call instruction use!");
+          GetResultInst *GR = cast<GetResultInst>(RUI++);
           Value *RV = R->getOperand(GR->getIndex());
           GR->replaceAllUsesWith(RV);
           GR->eraseFromParent();
index d919cf49fd321a4d0b7c93c30dd2a4810dd70bd5..fc7ebc4d8095daf0e91a17edb3de7aad1dc68a35 100644 (file)
@@ -1,26 +1,28 @@
-; RUN: llvm-as < %s | opt -inline -sretpromotion -disable-output
+; RUN: llvm-as < %s | opt -inline -disable-output
        %struct.Benchmark = type { i32 (...)** }
        %struct.Complex = type { double, double }
        %struct.ComplexBenchmark = type { %struct.Benchmark }
 
-define void @_Zml7ComplexS_(%struct.Complex* sret  %agg.result, double %a.0, double %a.1, double %b.0, double %b.1) nounwind  {
+define %struct.Complex @_Zml7ComplexS_1(double %a.0, double %a.1, double %b.0, double %b.1) nounwind  {
 entry:
-       ret void
+       %mrv = alloca %struct.Complex           ; <%struct.Complex*> [#uses=2]
+       %mrv.gep = getelementptr %struct.Complex* %mrv, i32 0, i32 0            ; <double*> [#uses=1]
+       %mrv.ld = load double* %mrv.gep         ; <double> [#uses=1]
+       %mrv.gep1 = getelementptr %struct.Complex* %mrv, i32 0, i32 1           ; <double*> [#uses=1]
+       %mrv.ld2 = load double* %mrv.gep1               ; <double> [#uses=1]
+       ret double %mrv.ld, double %mrv.ld2
 }
 
 define void @_ZNK16ComplexBenchmark9oop_styleEv(%struct.ComplexBenchmark* %this) nounwind  {
 entry:
-       %tmp = alloca %struct.Complex           ; <%struct.Complex*> [#uses=2]
+       %tmp = alloca %struct.Complex           ; <%struct.Complex*> [#uses=0]
        br label %bb31
-
 bb:            ; preds = %bb31
-       call void @_Zml7ComplexS_( %struct.Complex* sret  %tmp, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00 ) nounwind 
-       %tmp21 = getelementptr %struct.Complex* %tmp, i32 0, i32 1              ; <double*> [#uses=0]
+       call %struct.Complex @_Zml7ComplexS_1( double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00 ) nounwind            ; <%struct.Complex>:0 [#uses=1]
+       %gr = getresult %struct.Complex %0, 1           ; <double> [#uses=0]
        br label %bb31
-
 bb31:          ; preds = %bb, %entry
        br i1 false, label %bb, label %return
-
 return:                ; preds = %bb31
        ret void
 }