1 ; RUN: opt < %s -reassociate -S | FileCheck %s
3 ; Canonicalize operands, but don't optimize floating point vector operations.
4 define <4 x float> @test1() {
6 ; CHECK-NEXT: %tmp1 = fsub fast <4 x float> zeroinitializer, zeroinitializer
7 ; CHECK-NEXT: %tmp2 = fmul fast <4 x float> %tmp1, zeroinitializer
9 %tmp1 = fsub fast <4 x float> zeroinitializer, zeroinitializer
10 %tmp2 = fmul fast <4 x float> zeroinitializer, %tmp1
14 ; Commute integer vector operations.
15 define <2 x i32> @test2(<2 x i32> %x, <2 x i32> %y) {
17 ; CHECK-NEXT: %tmp1 = add <2 x i32> %x, %y
18 ; CHECK-NEXT: %tmp2 = add <2 x i32> %x, %y
19 ; CHECK-NEXT: %tmp3 = add <2 x i32> %tmp1, %tmp2
21 %tmp1 = add <2 x i32> %x, %y
22 %tmp2 = add <2 x i32> %y, %x
23 %tmp3 = add <2 x i32> %tmp1, %tmp2
27 define <2 x i32> @test3(<2 x i32> %x, <2 x i32> %y) {
29 ; CHECK-NEXT: %tmp1 = mul <2 x i32> %x, %y
30 ; CHECK-NEXT: %tmp2 = mul <2 x i32> %x, %y
31 ; CHECK-NEXT: %tmp3 = mul <2 x i32> %tmp1, %tmp2
33 %tmp1 = mul <2 x i32> %x, %y
34 %tmp2 = mul <2 x i32> %y, %x
35 %tmp3 = mul <2 x i32> %tmp1, %tmp2
39 define <2 x i32> @test4(<2 x i32> %x, <2 x i32> %y) {
41 ; CHECK-NEXT: %tmp1 = and <2 x i32> %x, %y
42 ; CHECK-NEXT: %tmp2 = and <2 x i32> %x, %y
43 ; CHECK-NEXT: %tmp3 = and <2 x i32> %tmp1, %tmp2
45 %tmp1 = and <2 x i32> %x, %y
46 %tmp2 = and <2 x i32> %y, %x
47 %tmp3 = and <2 x i32> %tmp1, %tmp2
51 define <2 x i32> @test5(<2 x i32> %x, <2 x i32> %y) {
53 ; CHECK-NEXT: %tmp1 = or <2 x i32> %x, %y
54 ; CHECK-NEXT: %tmp2 = or <2 x i32> %x, %y
55 ; CHECK-NEXT: %tmp3 = or <2 x i32> %tmp1, %tmp2
57 %tmp1 = or <2 x i32> %x, %y
58 %tmp2 = or <2 x i32> %y, %x
59 %tmp3 = or <2 x i32> %tmp1, %tmp2
63 define <2 x i32> @test6(<2 x i32> %x, <2 x i32> %y) {
65 ; CHECK-NEXT: %tmp1 = xor <2 x i32> %x, %y
66 ; CHECK-NEXT: %tmp2 = xor <2 x i32> %x, %y
67 ; CHECK-NEXT: %tmp3 = xor <2 x i32> %tmp1, %tmp2
69 %tmp1 = xor <2 x i32> %x, %y
70 %tmp2 = xor <2 x i32> %y, %x
71 %tmp3 = xor <2 x i32> %tmp1, %tmp2