| ; RUN: opt < %s -reassociate -S | FileCheck %s |
| |
| ; Canonicalize operands, but don't optimize floating point vector operations. |
| define <4 x float> @test1() { |
| ; CHECK-LABEL: test1 |
| ; CHECK-NEXT: %tmp1 = fsub fast <4 x float> zeroinitializer, zeroinitializer |
| ; CHECK-NEXT: %tmp2 = fmul fast <4 x float> %tmp1, zeroinitializer |
| |
| %tmp1 = fsub fast <4 x float> zeroinitializer, zeroinitializer |
| %tmp2 = fmul fast <4 x float> zeroinitializer, %tmp1 |
| ret <4 x float> %tmp2 |
| } |
| |
| ; Commute integer vector operations. |
| define <2 x i32> @test2(<2 x i32> %x, <2 x i32> %y) { |
| ; CHECK-LABEL: test2 |
| ; CHECK-NEXT: %tmp1 = add <2 x i32> %x, %y |
| ; CHECK-NEXT: %tmp2 = add <2 x i32> %x, %y |
| ; CHECK-NEXT: %tmp3 = add <2 x i32> %tmp1, %tmp2 |
| |
| %tmp1 = add <2 x i32> %x, %y |
| %tmp2 = add <2 x i32> %y, %x |
| %tmp3 = add <2 x i32> %tmp1, %tmp2 |
| ret <2 x i32> %tmp3 |
| } |
| |
| define <2 x i32> @test3(<2 x i32> %x, <2 x i32> %y) { |
| ; CHECK-LABEL: test3 |
| ; CHECK-NEXT: %tmp1 = mul <2 x i32> %x, %y |
| ; CHECK-NEXT: %tmp2 = mul <2 x i32> %x, %y |
| ; CHECK-NEXT: %tmp3 = mul <2 x i32> %tmp1, %tmp2 |
| |
| %tmp1 = mul <2 x i32> %x, %y |
| %tmp2 = mul <2 x i32> %y, %x |
| %tmp3 = mul <2 x i32> %tmp1, %tmp2 |
| ret <2 x i32> %tmp3 |
| } |
| |
| define <2 x i32> @test4(<2 x i32> %x, <2 x i32> %y) { |
| ; CHECK-LABEL: test4 |
| ; CHECK-NEXT: %tmp1 = and <2 x i32> %x, %y |
| ; CHECK-NEXT: %tmp2 = and <2 x i32> %x, %y |
| ; CHECK-NEXT: %tmp3 = and <2 x i32> %tmp1, %tmp2 |
| |
| %tmp1 = and <2 x i32> %x, %y |
| %tmp2 = and <2 x i32> %y, %x |
| %tmp3 = and <2 x i32> %tmp1, %tmp2 |
| ret <2 x i32> %tmp3 |
| } |
| |
| define <2 x i32> @test5(<2 x i32> %x, <2 x i32> %y) { |
| ; CHECK-LABEL: test5 |
| ; CHECK-NEXT: %tmp1 = or <2 x i32> %x, %y |
| ; CHECK-NEXT: %tmp2 = or <2 x i32> %x, %y |
| ; CHECK-NEXT: %tmp3 = or <2 x i32> %tmp1, %tmp2 |
| |
| %tmp1 = or <2 x i32> %x, %y |
| %tmp2 = or <2 x i32> %y, %x |
| %tmp3 = or <2 x i32> %tmp1, %tmp2 |
| ret <2 x i32> %tmp3 |
| } |
| |
| define <2 x i32> @test6(<2 x i32> %x, <2 x i32> %y) { |
| ; CHECK-LABEL: test6 |
| ; CHECK-NEXT: %tmp1 = xor <2 x i32> %x, %y |
| ; CHECK-NEXT: %tmp2 = xor <2 x i32> %x, %y |
| ; CHECK-NEXT: %tmp3 = xor <2 x i32> %tmp1, %tmp2 |
| |
| %tmp1 = xor <2 x i32> %x, %y |
| %tmp2 = xor <2 x i32> %y, %x |
| %tmp3 = xor <2 x i32> %tmp1, %tmp2 |
| ret <2 x i32> %tmp3 |
| } |