diff options
author | Bill Schmidt <wschmidt@linux.vnet.ibm.com> | 2013-07-08 14:22:45 +0000 |
---|---|---|
committer | Bill Schmidt <wschmidt@linux.vnet.ibm.com> | 2013-07-08 14:22:45 +0000 |
commit | 12ae7fd2da24e53c795c0cc17d06c91a0f09fb3d (patch) | |
tree | e5226b9c7a4554c7ac95be5211d83aff75b63642 /test/CodeGen/PowerPC/pr16556.ll | |
parent | 9f23fe0ea51d781c1af2eb069a5f03c262243374 (diff) | |
download | external_llvm-12ae7fd2da24e53c795c0cc17d06c91a0f09fb3d.zip external_llvm-12ae7fd2da24e53c795c0cc17d06c91a0f09fb3d.tar.gz external_llvm-12ae7fd2da24e53c795c0cc17d06c91a0f09fb3d.tar.bz2 |
[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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185821 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/PowerPC/pr16556.ll')
-rw-r--r-- | test/CodeGen/PowerPC/pr16556.ll | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/test/CodeGen/PowerPC/pr16556.ll b/test/CodeGen/PowerPC/pr16556.ll new file mode 100644 index 0000000..dc36f0b --- /dev/null +++ b/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 +} |