Skip to content

Commit afd24c6

Browse files
committed
Address review comments
1 parent 405c4f0 commit afd24c6

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52786,7 +52786,8 @@ static SDValue combineStore(SDNode *N, SelectionDAG &DAG,
5278652786
}
5278752787
}
5278852788

52789-
// Convert store(cmov(load(x), y), x) to cstore(y, x).
52789+
// Convert store(cmov(load(p), x, CC), p) to cstore(x, p, CC)
52790+
// store(cmov(x, load(p), CC), p) to cstore(x, p, InvertCC)
5279052791
if ((VT == MVT::i16 || VT == MVT::i32 || VT == MVT::i64) &&
5279152792
Subtarget.hasCF() && St->isSimple()) {
5279252793
SDValue Cmov;

llvm/test/CodeGen/X86/apx/cfcmov.ll

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,11 +126,41 @@ define void @cfcmov64mr(ptr %p, i64 %0) {
126126
; CHECK-NEXT: cmpq (%rdi), %rsi
127127
; CHECK-NEXT: cfcmovgq %rsi, (%rdi)
128128
; CHECK-NEXT: retq
129-
%2 = load i64, ptr %p, align 2
129+
%2 = load i64, ptr %p, align 8
130130
%3 = icmp sgt i64 %0, %2
131131
%4 = select i1 %3, i64 %0, i64 %2
132-
store i64 %4, ptr %p, align 2
132+
store i64 %4, ptr %p, align 8
133+
ret void
134+
}
135+
136+
define void @volatileload(ptr %p, i32 %0) {
137+
; CHECK-LABEL: volatileload:
138+
; CHECK: # %bb.0:
139+
; CHECK-NEXT: movl (%rdi), %eax
140+
; CHECK-NEXT: cmpl %eax, %esi
141+
; CHECK-NEXT: cmovbl %esi, %eax
142+
; CHECK-NEXT: movl %eax, (%rdi)
143+
; CHECK-NEXT: retq
144+
%2 = load volatile i32, ptr %p, align 4
145+
%3 = call i32 @llvm.umin.i32(i32 %0, i32 %2)
146+
store i32 %3, ptr %p, align 4
147+
ret void
148+
}
149+
150+
define void @atomicstore(ptr %p, i64 %0) {
151+
; CHECK-LABEL: atomicstore:
152+
; CHECK: # %bb.0:
153+
; CHECK-NEXT: movq (%rdi), %rax
154+
; CHECK-NEXT: cmpq %rax, %rsi
155+
; CHECK-NEXT: cmovaq %rsi, %rax
156+
; CHECK-NEXT: movq %rax, (%rdi)
157+
; CHECK-NEXT: retq
158+
%2 = load i64, ptr %p, align 8
159+
%3 = icmp ugt i64 %0, %2
160+
%4 = select i1 %3, i64 %0, i64 %2
161+
store atomic i64 %4, ptr %p unordered, align 8
133162
ret void
134163
}
135164

136165
declare i32 @llvm.smax.i32(i32, i32)
166+
declare i32 @llvm.umin.i32(i32, i32)

0 commit comments

Comments
 (0)