Skip to content

Commit 31906a6

Browse files
author
Kai Luo
committed
[AtomicExpand][PowerPC] Fix all-one mask value
When generating a all-one mask value whose bitwidth is larger than 64, signed extension should be used rather then zero extension. Reviewed By: jsji Differential Revision: https://reviews.llvm.org/D120865
1 parent 6cfe41d commit 31906a6

File tree

3 files changed

+5
-4
lines changed

3 files changed

+5
-4
lines changed

llvm/lib/CodeGen/AtomicExpandPass.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -704,7 +704,7 @@ static PartwordMaskValues createMaskInstrs(IRBuilder<> &Builder, Instruction *I,
704704
PMV.AlignedAddr = Addr;
705705
PMV.AlignedAddrAlignment = AddrAlign;
706706
PMV.ShiftAmt = ConstantInt::get(PMV.ValueType, 0);
707-
PMV.Mask = ConstantInt::get(PMV.ValueType, ~0);
707+
PMV.Mask = ConstantInt::get(PMV.ValueType, ~0, /*isSigned*/ true);
708708
return PMV;
709709
}
710710

llvm/test/CodeGen/PowerPC/atomics-i128.ll

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -473,8 +473,9 @@ define i1 @cas_acqrel_acquire_check_succ(i128* %a, i128 %cmp, i128 %new) {
473473
; CHECK-NEXT: stqcx. r8, 0, r3
474474
; CHECK-NEXT: .LBB11_4: # %entry
475475
; CHECK-NEXT: lwsync
476-
; CHECK-NEXT: xor r3, r5, r9
477-
; CHECK-NEXT: or r3, r3, r4
476+
; CHECK-NEXT: xor r3, r4, r8
477+
; CHECK-NEXT: xor r4, r5, r9
478+
; CHECK-NEXT: or r3, r4, r3
478479
; CHECK-NEXT: cntlzd r3, r3
479480
; CHECK-NEXT: rldicl r3, r3, 58, 63
480481
; CHECK-NEXT: blr

llvm/test/Transforms/AtomicExpand/PowerPC/cmpxchg.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ define i1 @test_cmpxchg_seq_cst(i128* %addr, i128 %desire, i128 %new) {
2424
; CHECK-NEXT: [[TMP4:%.*]] = shl i128 [[HI64]], 64
2525
; CHECK-NEXT: [[VAL64:%.*]] = or i128 [[LO64]], [[TMP4]]
2626
; CHECK-NEXT: [[TMP5:%.*]] = insertvalue { i128, i1 } undef, i128 [[VAL64]], 0
27-
; CHECK-NEXT: [[TMP6:%.*]] = and i128 [[VAL64]], 18446744073709551615
27+
; CHECK-NEXT: [[TMP6:%.*]] = and i128 [[VAL64]], -1
2828
; CHECK-NEXT: [[SUCCESS:%.*]] = icmp eq i128 [[CMPVAL_SHIFTED]], [[TMP6]]
2929
; CHECK-NEXT: [[TMP7:%.*]] = insertvalue { i128, i1 } [[TMP5]], i1 [[SUCCESS]], 1
3030
; CHECK-NEXT: [[SUCC:%.*]] = extractvalue { i128, i1 } [[TMP7]], 1

0 commit comments

Comments
 (0)