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