[llvm-branch-commits] [llvm] release/19.x: [PowerPC] Fix assert exposed by PR 95931 in LowerBITCAST (#108062) (PR #108834)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Sep 16 07:20:53 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-powerpc
Author: None (llvmbot)
<details>
<summary>Changes</summary>
Backport 22067a8eb43a7194e65913b47a9c724fde3ed68f
Requested by: @<!-- -->syzaara
---
Full diff: https://github.com/llvm/llvm-project/pull/108834.diff
2 Files Affected:
- (modified) llvm/lib/Target/PowerPC/PPCISelLowering.cpp (+5-4)
- (modified) llvm/test/CodeGen/PowerPC/f128-bitcast.ll (+22)
``````````diff
diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
index 21cf4d9eeac173..758de9d732fa7e 100644
--- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
+++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
@@ -9338,12 +9338,13 @@ SDValue PPCTargetLowering::LowerBITCAST(SDValue Op, SelectionDAG &DAG) const {
SDLoc dl(Op);
SDValue Op0 = Op->getOperand(0);
+ if (!Subtarget.isPPC64() || (Op0.getOpcode() != ISD::BUILD_PAIR) ||
+ (Op.getValueType() != MVT::f128))
+ return SDValue();
+
SDValue Lo = Op0.getOperand(0);
SDValue Hi = Op0.getOperand(1);
-
- if ((Op.getValueType() != MVT::f128) ||
- (Op0.getOpcode() != ISD::BUILD_PAIR) || (Lo.getValueType() != MVT::i64) ||
- (Hi.getValueType() != MVT::i64) || !Subtarget.isPPC64())
+ if ((Lo.getValueType() != MVT::i64) || (Hi.getValueType() != MVT::i64))
return SDValue();
if (!Subtarget.isLittleEndian())
diff --git a/llvm/test/CodeGen/PowerPC/f128-bitcast.ll b/llvm/test/CodeGen/PowerPC/f128-bitcast.ll
index ffbfbd0c64ff3f..55ba3cb1e05387 100644
--- a/llvm/test/CodeGen/PowerPC/f128-bitcast.ll
+++ b/llvm/test/CodeGen/PowerPC/f128-bitcast.ll
@@ -86,3 +86,25 @@ entry:
ret i64 %1
}
+define <4 x i32> @truncBitcast(i512 %a) {
+; CHECK-LABEL: truncBitcast:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: mtvsrdd v2, r4, r3
+; CHECK-NEXT: blr
+;
+; CHECK-BE-LABEL: truncBitcast:
+; CHECK-BE: # %bb.0: # %entry
+; CHECK-BE-NEXT: mtvsrdd v2, r9, r10
+; CHECK-BE-NEXT: blr
+;
+; CHECK-P8-LABEL: truncBitcast:
+; CHECK-P8: # %bb.0: # %entry
+; CHECK-P8-NEXT: mtfprd f0, r3
+; CHECK-P8-NEXT: mtfprd f1, r4
+; CHECK-P8-NEXT: xxmrghd v2, vs1, vs0
+; CHECK-P8-NEXT: blr
+entry:
+ %0 = trunc i512 %a to i128
+ %1 = bitcast i128 %0 to <4 x i32>
+ ret <4 x i32> %1
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/108834
More information about the llvm-branch-commits
mailing list