Skip to content

Commit 08328ec

Browse files
committed
fix an LowerADDSUBO_CARRY error when convert carry bit for usubo_carry
1 parent 3e605b1 commit 08328ec

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

llvm/lib/Target/PowerPC/PPCISelLowering.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12213,7 +12213,7 @@ SDValue PPCTargetLowering::LowerADDSUBO_CARRY(SDValue Op,
1221312213
Opc = IsAdd ? PPCISD::ADDE : PPCISD::SUBE;
1221412214
if (!IsAdd)
1221512215
CarryOp = DAG.getNode(ISD::XOR, DL, CarryOp.getValueType(), CarryOp,
12216-
DAG.getAllOnesConstant(DL, CarryOp.getValueType()));
12216+
DAG.getConstant(1UL, DL, CarryOp.getValueType()));
1221712217
CarryOp = ConvertCarryValueToCarryFlag(VT, CarryOp, DAG, Subtarget);
1221812218
SDValue Sum = DAG.getNode(Opc, DL, DAG.getVTList(VT, MVT::i32),
1221912219
Op.getOperand(0), Op.getOperand(1), CarryOp);
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
; RUN: llc -ppc-asm-full-reg-names -verify-machineinstrs \
2+
; RUN: -mtriple=powerpc-ibm-aix -mcpu=pwr7 < %s | FileCheck %s
3+
4+
define i64 @foo(i32 noundef %argc) #0 {
5+
entry:
6+
%argc.addr = alloca i32, align 4
7+
%num = alloca i64, align 8
8+
store i32 %argc, ptr %argc.addr, align 4
9+
%0 = load i32, ptr %argc.addr, align 4
10+
%sub = sub nsw i32 %0, 2
11+
%conv = sext i32 %sub to i64
12+
store i64 %conv, ptr %num, align 8
13+
%1 = load i64, ptr %num, align 8
14+
%sub1 = sub nsw i64 0, %1
15+
ret i64 %sub1
16+
}
17+
18+
attributes #0 = { noinline nounwind optnone "frame-pointer"="all" "stack-protector-buffer-size"="8" }
19+
20+
; CHECK: .foo:
21+
; CHECK-NEXT: # %bb.0: # %entry
22+
; CHECK-NEXT: stw r3, -8(r1)
23+
; CHECK-NEXT: lwz r3, -8(r1)
24+
; CHECK-NEXT: addi r3, r3, -2
25+
; CHECK-NEXT: srawi r4, r3, 31
26+
; CHECK-NEXT: stw r3, -12(r1)
27+
; CHECK-NEXT: stw r4, -16(r1)
28+
; CHECK-NEXT: lwz r3, -16(r1)
29+
; CHECK-NEXT: lwz r4, -12(r1)
30+
; CHECK-NEXT: subfic r4, r4, 0
31+
; CHECK-NEXT: subfze r3, r3
32+
; CHECK-NEXT: blr

0 commit comments

Comments
 (0)