[opaque pointer type] Add textual IR support for explicit type parameter to load...
[oota-llvm.git] / test / Transforms / Reassociate / fast-ReassociateVector.ll
1 ; RUN: opt < %s -reassociate -S | FileCheck %s
2
3 ; Canonicalize operands, but don't optimize floating point vector operations.
4 define <4 x float> @test1() {
5 ; CHECK-LABEL: test1
6 ; CHECK-NEXT: %tmp1 = fsub fast <4 x float> zeroinitializer, zeroinitializer
7 ; CHECK-NEXT: %tmp2 = fmul fast <4 x float> %tmp1, zeroinitializer
8
9   %tmp1 = fsub fast <4 x float> zeroinitializer, zeroinitializer
10   %tmp2 = fmul fast <4 x float> zeroinitializer, %tmp1
11   ret <4 x float> %tmp2
12 }
13
14 ; Commute integer vector operations.
15 define <2 x i32> @test2(<2 x i32> %x, <2 x i32> %y) {
16 ; CHECK-LABEL: test2
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
20
21   %tmp1 = add <2 x i32> %x, %y
22   %tmp2 = add <2 x i32> %y, %x
23   %tmp3 = add <2 x i32> %tmp1, %tmp2
24   ret <2 x i32> %tmp3
25 }
26
27 define <2 x i32> @test3(<2 x i32> %x, <2 x i32> %y) {
28 ; CHECK-LABEL: test3
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
32
33   %tmp1 = mul <2 x i32> %x, %y
34   %tmp2 = mul <2 x i32> %y, %x
35   %tmp3 = mul <2 x i32> %tmp1, %tmp2
36   ret <2 x i32> %tmp3
37 }
38
39 define <2 x i32> @test4(<2 x i32> %x, <2 x i32> %y) {
40 ; CHECK-LABEL: test4
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
44
45   %tmp1 = and <2 x i32> %x, %y
46   %tmp2 = and <2 x i32> %y, %x
47   %tmp3 = and <2 x i32> %tmp1, %tmp2
48   ret <2 x i32> %tmp3
49 }
50
51 define <2 x i32> @test5(<2 x i32> %x, <2 x i32> %y) {
52 ; CHECK-LABEL: test5
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
56
57   %tmp1 = or <2 x i32> %x, %y
58   %tmp2 = or <2 x i32> %y, %x
59   %tmp3 = or <2 x i32> %tmp1, %tmp2
60   ret <2 x i32> %tmp3
61 }
62
63 define <2 x i32> @test6(<2 x i32> %x, <2 x i32> %y) {
64 ; CHECK-LABEL: test6
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
68
69   %tmp1 = xor <2 x i32> %x, %y
70   %tmp2 = xor <2 x i32> %y, %x
71   %tmp3 = xor <2 x i32> %tmp1, %tmp2
72   ret <2 x i32> %tmp3
73 }