Skip to content

Commit d3a2436

Browse files
committed
[X86] Add test for foldable add of mul (NFC)
1 parent de088dd commit d3a2436

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

llvm/test/CodeGen/X86/add-of-mul.ll

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2+
; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
3+
4+
define i32 @test_scalar(i32 %x) {
5+
; CHECK-LABEL: test_scalar:
6+
; CHECK: # %bb.0:
7+
; CHECK-NEXT: # kill: def $edi killed $edi def $rdi
8+
; CHECK-NEXT: leal (%rdi,%rdi,2), %eax
9+
; CHECK-NEXT: addl %edi, %eax
10+
; CHECK-NEXT: retq
11+
%mul = mul i32 %x, 3
12+
%add = add i32 %mul, %x
13+
ret i32 %add
14+
}
15+
16+
define <4 x i32> @test_vector(<4 x i32> %x) {
17+
; CHECK-LABEL: test_vector:
18+
; CHECK: # %bb.0:
19+
; CHECK-NEXT: paddd %xmm0, %xmm0
20+
; CHECK-NEXT: paddd %xmm0, %xmm0
21+
; CHECK-NEXT: retq
22+
%mul = mul <4 x i32> %x, <i32 3, i32 3, i32 3, i32 3>
23+
%add = add <4 x i32> %mul, %x
24+
ret <4 x i32> %add
25+
}
26+
27+
define ptr @test_ptr(ptr %p) {
28+
; CHECK-LABEL: test_ptr:
29+
; CHECK: # %bb.0:
30+
; CHECK-NEXT: leaq (%rdi,%rdi,2), %rax
31+
; CHECK-NEXT: addq %rdi, %rax
32+
; CHECK-NEXT: retq
33+
%addr = ptrtoint ptr %p to i64
34+
%mul = mul i64 %addr, 3
35+
%res = getelementptr i8, ptr %p, i64 %mul
36+
ret ptr %res
37+
}
38+
39+
define i32 @test_extra_use(i32 %x, ptr %p) {
40+
; CHECK-LABEL: test_extra_use:
41+
; CHECK: # %bb.0:
42+
; CHECK-NEXT: # kill: def $edi killed $edi def $rdi
43+
; CHECK-NEXT: leal (%rdi,%rdi,2), %eax
44+
; CHECK-NEXT: movl %eax, (%rsi)
45+
; CHECK-NEXT: addl %edi, %eax
46+
; CHECK-NEXT: retq
47+
%mul = mul i32 %x, 3
48+
store i32 %mul, ptr %p
49+
%add = add i32 %mul, %x
50+
ret i32 %add
51+
}
52+
53+
define i32 @test_different_operand(i32 %x, i32 %y) {
54+
; CHECK-LABEL: test_different_operand:
55+
; CHECK: # %bb.0:
56+
; CHECK-NEXT: # kill: def $edi killed $edi def $rdi
57+
; CHECK-NEXT: leal (%rdi,%rdi,2), %eax
58+
; CHECK-NEXT: addl %esi, %eax
59+
; CHECK-NEXT: retq
60+
%mul = mul i32 %x, 3
61+
%add = add i32 %mul, %y
62+
ret i32 %add
63+
}

0 commit comments

Comments
 (0)