From 4873056ced0668da98202215d375c7c51682d5eb Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Sun, 17 Mar 2019 23:16:18 +0000 Subject: [PATCH] Remove immarg from llvm.expect The LangRef claimed this was required to be a constant, but this appears to be wrong. Fixes bug 41079. llvm-svn: 356353 --- llvm/docs/LangRef.rst | 3 +-- llvm/include/llvm/IR/Intrinsics.td | 4 ++-- llvm/test/Transforms/LowerExpectIntrinsic/PR33346.ll | 4 ++-- llvm/test/Verifier/intrinsic-immarg.ll | 9 --------- 4 files changed, 5 insertions(+), 15 deletions(-) diff --git a/llvm/docs/LangRef.rst b/llvm/docs/LangRef.rst index 009f8554aef5..fcea8a482a7a 100644 --- a/llvm/docs/LangRef.rst +++ b/llvm/docs/LangRef.rst @@ -15819,8 +15819,7 @@ Arguments: """""""""" The ``llvm.expect`` intrinsic takes two arguments. The first argument is -a value. The second argument is an expected value, this needs to be a -constant value, variables are not allowed. +a value. The second argument is an expected value. Semantics: """""""""" diff --git a/llvm/include/llvm/IR/Intrinsics.td b/llvm/include/llvm/IR/Intrinsics.td index 680fd145f752..b26a26f59ac9 100644 --- a/llvm/include/llvm/IR/Intrinsics.td +++ b/llvm/include/llvm/IR/Intrinsics.td @@ -689,13 +689,13 @@ let IntrProperties = [IntrInaccessibleMemOnly] in { llvm_metadata_ty ]>; } // FIXME: Add intrinsics for fcmp, fptrunc, fpext, fptoui and fptosi. -// FIXME: Add intrinsics for fabs and copysign? +// FIXME: Add intrinsics for fabs and copysign? //===------------------------- Expect Intrinsics --------------------------===// // def int_expect : Intrinsic<[llvm_anyint_ty], - [LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem, ImmArg<1>]>; + [LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem]>; //===-------------------- Bit Manipulation Intrinsics ---------------------===// // diff --git a/llvm/test/Transforms/LowerExpectIntrinsic/PR33346.ll b/llvm/test/Transforms/LowerExpectIntrinsic/PR33346.ll index 5bcf93408b1a..ca962fbdc8f3 100644 --- a/llvm/test/Transforms/LowerExpectIntrinsic/PR33346.ll +++ b/llvm/test/Transforms/LowerExpectIntrinsic/PR33346.ll @@ -7,12 +7,12 @@ bb: store i64 %arg, i64* %tmp, align 8 %tmp1 = load i64, i64* %tmp, align 8 %tmp2 = load i64, i64* %tmp, align 8 - %tmp3 = call i64 @llvm.expect.i64(i64 %tmp1, i64 123) + %tmp3 = call i64 @llvm.expect.i64(i64 %tmp1, i64 %tmp2) ret i64 %tmp3 } ; Function Attrs: nounwind readnone -declare i64 @llvm.expect.i64(i64, i64 immarg) +declare i64 @llvm.expect.i64(i64, i64) !llvm.module.flags = !{!0} diff --git a/llvm/test/Verifier/intrinsic-immarg.ll b/llvm/test/Verifier/intrinsic-immarg.ll index 4a701ddd419d..0be3999f7adb 100644 --- a/llvm/test/Verifier/intrinsic-immarg.ll +++ b/llvm/test/Verifier/intrinsic-immarg.ll @@ -65,15 +65,6 @@ define void @objectsize(i8* %ptr, i1 %a, i1 %b, i1 %c) { ret void } -declare i8 @llvm.expect.i8(i8, i8) -define i8 @expect(i8 %arg0, i8 %arg1) { - ; CHECK: immarg operand has non-immediate parameter - ; CHECK-NEXT: i8 %arg1 - ; CHECK-NEXT: %ret = call i8 @llvm.expect.i8(i8 %arg0, i8 %arg1) - %ret = call i8 @llvm.expect.i8(i8 %arg0, i8 %arg1) - ret i8 %ret -} - declare i64 @llvm.smul.fix.i64(i64, i64, i32) define i64 @smul_fix(i64 %arg0, i64 %arg1, i32 %arg2) { ; CHECK: immarg operand has non-immediate parameter