Mercurial > hg > CbC > CbC_llvm
comparison test/CodeGen/X86/SwizzleShuff.ll @ 95:afa8332a0e37 LLVM3.8
LLVM 3.8
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 13 Oct 2015 17:48:58 +0900 |
parents | 60c9769439b8 |
children | 803732b1fca8 |
comparison
equal
deleted
inserted
replaced
84:f3e34b893a5f | 95:afa8332a0e37 |
---|---|
4 | 4 |
5 ; CHECK: pull_bitcast | 5 ; CHECK: pull_bitcast |
6 ; CHECK: xorl | 6 ; CHECK: xorl |
7 ; CHECK: ret | 7 ; CHECK: ret |
8 define void @pull_bitcast (<4 x i8>* %pA, <4 x i8>* %pB) { | 8 define void @pull_bitcast (<4 x i8>* %pA, <4 x i8>* %pB) { |
9 %A = load <4 x i8>* %pA | 9 %A = load <4 x i8>, <4 x i8>* %pA |
10 %B = load <4 x i8>* %pB | 10 %B = load <4 x i8>, <4 x i8>* %pB |
11 %C = xor <4 x i8> %A, %B | 11 %C = xor <4 x i8> %A, %B |
12 store <4 x i8> %C, <4 x i8>* %pA | 12 store <4 x i8> %C, <4 x i8>* %pA |
13 ret void | 13 ret void |
14 } | 14 } |
15 | 15 |
20 ; CHECK-NEXT: pshufd | 20 ; CHECK-NEXT: pshufd |
21 ; CHECK-NEXT: pshufd | 21 ; CHECK-NEXT: pshufd |
22 ; CHECK-NEXT: pxor | 22 ; CHECK-NEXT: pxor |
23 ; CHECK-NEXT: ret | 23 ; CHECK-NEXT: ret |
24 define <4 x i32> @multi_use_swizzle (<4 x i32>* %pA, <4 x i32>* %pB) { | 24 define <4 x i32> @multi_use_swizzle (<4 x i32>* %pA, <4 x i32>* %pB) { |
25 %A = load <4 x i32>* %pA | 25 %A = load <4 x i32>, <4 x i32>* %pA |
26 %B = load <4 x i32>* %pB | 26 %B = load <4 x i32>, <4 x i32>* %pB |
27 %S = shufflevector <4 x i32> %A, <4 x i32> %B, <4 x i32> <i32 1, i32 1, i32 5, i32 6> | 27 %S = shufflevector <4 x i32> %A, <4 x i32> %B, <4 x i32> <i32 1, i32 1, i32 5, i32 6> |
28 %S1 = shufflevector <4 x i32> %S, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 2> | 28 %S1 = shufflevector <4 x i32> %S, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 2> |
29 %S2 = shufflevector <4 x i32> %S, <4 x i32> undef, <4 x i32> <i32 2, i32 1, i32 0, i32 2> | 29 %S2 = shufflevector <4 x i32> %S, <4 x i32> undef, <4 x i32> <i32 2, i32 1, i32 0, i32 2> |
30 %R = xor <4 x i32> %S1, %S2 | 30 %R = xor <4 x i32> %S1, %S2 |
31 ret <4 x i32> %R | 31 ret <4 x i32> %R |
33 | 33 |
34 ; CHECK: pull_bitcast2 | 34 ; CHECK: pull_bitcast2 |
35 ; CHECK: xorl | 35 ; CHECK: xorl |
36 ; CHECK: ret | 36 ; CHECK: ret |
37 define <4 x i8> @pull_bitcast2 (<4 x i8>* %pA, <4 x i8>* %pB, <4 x i8>* %pC) { | 37 define <4 x i8> @pull_bitcast2 (<4 x i8>* %pA, <4 x i8>* %pB, <4 x i8>* %pC) { |
38 %A = load <4 x i8>* %pA | 38 %A = load <4 x i8>, <4 x i8>* %pA |
39 store <4 x i8> %A, <4 x i8>* %pC | 39 store <4 x i8> %A, <4 x i8>* %pC |
40 %B = load <4 x i8>* %pB | 40 %B = load <4 x i8>, <4 x i8>* %pB |
41 %C = xor <4 x i8> %A, %B | 41 %C = xor <4 x i8> %A, %B |
42 store <4 x i8> %C, <4 x i8>* %pA | 42 store <4 x i8> %C, <4 x i8>* %pA |
43 ret <4 x i8> %C | 43 ret <4 x i8> %C |
44 } | 44 } |
45 | 45 |
47 | 47 |
48 ; CHECK: reverse_1 | 48 ; CHECK: reverse_1 |
49 ; CHECK-NOT: pshufd | 49 ; CHECK-NOT: pshufd |
50 ; CHECK: ret | 50 ; CHECK: ret |
51 define <4 x i32> @reverse_1 (<4 x i32>* %pA, <4 x i32>* %pB) { | 51 define <4 x i32> @reverse_1 (<4 x i32>* %pA, <4 x i32>* %pB) { |
52 %A = load <4 x i32>* %pA | 52 %A = load <4 x i32>, <4 x i32>* %pA |
53 %B = load <4 x i32>* %pB | 53 %B = load <4 x i32>, <4 x i32>* %pB |
54 %S = shufflevector <4 x i32> %A, <4 x i32> %B, <4 x i32> <i32 1, i32 0, i32 3, i32 2> | 54 %S = shufflevector <4 x i32> %A, <4 x i32> %B, <4 x i32> <i32 1, i32 0, i32 3, i32 2> |
55 %S1 = shufflevector <4 x i32> %S, <4 x i32> undef, <4 x i32> <i32 1, i32 0, i32 3, i32 2> | 55 %S1 = shufflevector <4 x i32> %S, <4 x i32> undef, <4 x i32> <i32 1, i32 0, i32 3, i32 2> |
56 ret <4 x i32> %S1 | 56 ret <4 x i32> %S1 |
57 } | 57 } |
58 | 58 |
59 | 59 |
60 ; CHECK: no_reverse_shuff | 60 ; CHECK: no_reverse_shuff |
61 ; CHECK: pshufd | 61 ; CHECK: pshufd |
62 ; CHECK: ret | 62 ; CHECK: ret |
63 define <4 x i32> @no_reverse_shuff (<4 x i32>* %pA, <4 x i32>* %pB) { | 63 define <4 x i32> @no_reverse_shuff (<4 x i32>* %pA, <4 x i32>* %pB) { |
64 %A = load <4 x i32>* %pA | 64 %A = load <4 x i32>, <4 x i32>* %pA |
65 %B = load <4 x i32>* %pB | 65 %B = load <4 x i32>, <4 x i32>* %pB |
66 %S = shufflevector <4 x i32> %A, <4 x i32> %B, <4 x i32> <i32 1, i32 0, i32 3, i32 2> | 66 %S = shufflevector <4 x i32> %A, <4 x i32> %B, <4 x i32> <i32 1, i32 0, i32 3, i32 2> |
67 %S1 = shufflevector <4 x i32> %S, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 3, i32 2> | 67 %S1 = shufflevector <4 x i32> %S, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 3, i32 2> |
68 ret <4 x i32> %S1 | 68 ret <4 x i32> %S1 |
69 } | 69 } |