Skip to content

Commit 1df3798

Browse files
committed
[X86] early-ifcvt-remarks.ll - use i64 arithmetic to ensure ifcvt doesn't drop below threshold
Upcoming SimplifyDemandedBits support for CMOV will simplify the code and reduce the critical path below the threshold if we stick with i32 multiplies
1 parent c0e1ad7 commit 1df3798

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

llvm/test/CodeGen/X86/early-ifcvt-remarks.ll

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -68,24 +68,24 @@ if.else:
6868
ret i32 %res
6969
}
7070

71-
define i32 @mm3(i1 %pred, i32 %val, i32 %e1, i128 %e2, i128 %e3, i128 %e4, i128 %e5) {
71+
define i64 @mm3(i1 %pred, i64 %val, i64 %e1, i128 %e2, i128 %e3, i128 %e4, i128 %e5) {
7272
; CHECK-LABEL: mm3:
7373
; CHECK: # %bb.0: # %entry
74-
; CHECK-NEXT: movl %esi, %eax
74+
; CHECK-NEXT: movq %rsi, %rax
7575
; CHECK-NEXT: testb $1, %dil
76-
; CHECK-NEXT: movl %esi, %r10d
76+
; CHECK-NEXT: movq %rsi, %r10
7777
; CHECK-NEXT: jne .LBB2_2
7878
; CHECK-NEXT: # %bb.1: # %if.false
7979
; CHECK-NEXT: movq {{[0-9]+}}(%rsp), %rsi
8080
; CHECK-NEXT: movq {{[0-9]+}}(%rsp), %rdi
81-
; CHECK-NEXT: imull %edx, %edx
82-
; CHECK-NEXT: movslq %edx, %r10
83-
; CHECK-NEXT: movq %rcx, %rax
84-
; CHECK-NEXT: movl %edx, %r9d
85-
; CHECK-NEXT: mulq %r10
86-
; CHECK-NEXT: imulq %r10, %r8
81+
; CHECK-NEXT: imulq %rdx, %rdx
82+
; CHECK-NEXT: movq %rdx, %r10
8783
; CHECK-NEXT: sarq $63, %r10
84+
; CHECK-NEXT: movq %rcx, %rax
85+
; CHECK-NEXT: movq %rdx, %r9
86+
; CHECK-NEXT: mulq %rdx
8887
; CHECK-NEXT: imulq %rcx, %r10
88+
; CHECK-NEXT: imulq %r9, %r8
8989
; CHECK-NEXT: addq %rdx, %r8
9090
; CHECK-NEXT: addq %r10, %r8
9191
; CHECK-NEXT: addq {{[0-9]+}}(%rsp), %rax
@@ -106,9 +106,9 @@ define i32 @mm3(i1 %pred, i32 %val, i32 %e1, i128 %e2, i128 %e3, i128 %e4, i128
106106
; CHECK-NEXT: orq %rdi, %r10
107107
; CHECK-NEXT: testb $64, %sil
108108
; CHECK-NEXT: cmovneq %rax, %r10
109-
; CHECK-NEXT: movl %r9d, %eax
109+
; CHECK-NEXT: movq %r9, %rax
110110
; CHECK-NEXT: .LBB2_2: # %if.endif
111-
; CHECK-NEXT: addl %r10d, %eax
111+
; CHECK-NEXT: addq %r10, %rax
112112
; CHECK-NEXT: retq
113113
entry:
114114
br i1 %pred, label %if.true, label %if.false
@@ -117,19 +117,19 @@ if.true:
117117
br label %if.endif
118118

119119
if.false:
120-
%f1 = mul i32 %e1, %e1
121-
%f3 = sext i32 %f1 to i128
120+
%f1 = mul i64 %e1, %e1
121+
%f3 = sext i64 %f1 to i128
122122
%f4 = mul i128 %e2, %f3
123123
%f6 = add i128 %e3, %f4
124124
%f7 = xor i128 %e4, %f6
125125
%f8 = xor i128 %e5, %f7
126126
%a1 = ashr i128 %f8, %e5
127-
%f5 = trunc i128 %a1 to i32
127+
%f5 = trunc i128 %a1 to i64
128128
br label %if.endif
129129

130130
if.endif:
131-
%r1 = phi i32 [ %val, %if.true ], [ %f1, %if.false ]
132-
%r2 = phi i32 [ %val, %if.true ], [ %f5, %if.false ]
133-
%res = add i32 %r1, %r2
134-
ret i32 %res
131+
%r1 = phi i64 [ %val, %if.true ], [ %f1, %if.false ]
132+
%r2 = phi i64 [ %val, %if.true ], [ %f5, %if.false ]
133+
%res = add i64 %r1, %r2
134+
ret i64 %res
135135
}

0 commit comments

Comments
 (0)