1; RUN: opt < %s -instcombine -S | FileCheck %s
2target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128-n8:16:32-S128"
3target triple = "i386-apple-macosx10.0.0"
4
5; Instcombine should be able to do trivial CSE of loads.
6
7define i32 @test1(i32* %p) {
8  %t0 = getelementptr i32, i32* %p, i32 1
9  %y = load i32, i32* %t0
10  %t1 = getelementptr i32, i32* %p, i32 1
11  %x = load i32, i32* %t1
12  %a = sub i32 %y, %x
13  ret i32 %a
14; CHECK-LABEL: @test1(
15; CHECK: ret i32 0
16}
17
18
19; PR7429
20@.str = private constant [4 x i8] c"XYZ\00"
21define float @test2() {
22  %tmp = load float, float* bitcast ([4 x i8]* @.str to float*), align 1
23  ret float %tmp
24
25; CHECK-LABEL: @test2(
26; CHECK: ret float 0x3806965600000000
27}
28
29@rslts32 = global [36 x i32] zeroinitializer, align 4
30
31@expect32 = internal constant [36 x i32][ i32 1, i32 2, i32 0, i32 100, i32 3,
32i32 4, i32 0, i32 -7, i32 4, i32 4, i32 8, i32 8, i32 1, i32 3, i32 8, i32 3,
33i32 4, i32 -2, i32 2, i32 8, i32 83, i32 77, i32 8, i32 17, i32 77, i32 88, i32
3422, i32 33, i32 44, i32 88, i32 77, i32 4, i32 4, i32 7, i32 -7, i32 -8] ,
35align 4
36
37; PR14986
38define void @test3() nounwind {
39; This is a weird way of computing zero.
40  %l = load i32, i32* getelementptr ([36 x i32], [36 x i32]* @expect32, i32 29826161, i32 28), align 4
41  store i32 %l, i32* getelementptr ([36 x i32], [36 x i32]* @rslts32, i32 29826161, i32 28), align 4
42  ret void
43
44; CHECK-LABEL: @test3(
45; CHECK: store i32 1, i32* getelementptr inbounds ([36 x i32], [36 x i32]* @rslts32, i32 0, i32 0)
46}
47