PlaceSafepoints: modernize gc.result.* -> gc.result
authorRamkumar Ramachandra <artagnon@gmail.com>
Mon, 9 Feb 2015 23:00:40 +0000 (23:00 +0000)
committerRamkumar Ramachandra <artagnon@gmail.com>
Mon, 9 Feb 2015 23:00:40 +0000 (23:00 +0000)
Differential Revision: http://reviews.llvm.org/D7516

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

lib/Transforms/Scalar/PlaceSafepoints.cpp
test/Transforms/PlaceSafepoints/basic.ll

index 490a67cd0e4766b4b06776d637ab4451c68adb9c..517c4c95aa7224c0c3a41c9a33e1a5331d5d3eb9 100644 (file)
@@ -952,18 +952,7 @@ static Value *ReplaceWithStatepoint(const CallSite &CS, /* to replace */
     Instruction *gc_result = nullptr;
     std::vector<Type *> types;     // one per 'any' type
     types.push_back(CS.getType()); // result type
-    auto get_gc_result_id = [&](Type &Ty) {
-      if (Ty.isIntegerTy()) {
-        return Intrinsic::experimental_gc_result_int;
-      } else if (Ty.isFloatingPointTy()) {
-        return Intrinsic::experimental_gc_result_float;
-      } else if (Ty.isPointerTy()) {
-        return Intrinsic::experimental_gc_result_ptr;
-      } else {
-        llvm_unreachable("non java type encountered");
-      }
-    };
-    Intrinsic::ID Id = get_gc_result_id(*CS.getType());
+    Intrinsic::ID Id = Intrinsic::experimental_gc_result;
     Value *gc_result_func = Intrinsic::getDeclaration(M, Id, types);
 
     std::vector<Value *> args;
index a21066a51576a9046f7e1ed0722334e50da2382a..e9f24a5c86fef56dbd1b686de0e9154b2347bccf 100644 (file)
@@ -51,11 +51,26 @@ entry:
   br label %other
 other:
 ; CHECK-LABEL: other
-; CHECK: statepoint 
+; CHECK: statepoint
+; CHECK-NOT: gc.result
   call void @foo()
   ret void
 }
 
+declare zeroext i1 @i1_return_i1(i1)
+
+define i1 @test_call_with_result() gc "statepoint-example" {
+; CHECK-LABEL: test_call_with_result
+; This is checking that a statepoint_poll + statepoint + result is
+; inserted for a function that takes 1 argument.
+; CHECK: gc.statepoint.p0f_isVoidf
+; CHECK: gc.statepoint.p0f_i1i1f
+; CHECK: (i1 (i1)* @i1_return_i1, i32 1, i32 0, i1 false, i32 0)
+; CHECK: gc.result.i1
+entry:
+  %call1 = tail call i1 (i1)* @i1_return_i1(i1 false)
+  ret i1 %call1
+}
 
 ; This function is inlined when inserting a poll.  To avoid recursive 
 ; issues, make sure we don't place safepoints in it.