summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>2013-07-08 14:22:45 +0000
committerBill Schmidt <wschmidt@linux.vnet.ibm.com>2013-07-08 14:22:45 +0000
commit2db29ef4677b20b250cd75ab889281aed2f12705 (patch)
tree26725220604fcfc5217215a7935d051cbab08fbe /llvm/test
parent7e3d9698fd425200f19410d4302eca5b4e821b9c (diff)
downloadbcm5719-llvm-2db29ef4677b20b250cd75ab889281aed2f12705.tar.gz
bcm5719-llvm-2db29ef4677b20b250cd75ab889281aed2f12705.zip
[PowerPC] Fix PR16556 (handle undef ppcf128 in LowerFP_TO_INT).
PPCTargetLowering::LowerFP_TO_INT() expects its source operand to be either an f32 or f64, but this is not checked. A long double (ppcf128) operand will normally be custom-lowered to a conversion to f64 in this context. However, this isn't the case for an UNDEF node. This patch recognizes a ppcf128 as a legal source operand for FP_TO_INT only if it's an undef, in which case it creates an undef of the target type. At some point we might want to do a wholesale custom lowering of ISD::UNDEF when the type is ppcf128, but it's not really clear that's a great idea, and probably more work than it's worth for a situation that only arises in the case of a programming error. At this point I think simple is best. The test case comes from PR16556, and is a crash-test only. llvm-svn: 185821
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/PowerPC/pr16556.ll20
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/PowerPC/pr16556.ll b/llvm/test/CodeGen/PowerPC/pr16556.ll
new file mode 100644
index 00000000000..dc36f0b6eaf
--- /dev/null
+++ b/llvm/test/CodeGen/PowerPC/pr16556.ll
@@ -0,0 +1,20 @@
+; RUN: llc < %s
+
+; This test formerly failed due to no handling for a ppc_fp128 undef.
+
+target datalayout = "E-p:32:32:32-S0-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f16:16:16-f32:32:32-f64:64:64-f128:64:128-v64:64:64-v128:128:128-a0:0:64-n32"
+target triple = "powerpc-unknown-linux-gnu"
+
+%core.time.TickDuration.37.125 = type { i64 }
+
+define weak_odr fastcc i64 @_D4core4time12TickDuration30__T2toVAyaa7_7365636f6e6473TlZ2toMxFNaNbNfZl(%core.time.TickDuration.37.125* %.this_arg) {
+entry:
+ br i1 undef, label %noassert, label %assert
+
+assert: ; preds = %entry
+ unreachable
+
+noassert: ; preds = %entry
+ %tmp9 = fptosi ppc_fp128 undef to i64
+ ret i64 %tmp9
+}
OpenPOWER on IntegriCloud