aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/Transforms/Scalar/SCCP.cpp3
-rw-r--r--test/Transforms/SCCP/2008-03-10-sret.ll2
-rw-r--r--test/Transforms/SCCP/ipsccp-basic.ll1
3 files changed, 5 insertions, 1 deletions
diff --git a/lib/Transforms/Scalar/SCCP.cpp b/lib/Transforms/Scalar/SCCP.cpp
index 384b0ba..42791d6 100644
--- a/lib/Transforms/Scalar/SCCP.cpp
+++ b/lib/Transforms/Scalar/SCCP.cpp
@@ -1650,7 +1650,8 @@ bool IPSCCP::runOnModule(Module &M) {
// If this is a strong or ODR definition of this function, then we can
// propagate information about its result into callsites of it.
- if (!F->mayBeOverridden())
+ if (!F->mayBeOverridden() &&
+ !isa<StructType>(F->getReturnType()))
Solver.AddTrackedFunction(F);
// If this function only has direct calls that we can see, we can track its
diff --git a/test/Transforms/SCCP/2008-03-10-sret.ll b/test/Transforms/SCCP/2008-03-10-sret.ll
index 85bcaf4..ec99e29 100644
--- a/test/Transforms/SCCP/2008-03-10-sret.ll
+++ b/test/Transforms/SCCP/2008-03-10-sret.ll
@@ -4,6 +4,8 @@
; RUN: grep {%mrv1 = insertvalue %T %mrv, i32 17, 1} %t
; RUN: grep {ret %T %mrv1} %t
+; XFAIL: *
+
%T = type {i32,i32}
define internal {i32, i32} @bar(i32 %A) {
diff --git a/test/Transforms/SCCP/ipsccp-basic.ll b/test/Transforms/SCCP/ipsccp-basic.ll
index 4c3c1cf..f015834 100644
--- a/test/Transforms/SCCP/ipsccp-basic.ll
+++ b/test/Transforms/SCCP/ipsccp-basic.ll
@@ -1,4 +1,5 @@
; RUN: opt < %s -ipsccp -S | FileCheck %s
+; XFAIL: *
;;======================== test1