diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2011-08-16 22:06:31 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2011-08-16 22:06:31 +0000 |
commit | 0793eb4c462a48e5e906abac7b0dfd2caa9d8dc1 (patch) | |
tree | 01d6620e8bec0e8c071f81b999b6c91d4cec187b /llvm/test/Transforms/SCCP/undef-resolve.ll | |
parent | 0241f1441fd631995e06e70ef8dadeb8013478b0 (diff) | |
download | bcm5719-llvm-0793eb4c462a48e5e906abac7b0dfd2caa9d8dc1.tar.gz bcm5719-llvm-0793eb4c462a48e5e906abac7b0dfd2caa9d8dc1.zip |
A bunch of misc fixes to SCCPSolver::ResolvedUndefsIn, including a fix to stop
making random bad assumptions about instructions which are not explicitly listed.
Includes fix for rdar://9956541, a version of "undef ^ undef should return
0 because it's easier than arguing with users".
llvm-svn: 137777
Diffstat (limited to 'llvm/test/Transforms/SCCP/undef-resolve.ll')
-rw-r--r-- | llvm/test/Transforms/SCCP/undef-resolve.ll | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/llvm/test/Transforms/SCCP/undef-resolve.ll b/llvm/test/Transforms/SCCP/undef-resolve.ll index bed561c8e4f..e947d79ab65 100644 --- a/llvm/test/Transforms/SCCP/undef-resolve.ll +++ b/llvm/test/Transforms/SCCP/undef-resolve.ll @@ -104,3 +104,60 @@ bb1.us-lcssa: ; preds = %control bb1: ; preds = %bb1.us-lcssa, %bb1.us-lcssa.us ret i32 0 } + +; Make sure SCCP honors the xor "idiom" +; rdar://9956541 +define i32 @test3() { + %t = xor i32 undef, undef + ret i32 %t +; CHECK: @test3 +; CHECK: ret i32 0 +} + +; Be conservative with FP ops +define double @test4(double %x) { + %t = fadd double %x, undef + ret double %t +; CHECK: @test4 +; CHECK: fadd double %x, undef +} + +; Make sure casts produce a possible value +define i32 @test5() { + %t = sext i8 undef to i32 + ret i32 %t +; CHECK: @test5 +; CHECK: ret i32 0 +} + +; Make sure ashr produces a possible value +define i32 @test6() { + %t = ashr i32 undef, 31 + ret i32 %t +; CHECK: @test6 +; CHECK: ret i32 -1 +} + +; Make sure lshr produces a possible value +define i32 @test7() { + %t = lshr i32 undef, 31 + ret i32 %t +; CHECK: @test7 +; CHECK: ret i32 0 +} + +; icmp eq with undef simplifies to undef +define i1 @test8() { + %t = icmp eq i32 undef, -1 + ret i1 %t +; CHECK: @test8 +; CHECK: ret i1 undef +} + +; Make sure we don't conclude that relational comparisons simplify to undef +define i1 @test9() { + %t = icmp ugt i32 undef, -1 + ret i1 %t +; CHECK: @test9 +; CHECK: icmp ugt +} |