f3633cc4438d81df4b62de127a500b89a4f04804
[oota-llvm.git] / test / Transforms / ConstProp / loads.ll
1 ; RUN: opt < %s -instcombine -S | FileCheck %s 
2
3 target datalayout = "e-p:64:64:64-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-f80:128:128"
4
5 @test1 = constant {{i32,i8},i32} {{i32,i8} { i32 -559038737, i8 186 }, i32 -889275714 }
6 @test2 = constant double 1.0
7
8 ; Simple load
9 define i32 @test1() {
10   %r = load i32* getelementptr ({{i32,i8},i32}* @test1, i32 0, i32 0, i32 0)
11   ret i32 %r
12 ; @test1
13 ; CHECK: ret i32 -559038737
14 }
15
16 ; PR3152
17 ; Load of first 16 bits of 32-bit value.
18 define i16 @test2() {
19   %r = load i16* bitcast(i32* getelementptr ({{i32,i8},i32}* @test1, i32 0, i32 0, i32 0) to i16*)
20   ret i16 %r
21
22 ; @test2
23 ; CHECK: ret i16 -16657 
24 }
25
26 ; Load of second 16 bits of 32-bit value.
27 define i16 @test3() {
28   %r = load i16* getelementptr(i16* bitcast(i32* getelementptr ({{i32,i8},i32}* @test1, i32 0, i32 0, i32 0) to i16*), i32 1)
29   ret i16 %r
30
31 ; @test3
32 ; CHECK: ret i16 -8531
33 }
34
35 ; Load of 8 bit field + tail padding.
36 define i16 @test4() {
37   %r = load i16* getelementptr(i16* bitcast(i32* getelementptr ({{i32,i8},i32}* @test1, i32 0, i32 0, i32 0) to i16*), i32 2)
38   ret i16 %r
39 ; @test4
40 ; CHECK: ret i16 186
41 }
42
43 ; Load of double bits.
44 define i64 @test6() {
45   %r = load i64* bitcast(double* @test2 to i64*)
46   ret i64 %r
47
48 ; @test6
49 ; CHECK: ret i64 4607182418800017408
50 }
51
52 ; Load of double bits.
53 define i16 @test7() {
54   %r = load i16* bitcast(double* @test2 to i16*)
55   ret i16 %r
56
57 ; @test7
58 ; CHECK: ret i16 0
59 }
60
61 ; Double load.
62 define double @test8() {
63   %r = load double* bitcast({{i32,i8},i32}* @test1 to double*)
64   ret double %r
65
66 ; @test8
67 ; CHECK: ret double 0xDEADBEBA
68 }