diff options
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCISelLowering.cpp | 4 | ||||
-rw-r--r-- | llvm/test/CodeGen/PowerPC/pr26617.ll | 15 |
2 files changed, 17 insertions, 2 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp index 9d1eee0b9f5..70a22af9963 100644 --- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp +++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp @@ -255,7 +255,7 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM, setOperationAction(ISD::SINT_TO_FP, MVT::i32, Expand); setOperationAction(ISD::UINT_TO_FP, MVT::i32, Expand); - if (Subtarget.hasDirectMove()) { + if (Subtarget.hasDirectMove() && isPPC64) { setOperationAction(ISD::BITCAST, MVT::f32, Legal); setOperationAction(ISD::BITCAST, MVT::i32, Legal); setOperationAction(ISD::BITCAST, MVT::i64, Legal); @@ -557,7 +557,7 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM, setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v4f32, Legal); setOperationAction(ISD::EXTRACT_VECTOR_ELT, MVT::v4f32, Legal); } - if (Subtarget.hasDirectMove()) { + if (Subtarget.hasDirectMove() && isPPC64) { setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v16i8, Legal); setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v8i16, Legal); setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v4i32, Legal); diff --git a/llvm/test/CodeGen/PowerPC/pr26617.ll b/llvm/test/CodeGen/PowerPC/pr26617.ll new file mode 100644 index 00000000000..474d7b94aaf --- /dev/null +++ b/llvm/test/CodeGen/PowerPC/pr26617.ll @@ -0,0 +1,15 @@ +; RUN: llc -mcpu=pwr8 -mtriple=powerpc-unknown-unknown < %s | FileCheck %s +define i32 @test(<4 x i32> %v, i32 %elem) #0 { +entry: + %vecext = extractelement <4 x i32> %v, i32 %elem + ret i32 %vecext +} +; CHECK: stxvw4x 34, +; CHECK: lwzx 3, + +define float @test2(i32 signext %a) { +entry: + %conv = bitcast i32 %a to float + ret float %conv +} +; CHECK-NOT: mtvsr |