diff options
author | Chad Rosier <mcrosier@codeaurora.org> | 2014-06-27 21:05:09 +0000 |
---|---|---|
committer | Chad Rosier <mcrosier@codeaurora.org> | 2014-06-27 21:05:09 +0000 |
commit | d7be29696dc4dc88c8c0a39ac8cfa8e3da24cb77 (patch) | |
tree | 6b43f75524e412b869b7836a9062d26cbb5fd122 | |
parent | 1cfa342dc1fd6fd498652d67311c3632893512b3 (diff) | |
download | llvm-d7be29696dc4dc88c8c0a39ac8cfa8e3da24cb77.tar.gz llvm-d7be29696dc4dc88c8c0a39ac8cfa8e3da24cb77.tar.bz2 llvm-d7be29696dc4dc88c8c0a39ac8cfa8e3da24cb77.tar.xz |
[AArch64] Fix memset ICE when memset value is f128.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211960 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 2 | ||||
-rw-r--r-- | test/CodeGen/AArch64/memcpy-f128.ll | 19 |
2 files changed, 20 insertions, 1 deletions
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 522d7c535d..4aad5dcfc4 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -3631,7 +3631,7 @@ static SDValue getMemsetStringVal(EVT VT, SDLoc dl, SelectionDAG &DAG, if (Str.empty()) { if (VT.isInteger()) return DAG.getConstant(0, VT); - else if (VT == MVT::f32 || VT == MVT::f64) + else if (VT == MVT::f32 || VT == MVT::f64 || VT == MVT::f128) return DAG.getConstantFP(0.0, VT); else if (VT.isVector()) { unsigned NumElts = VT.getVectorNumElements(); diff --git a/test/CodeGen/AArch64/memcpy-f128.ll b/test/CodeGen/AArch64/memcpy-f128.ll new file mode 100644 index 0000000000..76db2974ab --- /dev/null +++ b/test/CodeGen/AArch64/memcpy-f128.ll @@ -0,0 +1,19 @@ +; RUN: llc < %s -march=aarch64 -mtriple=aarch64-linux-gnu | FileCheck %s + +%structA = type { i128 } +@stubA = internal unnamed_addr constant %structA zeroinitializer, align 8 + +; Make sure we don't hit llvm_unreachable. + +define void @test1() { +; CHECK-LABEL: @test1 +; CHECK: adrp +; CHECK: ldr q0 +; CHECK: str q0 +; CHECK: ret +entry: + tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* undef, i8* bitcast (%structA* @stubA to i8*), i64 48, i32 8, i1 false) + ret void +} + +declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) |