summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/SCCP
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2016-07-20 20:17:13 +0000
committerDavide Italiano <davide@freebsd.org>2016-07-20 20:17:13 +0000
commit15ff2d6d0cc422dc672f3726f05ac98f85992e42 (patch)
treeaf90cb5171c1931b412e58842f863f54ea04bb53 /llvm/test/Transforms/SCCP
parenta088bce959182f938a1643c1301384bcc4d35da6 (diff)
downloadbcm5719-llvm-15ff2d6d0cc422dc672f3726f05ac98f85992e42.tar.gz
bcm5719-llvm-15ff2d6d0cc422dc672f3726f05ac98f85992e42.zip
[SCCP] Zap multiple return values.
We can replace the return values with undef if we replaced all the call uses with a constant/undef. Differential Revision: https://reviews.llvm.org/D22336 llvm-svn: 276174
Diffstat (limited to 'llvm/test/Transforms/SCCP')
-rw-r--r--llvm/test/Transforms/SCCP/dont-zap-return.ll24
-rw-r--r--llvm/test/Transforms/SCCP/ipsccp-basic.ll4
2 files changed, 26 insertions, 2 deletions
diff --git a/llvm/test/Transforms/SCCP/dont-zap-return.ll b/llvm/test/Transforms/SCCP/dont-zap-return.ll
new file mode 100644
index 00000000000..c5345309cea
--- /dev/null
+++ b/llvm/test/Transforms/SCCP/dont-zap-return.ll
@@ -0,0 +1,24 @@
+; RUN: opt -ipsccp < %s -S | FileCheck %s
+
+define internal {i32, i32} @identity(i32 %patatino) {
+ %foo = insertvalue {i32, i32} {i32 1, i32 undef}, i32 %patatino, 1
+ ret {i32, i32} %foo
+}
+
+; Check that the return value is not transformed to undef
+; CHECK: define internal { i32, i32 } @identity(i32 %patatino) {
+; CHECK-NEXT: %foo = insertvalue { i32, i32 } { i32 1, i32 undef }, i32 %patatino, 1
+; CHECK-NEXT: ret { i32, i32 } %foo
+; CHECK-NEXT: }
+
+
+define {i32, i32} @caller(i32 %pat) {
+ %S1 = call {i32, i32} @identity(i32 %pat)
+ ret {i32, i32} %S1
+}
+
+; Check that we don't invent values and propagate them.
+; CHECK: define { i32, i32 } @caller(i32 %pat) {
+; CHECK-NEXT: %S1 = call { i32, i32 } @identity(i32 %pat)
+; CHECK-NEXT: ret { i32, i32 } %S1
+; CHECK-NEXT: }
diff --git a/llvm/test/Transforms/SCCP/ipsccp-basic.ll b/llvm/test/Transforms/SCCP/ipsccp-basic.ll
index 917aaa02aca..4db5c4478d3 100644
--- a/llvm/test/Transforms/SCCP/ipsccp-basic.ll
+++ b/llvm/test/Transforms/SCCP/ipsccp-basic.ll
@@ -83,7 +83,7 @@ define internal {i64,i64} @test4a() {
}
; CHECK-LABEL: define internal { i64, i64 } @test4a(
-; CHECK-NEXT: ret { i64, i64 } { i64 5, i64 4 }
+; CHECK-NEXT: ret { i64, i64 } undef
; CHECK-NEXT: }
define i64 @test4b() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
@@ -167,7 +167,7 @@ define internal %T @test7a(i32 %A) {
%mrv1 = insertvalue %T %mrv0, i32 %A, 1
ret %T %mrv1
; CHECK-LABEL: @test7a(
-; CHECK-NEXT: ret %T { i32 18, i32 17 }
+; CHECK-NEXT: ret %T undef
}
define i32 @test7b() {
OpenPOWER on IntegriCloud