diff options
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/Bitcode/compatibility.ll | 5 | ||||
-rw-r--r-- | llvm/test/Transforms/DCE/calls-errno.ll | 4 | ||||
-rw-r--r-- | llvm/test/Transforms/InstCombine/constant-fold-libfunc.ll | 11 | ||||
-rw-r--r-- | llvm/test/Transforms/InstCombine/memcpy-1.ll | 9 |
4 files changed, 29 insertions, 0 deletions
diff --git a/llvm/test/Bitcode/compatibility.ll b/llvm/test/Bitcode/compatibility.ll index 7df1535a692..367158d206d 100644 --- a/llvm/test/Bitcode/compatibility.ll +++ b/llvm/test/Bitcode/compatibility.ll @@ -608,6 +608,7 @@ declare void @f.inaccessiblememonly() inaccessiblememonly ; CHECK: declare void @f.inaccessiblememonly() #33 declare void @f.inaccessiblemem_or_argmemonly() inaccessiblemem_or_argmemonly ; CHECK: declare void @f.inaccessiblemem_or_argmemonly() #34 +declare void @f.strictfp() #35 ; Functions -- section declare void @f.section() section "80" @@ -1252,6 +1253,9 @@ exit: call void @f.nobuiltin() builtin ; CHECK: call void @f.nobuiltin() #42 + call void @f.strictfp() strictfp + ; CHECK: call void @f.strictfp() #43 + call fastcc noalias i32* @f.noalias() noinline ; CHECK: call fastcc noalias i32* @f.noalias() #12 tail call ghccc nonnull i32* @f.nonnull() minsize @@ -1670,6 +1674,7 @@ define i8** @constexpr() { ; CHECK: attributes #40 = { writeonly } ; CHECK: attributes #41 = { speculatable } ; CHECK: attributes #42 = { builtin } +; CHECK: attributes #43 = { strictfp } ;; Metadata diff --git a/llvm/test/Transforms/DCE/calls-errno.ll b/llvm/test/Transforms/DCE/calls-errno.ll index 415caae0fe6..20ee0d06d3a 100644 --- a/llvm/test/Transforms/DCE/calls-errno.ll +++ b/llvm/test/Transforms/DCE/calls-errno.ll @@ -76,6 +76,10 @@ entry: ; CHECK-NEXT: %cos3 = call double @cos(double 0.000000e+00) %cos3 = call double @cos(double 0.000000e+00) nobuiltin +; cos(1) strictfp sets FP status flags +; CHECK-NEXT: %cos4 = call double @cos(double 1.000000e+00) + %cos4 = call double @cos(double 1.000000e+00) strictfp + ; pow(0, 1) is 0 %pow1 = call double @pow(double 0x7FF0000000000000, double 1.000000e+00) diff --git a/llvm/test/Transforms/InstCombine/constant-fold-libfunc.ll b/llvm/test/Transforms/InstCombine/constant-fold-libfunc.ll index c969b65a4e7..5d1aa821ea1 100644 --- a/llvm/test/Transforms/InstCombine/constant-fold-libfunc.ll +++ b/llvm/test/Transforms/InstCombine/constant-fold-libfunc.ll @@ -12,9 +12,20 @@ define double @test_simplify_acos() { ret double %pi } +; Check that we don't constant fold builtin functions. + define double @test_acos_nobuiltin() { ; CHECK-LABEL: @test_acos_nobuiltin %pi = call double @acos(double -1.000000e+00) nobuiltin ; CHECK: call double @acos(double -1.000000e+00) ret double %pi } + +; Check that we don't constant fold strictfp results that require rounding. + +define double @test_acos_strictfp() { +; CHECK-LABEL: @test_acos_strictfp + %pi = call double @acos(double -1.000000e+00) strictfp +; CHECK: call double @acos(double -1.000000e+00) + ret double %pi +} diff --git a/llvm/test/Transforms/InstCombine/memcpy-1.ll b/llvm/test/Transforms/InstCombine/memcpy-1.ll index 76dce279b89..b373ea2619f 100644 --- a/llvm/test/Transforms/InstCombine/memcpy-1.ll +++ b/llvm/test/Transforms/InstCombine/memcpy-1.ll @@ -17,3 +17,12 @@ define i8* @test_simplify1(i8* %mem1, i8* %mem2, i32 %size) { ret i8* %ret } +; Verify that the strictfp attr doesn't block this optimization. + +define i8* @test_simplify2(i8* %mem1, i8* %mem2, i32 %size) { +; CHECK-LABEL: @test_simplify2( + %ret = call i8* @memcpy(i8* %mem1, i8* %mem2, i32 %size) strictfp +; CHECK: call void @llvm.memcpy + ret i8* %ret +; CHECK: ret i8* %mem1 +} |