Matt Arsenault | 7a960a8 | 2013-08-20 21:20:04 +0000 | [diff] [blame^] | 1 | ; RUN: opt < %s -default-data-layout="e-p:64:64:64-p1:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64" -instcombine -S | FileCheck %s --check-prefix=LE |
| 2 | ; RUN: opt < %s -default-data-layout="E-p:64:64:64-p1:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64" -instcombine -S | FileCheck %s --check-prefix=BE |
Chris Lattner | ed00b80 | 2009-10-23 06:23:49 +0000 | [diff] [blame] | 3 | |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 4 | ; {{ 0xDEADBEEF, 0xBA }, 0xCAFEBABE} |
Chris Lattner | 9e2d5b3 | 2009-10-24 05:22:15 +0000 | [diff] [blame] | 5 | @g1 = constant {{i32,i8},i32} {{i32,i8} { i32 -559038737, i8 186 }, i32 -889275714 } |
| 6 | @g2 = constant double 1.0 |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 7 | ; { 0x7B, 0x06B1BFF8 } |
Chris Lattner | 9e2d5b3 | 2009-10-24 05:22:15 +0000 | [diff] [blame] | 8 | @g3 = constant {i64, i64} { i64 123, i64 112312312 } |
Chris Lattner | ed00b80 | 2009-10-23 06:23:49 +0000 | [diff] [blame] | 9 | |
| 10 | ; Simple load |
| 11 | define i32 @test1() { |
Chris Lattner | 9e2d5b3 | 2009-10-24 05:22:15 +0000 | [diff] [blame] | 12 | %r = load i32* getelementptr ({{i32,i8},i32}* @g1, i32 0, i32 0, i32 0) |
Chris Lattner | ed00b80 | 2009-10-23 06:23:49 +0000 | [diff] [blame] | 13 | ret i32 %r |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 14 | |
| 15 | ; 0xDEADBEEF |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 16 | ; LE-LABEL: @test1( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 17 | ; LE: ret i32 -559038737 |
| 18 | |
| 19 | ; 0xDEADBEEF |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 20 | ; BE-LABEL: @test1( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 21 | ; BE: ret i32 -559038737 |
Chris Lattner | ed00b80 | 2009-10-23 06:23:49 +0000 | [diff] [blame] | 22 | } |
| 23 | |
| 24 | ; PR3152 |
| 25 | ; Load of first 16 bits of 32-bit value. |
| 26 | define i16 @test2() { |
Chris Lattner | 9e2d5b3 | 2009-10-24 05:22:15 +0000 | [diff] [blame] | 27 | %r = load i16* bitcast(i32* getelementptr ({{i32,i8},i32}* @g1, i32 0, i32 0, i32 0) to i16*) |
Chris Lattner | ed00b80 | 2009-10-23 06:23:49 +0000 | [diff] [blame] | 28 | ret i16 %r |
| 29 | |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 30 | ; 0xBEEF |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 31 | ; LE-LABEL: @test2( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 32 | ; LE: ret i16 -16657 |
| 33 | |
| 34 | ; 0xDEAD |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 35 | ; BE-LABEL: @test2( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 36 | ; BE: ret i16 -8531 |
Chris Lattner | ed00b80 | 2009-10-23 06:23:49 +0000 | [diff] [blame] | 37 | } |
| 38 | |
| 39 | ; Load of second 16 bits of 32-bit value. |
| 40 | define i16 @test3() { |
Chris Lattner | 9e2d5b3 | 2009-10-24 05:22:15 +0000 | [diff] [blame] | 41 | %r = load i16* getelementptr(i16* bitcast(i32* getelementptr ({{i32,i8},i32}* @g1, i32 0, i32 0, i32 0) to i16*), i32 1) |
Chris Lattner | ed00b80 | 2009-10-23 06:23:49 +0000 | [diff] [blame] | 42 | ret i16 %r |
| 43 | |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 44 | ; 0xDEAD |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 45 | ; LE-LABEL: @test3( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 46 | ; LE: ret i16 -8531 |
| 47 | |
| 48 | ; 0xBEEF |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 49 | ; BE-LABEL: @test3( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 50 | ; BE: ret i16 -16657 |
Chris Lattner | ed00b80 | 2009-10-23 06:23:49 +0000 | [diff] [blame] | 51 | } |
| 52 | |
| 53 | ; Load of 8 bit field + tail padding. |
| 54 | define i16 @test4() { |
Chris Lattner | 9e2d5b3 | 2009-10-24 05:22:15 +0000 | [diff] [blame] | 55 | %r = load i16* getelementptr(i16* bitcast(i32* getelementptr ({{i32,i8},i32}* @g1, i32 0, i32 0, i32 0) to i16*), i32 2) |
Chris Lattner | ed00b80 | 2009-10-23 06:23:49 +0000 | [diff] [blame] | 56 | ret i16 %r |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 57 | |
| 58 | ; 0x00BA |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 59 | ; LE-LABEL: @test4( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 60 | ; LE: ret i16 186 |
| 61 | |
| 62 | ; 0xBA00 |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 63 | ; BE-LABEL: @test4( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 64 | ; BE: ret i16 -17920 |
Chris Lattner | ed00b80 | 2009-10-23 06:23:49 +0000 | [diff] [blame] | 65 | } |
| 66 | |
| 67 | ; Load of double bits. |
| 68 | define i64 @test6() { |
Chris Lattner | 9e2d5b3 | 2009-10-24 05:22:15 +0000 | [diff] [blame] | 69 | %r = load i64* bitcast(double* @g2 to i64*) |
Chris Lattner | ed00b80 | 2009-10-23 06:23:49 +0000 | [diff] [blame] | 70 | ret i64 %r |
| 71 | |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 72 | ; 0x3FF_0000000000000 |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 73 | ; LE-LABEL: @test6( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 74 | ; LE: ret i64 4607182418800017408 |
| 75 | |
| 76 | ; 0x3FF_0000000000000 |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 77 | ; BE-LABEL: @test6( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 78 | ; BE: ret i64 4607182418800017408 |
Chris Lattner | ed00b80 | 2009-10-23 06:23:49 +0000 | [diff] [blame] | 79 | } |
| 80 | |
| 81 | ; Load of double bits. |
| 82 | define i16 @test7() { |
Chris Lattner | 9e2d5b3 | 2009-10-24 05:22:15 +0000 | [diff] [blame] | 83 | %r = load i16* bitcast(double* @g2 to i16*) |
Chris Lattner | ed00b80 | 2009-10-23 06:23:49 +0000 | [diff] [blame] | 84 | ret i16 %r |
| 85 | |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 86 | ; 0x0000 |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 87 | ; LE-LABEL: @test7( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 88 | ; LE: ret i16 0 |
| 89 | |
| 90 | ; 0x3FF0 |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 91 | ; BE-LABEL: @test7( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 92 | ; BE: ret i16 16368 |
Chris Lattner | ed00b80 | 2009-10-23 06:23:49 +0000 | [diff] [blame] | 93 | } |
| 94 | |
| 95 | ; Double load. |
| 96 | define double @test8() { |
Chris Lattner | 9e2d5b3 | 2009-10-24 05:22:15 +0000 | [diff] [blame] | 97 | %r = load double* bitcast({{i32,i8},i32}* @g1 to double*) |
Chris Lattner | ed00b80 | 2009-10-23 06:23:49 +0000 | [diff] [blame] | 98 | ret double %r |
| 99 | |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 100 | ; LE-LABEL: @test8( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 101 | ; LE: ret double 0xBADEADBEEF |
| 102 | |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 103 | ; BE-LABEL: @test8( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 104 | ; BE: ret double 0xDEADBEEFBA000000 |
Chris Lattner | ed00b80 | 2009-10-23 06:23:49 +0000 | [diff] [blame] | 105 | } |
Chris Lattner | 59f94c0 | 2009-10-23 06:50:36 +0000 | [diff] [blame] | 106 | |
| 107 | |
| 108 | ; i128 load. |
| 109 | define i128 @test9() { |
Chris Lattner | 9e2d5b3 | 2009-10-24 05:22:15 +0000 | [diff] [blame] | 110 | %r = load i128* bitcast({i64, i64}* @g3 to i128*) |
Chris Lattner | 59f94c0 | 2009-10-23 06:50:36 +0000 | [diff] [blame] | 111 | ret i128 %r |
| 112 | |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 113 | ; 0x00000000_06B1BFF8_00000000_0000007B |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 114 | ; LE-LABEL: @test9( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 115 | ; LE: ret i128 2071796475790618158476296315 |
| 116 | |
| 117 | ; 0x00000000_0000007B_00000000_06B1BFF8 |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 118 | ; BE-LABEL: @test9( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 119 | ; BE: ret i128 2268949521066387161080 |
Chris Lattner | 59f94c0 | 2009-10-23 06:50:36 +0000 | [diff] [blame] | 120 | } |
Chris Lattner | ccf1e84 | 2009-10-23 06:57:37 +0000 | [diff] [blame] | 121 | |
| 122 | ; vector load. |
| 123 | define <2 x i64> @test10() { |
Chris Lattner | 9e2d5b3 | 2009-10-24 05:22:15 +0000 | [diff] [blame] | 124 | %r = load <2 x i64>* bitcast({i64, i64}* @g3 to <2 x i64>*) |
Chris Lattner | ccf1e84 | 2009-10-23 06:57:37 +0000 | [diff] [blame] | 125 | ret <2 x i64> %r |
| 126 | |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 127 | ; LE-LABEL: @test10( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 128 | ; LE: ret <2 x i64> <i64 123, i64 112312312> |
| 129 | |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 130 | ; BE-LABEL: @test10( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 131 | ; BE: ret <2 x i64> <i64 123, i64 112312312> |
Chris Lattner | ccf1e84 | 2009-10-23 06:57:37 +0000 | [diff] [blame] | 132 | } |
| 133 | |
Chris Lattner | 9e2d5b3 | 2009-10-24 05:22:15 +0000 | [diff] [blame] | 134 | |
| 135 | ; PR5287 |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 136 | ; { 0xA1, 0x08 } |
Chris Lattner | 9e2d5b3 | 2009-10-24 05:22:15 +0000 | [diff] [blame] | 137 | @g4 = internal constant { i8, i8 } { i8 -95, i8 8 } |
| 138 | |
| 139 | define i16 @test11() nounwind { |
| 140 | entry: |
| 141 | %a = load i16* bitcast ({ i8, i8 }* @g4 to i16*) |
| 142 | ret i16 %a |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 143 | |
| 144 | ; 0x08A1 |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 145 | ; LE-LABEL: @test11( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 146 | ; LE: ret i16 2209 |
| 147 | |
| 148 | ; 0xA108 |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 149 | ; BE-LABEL: @test11( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 150 | ; BE: ret i16 -24312 |
Chris Lattner | 9e2d5b3 | 2009-10-24 05:22:15 +0000 | [diff] [blame] | 151 | } |
| 152 | |
| 153 | |
Chris Lattner | 1ddfd9f | 2009-12-04 06:29:29 +0000 | [diff] [blame] | 154 | ; PR5551 |
| 155 | @test12g = private constant [6 x i8] c"a\00b\00\00\00" |
| 156 | |
| 157 | define i16 @test12() { |
Matt Arsenault | 7a960a8 | 2013-08-20 21:20:04 +0000 | [diff] [blame^] | 158 | %a = load i16* getelementptr inbounds ([3 x i16]* bitcast ([6 x i8]* @test12g to [3 x i16]*), i32 0, i64 1) |
Chris Lattner | 1ddfd9f | 2009-12-04 06:29:29 +0000 | [diff] [blame] | 159 | ret i16 %a |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 160 | |
| 161 | ; 0x0062 |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 162 | ; LE-LABEL: @test12( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 163 | ; LE: ret i16 98 |
| 164 | |
| 165 | ; 0x6200 |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 166 | ; BE-LABEL: @test12( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 167 | ; BE: ret i16 25088 |
Chris Lattner | 1ddfd9f | 2009-12-04 06:29:29 +0000 | [diff] [blame] | 168 | } |
Chris Lattner | a69f89c | 2010-01-08 19:02:23 +0000 | [diff] [blame] | 169 | |
| 170 | |
| 171 | ; PR5978 |
| 172 | @g5 = constant i8 4 |
| 173 | define i1 @test13() { |
| 174 | %A = load i1* bitcast (i8* @g5 to i1*) |
| 175 | ret i1 %A |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 176 | |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 177 | ; LE-LABEL: @test13( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 178 | ; LE: ret i1 false |
| 179 | |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 180 | ; BE-LABEL: @test13( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 181 | ; BE: ret i1 false |
Chris Lattner | a69f89c | 2010-01-08 19:02:23 +0000 | [diff] [blame] | 182 | } |
Anders Carlsson | d21b06a | 2011-02-06 20:11:56 +0000 | [diff] [blame] | 183 | |
| 184 | @g6 = constant [2 x i8*] [i8* inttoptr (i64 1 to i8*), i8* inttoptr (i64 2 to i8*)] |
| 185 | define i64 @test14() nounwind { |
| 186 | entry: |
| 187 | %tmp = load i64* bitcast ([2 x i8*]* @g6 to i64*) |
| 188 | ret i64 %tmp |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 189 | |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 190 | ; LE-LABEL: @test14( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 191 | ; LE: ret i64 1 |
| 192 | |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 193 | ; BE-LABEL: @test14( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 194 | ; BE: ret i64 1 |
Anders Carlsson | d21b06a | 2011-02-06 20:11:56 +0000 | [diff] [blame] | 195 | } |
| 196 | |
Matt Arsenault | 7a960a8 | 2013-08-20 21:20:04 +0000 | [diff] [blame^] | 197 | ; Check with address space pointers |
| 198 | @g6_as1 = constant [2 x i8 addrspace(1)*] [i8 addrspace(1)* inttoptr (i16 1 to i8 addrspace(1)*), i8 addrspace(1)* inttoptr (i16 2 to i8 addrspace(1)*)] |
| 199 | define i16 @test14_as1() nounwind { |
| 200 | entry: |
| 201 | %tmp = load i16* bitcast ([2 x i8 addrspace(1)*]* @g6_as1 to i16*) |
| 202 | ret i16 %tmp |
| 203 | |
| 204 | ; LE: @test14_as1 |
| 205 | ; LE: ret i16 1 |
| 206 | |
| 207 | ; BE: @test14_as1 |
| 208 | ; BE: ret i16 1 |
| 209 | } |
| 210 | |
Anders Carlsson | d21b06a | 2011-02-06 20:11:56 +0000 | [diff] [blame] | 211 | define i64 @test15() nounwind { |
| 212 | entry: |
| 213 | %tmp = load i64* bitcast (i8** getelementptr inbounds ([2 x i8*]* @g6, i32 0, i64 1) to i64*) |
| 214 | ret i64 %tmp |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 215 | |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 216 | ; LE-LABEL: @test15( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 217 | ; LE: ret i64 2 |
| 218 | |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame] | 219 | ; BE-LABEL: @test15( |
NAKAMURA Takumi | 43ab4ef | 2012-11-08 20:34:25 +0000 | [diff] [blame] | 220 | ; BE: ret i64 2 |
Anders Carlsson | d21b06a | 2011-02-06 20:11:56 +0000 | [diff] [blame] | 221 | } |