OLD | NEW |
1 ; Test the lowering sequence for commutative operations. If there is a source | 1 ; Test the lowering sequence for commutative operations. If there is a source |
2 ; operand whose lifetime ends in an operation, it should be the first operand, | 2 ; operand whose lifetime ends in an operation, it should be the first operand, |
3 ; eliminating the need for a move to start the new lifetime. | 3 ; eliminating the need for a move to start the new lifetime. |
4 | 4 |
5 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 5 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
6 ; RUN: --target x8632 -i %s --args -O2 \ | 6 ; RUN: --target x8632 -i %s --args -O2 \ |
7 ; RUN: | %if --need=target_X8632 --command FileCheck %s | 7 ; RUN: | %if --need=target_X8632 --command FileCheck %s |
8 | 8 |
9 define i32 @integerAddLeft(i32 %a, i32 %b) { | 9 define internal i32 @integerAddLeft(i32 %a, i32 %b) { |
10 entry: | 10 entry: |
11 %tmp = add i32 %a, %b | 11 %tmp = add i32 %a, %b |
12 %result = add i32 %a, %tmp | 12 %result = add i32 %a, %tmp |
13 ret i32 %result | 13 ret i32 %result |
14 } | 14 } |
15 ; CHECK-LABEL: integerAddLeft | 15 ; CHECK-LABEL: integerAddLeft |
16 ; CHECK-NEXT: mov {{e..}},DWORD PTR | 16 ; CHECK-NEXT: mov {{e..}},DWORD PTR |
17 ; CHECK-NEXT: mov {{e..}},DWORD PTR | 17 ; CHECK-NEXT: mov {{e..}},DWORD PTR |
18 ; CHECK-NEXT: add {{e..}},{{e..}} | 18 ; CHECK-NEXT: add {{e..}},{{e..}} |
19 ; CHECK-NEXT: add {{e..}},{{e..}} | 19 ; CHECK-NEXT: add {{e..}},{{e..}} |
20 | 20 |
21 define i32 @integerAddRight(i32 %a, i32 %b) { | 21 define internal i32 @integerAddRight(i32 %a, i32 %b) { |
22 entry: | 22 entry: |
23 %tmp = add i32 %a, %b | 23 %tmp = add i32 %a, %b |
24 %result = add i32 %b, %tmp | 24 %result = add i32 %b, %tmp |
25 ret i32 %result | 25 ret i32 %result |
26 } | 26 } |
27 ; CHECK-LABEL: integerAddRight | 27 ; CHECK-LABEL: integerAddRight |
28 ; CHECK-NEXT: mov {{e..}},DWORD PTR | 28 ; CHECK-NEXT: mov {{e..}},DWORD PTR |
29 ; CHECK-NEXT: mov {{e..}},DWORD PTR | 29 ; CHECK-NEXT: mov {{e..}},DWORD PTR |
30 ; CHECK-NEXT: add {{e..}},{{e..}} | 30 ; CHECK-NEXT: add {{e..}},{{e..}} |
31 ; CHECK-NEXT: add {{e..}},{{e..}} | 31 ; CHECK-NEXT: add {{e..}},{{e..}} |
32 | 32 |
33 define i32 @integerMultiplyLeft(i32 %a, i32 %b) { | 33 define internal i32 @integerMultiplyLeft(i32 %a, i32 %b) { |
34 entry: | 34 entry: |
35 %tmp = mul i32 %a, %b | 35 %tmp = mul i32 %a, %b |
36 %result = mul i32 %a, %tmp | 36 %result = mul i32 %a, %tmp |
37 ret i32 %result | 37 ret i32 %result |
38 } | 38 } |
39 ; CHECK-LABEL: integerMultiplyLeft | 39 ; CHECK-LABEL: integerMultiplyLeft |
40 ; CHECK-NEXT: mov {{e..}},DWORD PTR | 40 ; CHECK-NEXT: mov {{e..}},DWORD PTR |
41 ; CHECK-NEXT: mov {{e..}},DWORD PTR | 41 ; CHECK-NEXT: mov {{e..}},DWORD PTR |
42 ; CHECK-NEXT: imul {{e..}},{{e..}} | 42 ; CHECK-NEXT: imul {{e..}},{{e..}} |
43 ; CHECK-NEXT: imul {{e..}},{{e..}} | 43 ; CHECK-NEXT: imul {{e..}},{{e..}} |
44 | 44 |
45 define i32 @integerMultiplyRight(i32 %a, i32 %b) { | 45 define internal i32 @integerMultiplyRight(i32 %a, i32 %b) { |
46 entry: | 46 entry: |
47 %tmp = mul i32 %a, %b | 47 %tmp = mul i32 %a, %b |
48 %result = mul i32 %b, %tmp | 48 %result = mul i32 %b, %tmp |
49 ret i32 %result | 49 ret i32 %result |
50 } | 50 } |
51 ; CHECK-LABEL: integerMultiplyRight | 51 ; CHECK-LABEL: integerMultiplyRight |
52 ; CHECK-NEXT: mov {{e..}},DWORD PTR | 52 ; CHECK-NEXT: mov {{e..}},DWORD PTR |
53 ; CHECK-NEXT: mov {{e..}},DWORD PTR | 53 ; CHECK-NEXT: mov {{e..}},DWORD PTR |
54 ; CHECK-NEXT: imul {{e..}},{{e..}} | 54 ; CHECK-NEXT: imul {{e..}},{{e..}} |
55 ; CHECK-NEXT: imul {{e..}},{{e..}} | 55 ; CHECK-NEXT: imul {{e..}},{{e..}} |
56 | 56 |
57 define float @floatAddLeft(float %a, float %b) { | 57 define internal float @floatAddLeft(float %a, float %b) { |
58 entry: | 58 entry: |
59 %tmp = fadd float %a, %b | 59 %tmp = fadd float %a, %b |
60 %result = fadd float %a, %tmp | 60 %result = fadd float %a, %tmp |
61 ret float %result | 61 ret float %result |
62 } | 62 } |
63 ; CHECK-LABEL: floatAddLeft | 63 ; CHECK-LABEL: floatAddLeft |
64 ; CHECK-NEXT: movss xmm0,DWORD PTR | 64 ; CHECK-NEXT: movss xmm0,DWORD PTR |
65 ; CHECK-NEXT: movss xmm1,DWORD PTR | 65 ; CHECK-NEXT: movss xmm1,DWORD PTR |
66 ; CHECK-NEXT: addss xmm1,xmm0 | 66 ; CHECK-NEXT: addss xmm1,xmm0 |
67 ; CHECK-NEXT: addss xmm0,xmm1 | 67 ; CHECK-NEXT: addss xmm0,xmm1 |
68 | 68 |
69 define float @floatAddRight(float %a, float %b) { | 69 define internal float @floatAddRight(float %a, float %b) { |
70 entry: | 70 entry: |
71 %tmp = fadd float %a, %b | 71 %tmp = fadd float %a, %b |
72 %result = fadd float %b, %tmp | 72 %result = fadd float %b, %tmp |
73 ret float %result | 73 ret float %result |
74 } | 74 } |
75 ; CHECK-LABEL: floatAddRight | 75 ; CHECK-LABEL: floatAddRight |
76 ; CHECK-NEXT: movss xmm0,DWORD PTR | 76 ; CHECK-NEXT: movss xmm0,DWORD PTR |
77 ; CHECK-NEXT: movss xmm1,DWORD PTR | 77 ; CHECK-NEXT: movss xmm1,DWORD PTR |
78 ; CHECK-NEXT: addss xmm0,xmm1 | 78 ; CHECK-NEXT: addss xmm0,xmm1 |
79 ; CHECK-NEXT: addss xmm1,xmm0 | 79 ; CHECK-NEXT: addss xmm1,xmm0 |
80 | 80 |
81 define float @floatMultiplyLeft(float %a, float %b) { | 81 define internal float @floatMultiplyLeft(float %a, float %b) { |
82 entry: | 82 entry: |
83 %tmp = fmul float %a, %b | 83 %tmp = fmul float %a, %b |
84 %result = fmul float %a, %tmp | 84 %result = fmul float %a, %tmp |
85 ret float %result | 85 ret float %result |
86 } | 86 } |
87 ; CHECK-LABEL: floatMultiplyLeft | 87 ; CHECK-LABEL: floatMultiplyLeft |
88 ; CHECK-NEXT: movss xmm0,DWORD PTR | 88 ; CHECK-NEXT: movss xmm0,DWORD PTR |
89 ; CHECK-NEXT: movss xmm1,DWORD PTR | 89 ; CHECK-NEXT: movss xmm1,DWORD PTR |
90 ; CHECK-NEXT: mulss xmm1,xmm0 | 90 ; CHECK-NEXT: mulss xmm1,xmm0 |
91 ; CHECK-NEXT: mulss xmm0,xmm1 | 91 ; CHECK-NEXT: mulss xmm0,xmm1 |
92 | 92 |
93 define float @floatMultiplyRight(float %a, float %b) { | 93 define internal float @floatMultiplyRight(float %a, float %b) { |
94 entry: | 94 entry: |
95 %tmp = fmul float %a, %b | 95 %tmp = fmul float %a, %b |
96 %result = fmul float %b, %tmp | 96 %result = fmul float %b, %tmp |
97 ret float %result | 97 ret float %result |
98 } | 98 } |
99 ; CHECK-LABEL: floatMultiplyRight | 99 ; CHECK-LABEL: floatMultiplyRight |
100 ; CHECK-NEXT: movss xmm0,DWORD PTR | 100 ; CHECK-NEXT: movss xmm0,DWORD PTR |
101 ; CHECK-NEXT: movss xmm1,DWORD PTR | 101 ; CHECK-NEXT: movss xmm1,DWORD PTR |
102 ; CHECK-NEXT: mulss xmm0,xmm1 | 102 ; CHECK-NEXT: mulss xmm0,xmm1 |
103 ; CHECK-NEXT: mulss xmm1,xmm0 | 103 ; CHECK-NEXT: mulss xmm1,xmm0 |
OLD | NEW |