Skip to content

Commit 21bea22

Browse files
committed
fix test
1 parent d5fa2c0 commit 21bea22

File tree

2 files changed

+19
-25
lines changed

2 files changed

+19
-25
lines changed

llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1681,11 +1681,21 @@ getIntegerVecAttribute(const Function &F, StringRef Name, unsigned Size) {
16811681
bool hasValueInRangeLikeMetadata(const MDNode &MD, int64_t Val) {
16821682
assert((MD.getNumOperands() % 2 == 0) && "invalid number of operands!");
16831683
for (unsigned I = 0, E = MD.getNumOperands() / 2; I != E; ++I) {
1684-
auto *Low = mdconst::extract<ConstantInt>(MD.getOperand(2 * I + 0));
1685-
auto *High = mdconst::extract<ConstantInt>(MD.getOperand(2 * I + 1));
1686-
assert(Low->getValue().ult(High->getValue()) && "invalid range metadata!");
1687-
if (Low->getValue().ule(Val) && High->getValue().ugt(Val))
1688-
return true;
1684+
auto Low =
1685+
mdconst::extract<ConstantInt>(MD.getOperand(2 * I + 0))->getValue();
1686+
auto High =
1687+
mdconst::extract<ConstantInt>(MD.getOperand(2 * I + 1))->getValue();
1688+
// There are two types of [A; B) ranges:
1689+
// A < B, e.g. [4; 5) which is a range that only includes 4.
1690+
// A > B, e.g. [5; 4) which is a range that wraps around and includes
1691+
// everything except 4.
1692+
if (Low.ult(High)) {
1693+
if (Low.ule(Val) && High.ugt(Val))
1694+
return true;
1695+
} else {
1696+
if (Low.uge(Val) && High.ult(Val))
1697+
return true;
1698+
}
16891699
}
16901700

16911701
return false;

llvm/test/Transforms/AtomicExpand/AMDGPU/expand-cmpxchg-flat-maybe-private.ll

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -308,24 +308,7 @@ define { i64, i1 } @cmpxchg_flat_agent_i64__noalias_addrspace_edge_case0(ptr %pt
308308
define { i64, i1 } @cmpxchg_flat_agent_i64__no_2_6(ptr %ptr, i64 %val, i64 %swap) {
309309
; CHECK-LABEL: define { i64, i1 } @cmpxchg_flat_agent_i64__no_2_6(
310310
; CHECK-SAME: ptr [[PTR:%.*]], i64 [[VAL:%.*]], i64 [[SWAP:%.*]]) {
311-
; CHECK-NEXT: [[IS_PRIVATE:%.*]] = call i1 @llvm.amdgcn.is.private(ptr [[PTR]])
312-
; CHECK-NEXT: br i1 [[IS_PRIVATE]], label %[[ATOMICRMW_PRIVATE:.*]], label %[[ATOMICRMW_GLOBAL:.*]]
313-
; CHECK: [[ATOMICRMW_PRIVATE]]:
314-
; CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr [[PTR]] to ptr addrspace(5)
315-
; CHECK-NEXT: [[TMP2:%.*]] = load i64, ptr addrspace(5) [[TMP1]], align 8
316-
; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i64 [[TMP2]], [[VAL]]
317-
; CHECK-NEXT: [[TMP4:%.*]] = select i1 [[TMP3]], i64 [[SWAP]], i64 [[TMP2]]
318-
; CHECK-NEXT: store i64 [[TMP4]], ptr addrspace(5) [[TMP1]], align 8
319-
; CHECK-NEXT: [[TMP5:%.*]] = insertvalue { i64, i1 } poison, i64 [[TMP2]], 0
320-
; CHECK-NEXT: [[TMP6:%.*]] = insertvalue { i64, i1 } [[TMP5]], i1 [[TMP3]], 1
321-
; CHECK-NEXT: br label %[[ATOMICRMW_PHI:.*]]
322-
; CHECK: [[ATOMICRMW_GLOBAL]]:
323-
; CHECK-NEXT: [[TMP7:%.*]] = cmpxchg ptr [[PTR]], i64 [[VAL]], i64 [[SWAP]] syncscope("agent") monotonic seq_cst, align 8, !noalias.addrspace [[META0]]
324-
; CHECK-NEXT: br label %[[ATOMICRMW_PHI]]
325-
; CHECK: [[ATOMICRMW_PHI]]:
326-
; CHECK-NEXT: [[RESULT:%.*]] = phi { i64, i1 } [ [[TMP6]], %[[ATOMICRMW_PRIVATE]] ], [ [[TMP7]], %[[ATOMICRMW_GLOBAL]] ]
327-
; CHECK-NEXT: br label %[[ATOMICRMW_END:.*]]
328-
; CHECK: [[ATOMICRMW_END]]:
311+
; CHECK-NEXT: [[RESULT:%.*]] = cmpxchg ptr [[PTR]], i64 [[VAL]], i64 [[SWAP]] syncscope("agent") monotonic seq_cst, align 8, !noalias.addrspace [[META4:![0-9]+]]
329312
; CHECK-NEXT: ret { i64, i1 } [[RESULT]]
330313
;
331314
%result = cmpxchg ptr %ptr, i64 %val, i64 %swap syncscope("agent") monotonic seq_cst, !noalias.addrspace !7
@@ -335,7 +318,7 @@ define { i64, i1 } @cmpxchg_flat_agent_i64__no_2_6(ptr %ptr, i64 %val, i64 %swap
335318
define { i64, i1 } @cmpxchg_flat_agent_i64__no_2_3_5(ptr %ptr, i64 %val, i64 %swap) {
336319
; CHECK-LABEL: define { i64, i1 } @cmpxchg_flat_agent_i64__no_2_3_5(
337320
; CHECK-SAME: ptr [[PTR:%.*]], i64 [[VAL:%.*]], i64 [[SWAP:%.*]]) {
338-
; CHECK-NEXT: [[RESULT:%.*]] = cmpxchg ptr [[PTR]], i64 [[VAL]], i64 [[SWAP]] syncscope("agent") monotonic seq_cst, align 8, !noalias.addrspace [[META4:![0-9]+]]
321+
; CHECK-NEXT: [[RESULT:%.*]] = cmpxchg ptr [[PTR]], i64 [[VAL]], i64 [[SWAP]] syncscope("agent") monotonic seq_cst, align 8, !noalias.addrspace [[META5:![0-9]+]]
339322
; CHECK-NEXT: ret { i64, i1 } [[RESULT]]
340323
;
341324
%result = cmpxchg ptr %ptr, i64 %val, i64 %swap syncscope("agent") monotonic seq_cst, !noalias.addrspace !8
@@ -357,5 +340,6 @@ define { i64, i1 } @cmpxchg_flat_agent_i64__no_2_3_5(ptr %ptr, i64 %val, i64 %sw
357340
; CHECK: [[META1]] = !{[[META2:![0-9]+]], [[META3:![0-9]+]]}
358341
; CHECK: [[META2]] = !{!"foo", !"bar"}
359342
; CHECK: [[META3]] = !{!"bux", !"baz"}
360-
; CHECK: [[META4]] = !{i32 2, i32 4, i32 5, i32 6}
343+
; CHECK: [[META4]] = !{i32 2, i32 6}
344+
; CHECK: [[META5]] = !{i32 2, i32 4, i32 5, i32 6}
361345
;.

0 commit comments

Comments
 (0)