Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 1 | ; This file tests bitcasts of vector type. For most operations, these |
| 2 | ; should be lowered to a no-op on -O2. |
| 3 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 4 | ; RUN: %p2i -i %s --filetype=obj --disassemble --target=x8632 --args -O2 \ |
| 5 | ; RUN: | FileCheck --check-prefix=X86-O2 --check-prefix=X86 %s |
| 6 | ; RUN: %p2i -i %s --filetype=obj --disassemble --target=x8632 --args -Om1 \ |
| 7 | ; RUN: | FileCheck --check-prefix=X86 %s |
| 8 | |
| 9 | ; RUN: %p2i -i %s --filetype=obj --disassemble --target=x8664 --args -O2 \ |
| 10 | ; RUN: | FileCheck --check-prefix=X86-O2 --check-prefix=X86 %s |
| 11 | ; RUN: %p2i -i %s --filetype=obj --disassemble --target=x8664 --args -Om1 \ |
| 12 | ; RUN: | FileCheck --check-prefix=X86 %s |
| 13 | |
| 14 | ; RUN: %p2i -i %s --filetype=obj --disassemble --target=arm32 --args -O2 \ |
| 15 | ; RUN: | FileCheck --check-prefix=ARM32-O2-O2 --check-prefix=ARM32 %s |
| 16 | ; RUN: %p2i -i %s --filetype=obj --disassemble --target=arm32 --args -Om1 \ |
| 17 | ; RUN: | FileCheck --check-prefix=ARM32 %s |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 18 | |
Karl Schimpf | 57d31ac | 2015-10-07 09:53:12 -0700 | [diff] [blame] | 19 | define internal <16 x i8> @test_bitcast_v16i8_to_v16i8(<16 x i8> %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 20 | entry: |
| 21 | %res = bitcast <16 x i8> %arg to <16 x i8> |
| 22 | ret <16 x i8> %res |
| 23 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 24 | ; X86-O2-LABEL: test_bitcast_v16i8_to_v16i8 |
| 25 | ; X86-O2-NEXT: ret |
| 26 | |
| 27 | ; ARM32-O2-LABEL: test_bitcast_v16i8_to_v16i8 |
| 28 | ; ARM32-O2-NEXT: bx |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 29 | } |
| 30 | |
Karl Schimpf | 57d31ac | 2015-10-07 09:53:12 -0700 | [diff] [blame] | 31 | define internal <8 x i16> @test_bitcast_v16i8_to_v8i16(<16 x i8> %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 32 | entry: |
| 33 | %res = bitcast <16 x i8> %arg to <8 x i16> |
| 34 | ret <8 x i16> %res |
| 35 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 36 | ; X86-O2-LABEL: test_bitcast_v16i8_to_v8i16 |
| 37 | ; X86-O2-NEXT: ret |
| 38 | |
| 39 | ; ARM32-O2-LABEL: test_bitcast_v16i8_to_v8i16 |
| 40 | ; ARM32-O2-NEXT: bx |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 41 | } |
| 42 | |
Karl Schimpf | 57d31ac | 2015-10-07 09:53:12 -0700 | [diff] [blame] | 43 | define internal <4 x i32> @test_bitcast_v16i8_to_v4i32(<16 x i8> %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 44 | entry: |
| 45 | %res = bitcast <16 x i8> %arg to <4 x i32> |
| 46 | ret <4 x i32> %res |
| 47 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 48 | ; X86-O2-LABEL: test_bitcast_v16i8_to_v4i32 |
| 49 | ; X86-O2-NEXT: ret |
| 50 | |
| 51 | ; ARM32-O2-LABEL: test_bitcast_v16i8_to_v4i32 |
| 52 | ; ARM32-O2-NEXT: bx |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 53 | } |
| 54 | |
Karl Schimpf | 57d31ac | 2015-10-07 09:53:12 -0700 | [diff] [blame] | 55 | define internal <4 x float> @test_bitcast_v16i8_to_v4f32(<16 x i8> %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 56 | entry: |
| 57 | %res = bitcast <16 x i8> %arg to <4 x float> |
| 58 | ret <4 x float> %res |
| 59 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 60 | ; X86-O2-LABEL: test_bitcast_v16i8_to_v4f32 |
| 61 | ; X86-O2-NEXT: ret |
| 62 | |
| 63 | ; ARM32-O2-LABEL: test_bitcast_v16i8_to_v4f32 |
| 64 | ; ARM32-O2-NEXT: bx |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 65 | } |
| 66 | |
Karl Schimpf | 57d31ac | 2015-10-07 09:53:12 -0700 | [diff] [blame] | 67 | define internal <16 x i8> @test_bitcast_v8i16_to_v16i8(<8 x i16> %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 68 | entry: |
| 69 | %res = bitcast <8 x i16> %arg to <16 x i8> |
| 70 | ret <16 x i8> %res |
| 71 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 72 | ; X86-O2-LABEL: test_bitcast_v8i16_to_v16i8 |
| 73 | ; X86-O2-NEXT: ret |
| 74 | |
| 75 | ; ARM32-O2-LABEL: test_bitcast_v8i16_to_v16i8 |
| 76 | ; ARM32-O2-NEXT: bx |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 77 | } |
| 78 | |
Karl Schimpf | 57d31ac | 2015-10-07 09:53:12 -0700 | [diff] [blame] | 79 | define internal <8 x i16> @test_bitcast_v8i16_to_v8i16(<8 x i16> %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 80 | entry: |
| 81 | %res = bitcast <8 x i16> %arg to <8 x i16> |
| 82 | ret <8 x i16> %res |
| 83 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 84 | ; X86-O2-LABEL: test_bitcast_v8i16_to_v8i16 |
| 85 | ; X86-O2-NEXT: ret |
| 86 | |
| 87 | ; ARM32-O2-LABEL: test_bitcast_v8i16_to_v8i16 |
| 88 | ; ARM32-O2-NEXT: bx |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 89 | } |
| 90 | |
Karl Schimpf | 57d31ac | 2015-10-07 09:53:12 -0700 | [diff] [blame] | 91 | define internal <4 x i32> @test_bitcast_v8i16_to_v4i32(<8 x i16> %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 92 | entry: |
| 93 | %res = bitcast <8 x i16> %arg to <4 x i32> |
| 94 | ret <4 x i32> %res |
| 95 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 96 | ; X86-O2-LABEL: test_bitcast_v8i16_to_v4i32 |
| 97 | ; X86-O2-NEXT: ret |
| 98 | |
| 99 | ; ARM32-O2-LABEL: test_bitcast_v8i16_to_v4i32 |
| 100 | ; ARM32-O2-NEXT: bx |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 101 | } |
| 102 | |
Karl Schimpf | 57d31ac | 2015-10-07 09:53:12 -0700 | [diff] [blame] | 103 | define internal <4 x float> @test_bitcast_v8i16_to_v4f32(<8 x i16> %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 104 | entry: |
| 105 | %res = bitcast <8 x i16> %arg to <4 x float> |
| 106 | ret <4 x float> %res |
| 107 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 108 | ; X86-O2-LABEL: test_bitcast_v8i16_to_v4f32 |
| 109 | ; X86-O2-NEXT: ret |
| 110 | |
| 111 | ; ARM32-O2-LABEL: test_bitcast_v8i16_to_v4f32 |
| 112 | ; ARM32-O2-NEXT: bx |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 113 | } |
| 114 | |
Karl Schimpf | 57d31ac | 2015-10-07 09:53:12 -0700 | [diff] [blame] | 115 | define internal <16 x i8> @test_bitcast_v4i32_to_v16i8(<4 x i32> %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 116 | entry: |
| 117 | %res = bitcast <4 x i32> %arg to <16 x i8> |
| 118 | ret <16 x i8> %res |
| 119 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 120 | ; X86-O2-LABEL: test_bitcast_v4i32_to_v16i8 |
| 121 | ; X86-O2-NEXT: ret |
| 122 | |
| 123 | ; ARM32-O2-LABEL: test_bitcast_v4i32_to_v16i8 |
| 124 | ; ARM32-O2-NEXT: bx |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 125 | } |
| 126 | |
Karl Schimpf | 57d31ac | 2015-10-07 09:53:12 -0700 | [diff] [blame] | 127 | define internal <8 x i16> @test_bitcast_v4i32_to_v8i16(<4 x i32> %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 128 | entry: |
| 129 | %res = bitcast <4 x i32> %arg to <8 x i16> |
| 130 | ret <8 x i16> %res |
| 131 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 132 | ; X86-O2-LABEL: test_bitcast_v4i32_to_v8i16 |
| 133 | ; X86-O2-NEXT: ret |
| 134 | |
| 135 | ; ARM32-O2-LABEL: test_bitcast_v4i32_to_v8i16 |
| 136 | ; ARM32-O2-NEXT: bx |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 137 | } |
| 138 | |
Karl Schimpf | 57d31ac | 2015-10-07 09:53:12 -0700 | [diff] [blame] | 139 | define internal <4 x i32> @test_bitcast_v4i32_to_v4i32(<4 x i32> %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 140 | entry: |
| 141 | %res = bitcast <4 x i32> %arg to <4 x i32> |
| 142 | ret <4 x i32> %res |
| 143 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 144 | ; X86-O2-LABEL: test_bitcast_v4i32_to_v4i32 |
| 145 | ; X86-O2-NEXT: ret |
| 146 | |
| 147 | ; ARM32-O2-LABEL: test_bitcast_v4i32_to_v4i32 |
| 148 | ; ARM32-O2-NEXT: bx |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 149 | } |
| 150 | |
Karl Schimpf | 57d31ac | 2015-10-07 09:53:12 -0700 | [diff] [blame] | 151 | define internal <4 x float> @test_bitcast_v4i32_to_v4f32(<4 x i32> %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 152 | entry: |
| 153 | %res = bitcast <4 x i32> %arg to <4 x float> |
| 154 | ret <4 x float> %res |
| 155 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 156 | ; X86-O2-LABEL: test_bitcast_v4i32_to_v4f32 |
| 157 | ; X86-O2-NEXT: ret |
| 158 | |
| 159 | ; ARM32-O2-LABEL: test_bitcast_v4i32_to_v4f32 |
| 160 | ; ARM32-O2-NEXT: bx |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 161 | } |
| 162 | |
Karl Schimpf | 57d31ac | 2015-10-07 09:53:12 -0700 | [diff] [blame] | 163 | define internal <16 x i8> @test_bitcast_v4f32_to_v16i8(<4 x float> %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 164 | entry: |
| 165 | %res = bitcast <4 x float> %arg to <16 x i8> |
| 166 | ret <16 x i8> %res |
| 167 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 168 | ; X86-O2-LABEL: test_bitcast_v4f32_to_v16i8 |
| 169 | ; X86-O2-NEXT: ret |
| 170 | |
| 171 | ; ARM32-O2-LABEL: test_bitcast_v4f32_to_v16i8 |
| 172 | ; ARM32-O2-NEXT: bx |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 173 | } |
| 174 | |
Karl Schimpf | 57d31ac | 2015-10-07 09:53:12 -0700 | [diff] [blame] | 175 | define internal <8 x i16> @test_bitcast_v4f32_to_v8i16(<4 x float> %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 176 | entry: |
| 177 | %res = bitcast <4 x float> %arg to <8 x i16> |
| 178 | ret <8 x i16> %res |
| 179 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 180 | ; X86-O2-LABEL: test_bitcast_v4f32_to_v8i16 |
| 181 | ; X86-O2-NEXT: ret |
| 182 | |
| 183 | ; ARM32-O2-LABEL: test_bitcast_v4f32_to_v8i16 |
| 184 | ; ARM32-O2-NEXT: bx |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 185 | } |
| 186 | |
Karl Schimpf | 57d31ac | 2015-10-07 09:53:12 -0700 | [diff] [blame] | 187 | define internal <4 x i32> @test_bitcast_v4f32_to_v4i32(<4 x float> %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 188 | entry: |
| 189 | %res = bitcast <4 x float> %arg to <4 x i32> |
| 190 | ret <4 x i32> %res |
| 191 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 192 | ; X86-O2-LABEL: test_bitcast_v4f32_to_v4i32 |
| 193 | ; X86-O2-NEXT: ret |
| 194 | |
| 195 | ; ARM32-O2-LABEL: test_bitcast_v4f32_to_v4i32 |
| 196 | ; ARM32-O2-NEXT: bx |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 197 | } |
| 198 | |
Karl Schimpf | 57d31ac | 2015-10-07 09:53:12 -0700 | [diff] [blame] | 199 | define internal <4 x float> @test_bitcast_v4f32_to_v4f32(<4 x float> %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 200 | entry: |
| 201 | %res = bitcast <4 x float> %arg to <4 x float> |
| 202 | ret <4 x float> %res |
| 203 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 204 | ; X86-O2-LABEL: test_bitcast_v4f32_to_v4f32 |
| 205 | ; X86-O2-NEXT: ret |
| 206 | |
| 207 | ; ARM32-O2-LABEL: test_bitcast_v4f32_to_v4f32 |
| 208 | ; ARM32-O2-NEXT: bx |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 209 | } |
| 210 | |
David Sehr | b19d39c | 2016-01-13 14:17:37 -0800 | [diff] [blame] | 211 | define internal i32 @test_bitcast_v8i1_to_i8(<8 x i1> %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 212 | entry: |
| 213 | %res = bitcast <8 x i1> %arg to i8 |
David Sehr | b19d39c | 2016-01-13 14:17:37 -0800 | [diff] [blame] | 214 | %res.i32 = zext i8 %res to i32 |
| 215 | ret i32 %res.i32 |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 216 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 217 | ; X86-LABEL: test_bitcast_v8i1_to_i8 |
| 218 | ; X86: call {{.*}} R_{{.*}} __Sz_bitcast_8xi1_i8 |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 219 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 220 | ; ARM32-LABEL: test_bitcast_v8i1_to_i8 |
| 221 | ; ARM32: bl {{.*}} __Sz_bitcast_8xi1_i8 |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 222 | } |
| 223 | |
David Sehr | b19d39c | 2016-01-13 14:17:37 -0800 | [diff] [blame] | 224 | define internal i32 @test_bitcast_v16i1_to_i16(<16 x i1> %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 225 | entry: |
| 226 | %res = bitcast <16 x i1> %arg to i16 |
David Sehr | b19d39c | 2016-01-13 14:17:37 -0800 | [diff] [blame] | 227 | %res.i32 = zext i16 %res to i32 |
| 228 | ret i32 %res.i32 |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 229 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 230 | ; X86-LABEL: test_bitcast_v16i1_to_i16 |
| 231 | ; X86: call {{.*}} __Sz_bitcast_16xi1_i16 |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 232 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 233 | ; ARM32-LABEL: test_bitcast_v16i1_to_i16 |
| 234 | ; ARM32: bl {{.*}} __Sz_bitcast_16xi1_i16 |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 235 | } |
| 236 | |
Karl Schimpf | 57d31ac | 2015-10-07 09:53:12 -0700 | [diff] [blame] | 237 | define internal <8 x i1> @test_bitcast_i8_to_v8i1(i32 %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 238 | entry: |
| 239 | %arg.trunc = trunc i32 %arg to i8 |
| 240 | %res = bitcast i8 %arg.trunc to <8 x i1> |
| 241 | ret <8 x i1> %res |
| 242 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 243 | ; X86-LABEL: test_bitcast_i8_to_v8i1 |
| 244 | ; X86: call {{.*}} R_{{.*}} __Sz_bitcast_i8_8xi1 |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 245 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 246 | ; ARM32-LABEL: test_bitcast_i8_to_v8i1 |
| 247 | ; ARM32: bl {{.*}} __Sz_bitcast_i8_8xi1 |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 248 | } |
| 249 | |
Karl Schimpf | 57d31ac | 2015-10-07 09:53:12 -0700 | [diff] [blame] | 250 | define internal <16 x i1> @test_bitcast_i16_to_v16i1(i32 %arg) { |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 251 | entry: |
| 252 | %arg.trunc = trunc i32 %arg to i16 |
| 253 | %res = bitcast i16 %arg.trunc to <16 x i1> |
| 254 | ret <16 x i1> %res |
| 255 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 256 | ; X86-LABEL: test_bitcast_i16_to_v16i1 |
| 257 | ; X86: call {{.*}} R_{{.*}} __Sz_bitcast_i16_16xi1 |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 258 | |
John Porto | 7e6aa5a | 2016-03-02 15:10:19 -0800 | [diff] [blame] | 259 | ; ARM32-LABEL: test_bitcast_i16_to_v16i1 |
| 260 | ; ARM32: bl {{.*}} __Sz_bitcast_i16_16xi1 |
Matt Wala | 83b8036 | 2014-07-16 10:21:30 -0700 | [diff] [blame] | 261 | } |