Instcombine: destructor loads of structs that do not contains padding
[oota-llvm.git] / test / Transforms / LICM / 2007-05-22-VolatileSink.ll
1 ; RUN: opt < %s -licm -S | grep "store volatile"
2 ; PR1435
3 target 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"
4 target triple = "i686-apple-darwin8"
5
6 define void @Transpose(i32* %DataIn, i32* %DataOut) {
7 entry:
8         %buffer = alloca [64 x i32], align 16           ; <[64 x i32]*> [#uses=2]
9         %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
10         br label %bb6
11
12 bb:             ; preds = %bb6
13         %tmp2 = load volatile i32, i32* %DataIn         ; <i32> [#uses=1]
14         %tmp3 = getelementptr [64 x i32], [64 x i32]* %buffer, i32 0, i32 %i.0          ; <i32*> [#uses=1]
15         store i32 %tmp2, i32* %tmp3
16         %tmp5 = add i32 %i.0, 1         ; <i32> [#uses=1]
17         br label %bb6
18
19 bb6:            ; preds = %bb, %entry
20         %i.0 = phi i32 [ 0, %entry ], [ %tmp5, %bb ]            ; <i32> [#uses=3]
21         %tmp8 = icmp sle i32 %i.0, 63           ; <i1> [#uses=1]
22         %tmp89 = zext i1 %tmp8 to i8            ; <i8> [#uses=1]
23         %toBool = icmp ne i8 %tmp89, 0          ; <i1> [#uses=1]
24         br i1 %toBool, label %bb, label %bb30
25
26 bb12:           ; preds = %bb22
27         %tmp14 = mul i32 %j.1, 8                ; <i32> [#uses=1]
28         %tmp16 = add i32 %tmp14, %i.1           ; <i32> [#uses=1]
29         %tmp17 = getelementptr [64 x i32], [64 x i32]* %buffer, i32 0, i32 %tmp16               ; <i32*> [#uses=1]
30         %tmp18 = load i32, i32* %tmp17          ; <i32> [#uses=1]
31         store volatile i32 %tmp18, i32* %DataOut
32         %tmp21 = add i32 %j.1, 1                ; <i32> [#uses=1]
33         br label %bb22
34
35 bb22:           ; preds = %bb30, %bb12
36         %j.1 = phi i32 [ %tmp21, %bb12 ], [ 0, %bb30 ]          ; <i32> [#uses=4]
37         %tmp24 = icmp sle i32 %j.1, 7           ; <i1> [#uses=1]
38         %tmp2425 = zext i1 %tmp24 to i8         ; <i8> [#uses=1]
39         %toBool26 = icmp ne i8 %tmp2425, 0              ; <i1> [#uses=1]
40         br i1 %toBool26, label %bb12, label %bb27
41
42 bb27:           ; preds = %bb22
43         %tmp29 = add i32 %i.1, 1                ; <i32> [#uses=1]
44         br label %bb30
45
46 bb30:           ; preds = %bb27, %bb6
47         %j.0 = phi i32 [ %j.1, %bb27 ], [ undef, %bb6 ]         ; <i32> [#uses=0]
48         %i.1 = phi i32 [ %tmp29, %bb27 ], [ 0, %bb6 ]           ; <i32> [#uses=3]
49         %tmp32 = icmp sle i32 %i.1, 7           ; <i1> [#uses=1]
50         %tmp3233 = zext i1 %tmp32 to i8         ; <i8> [#uses=1]
51         %toBool34 = icmp ne i8 %tmp3233, 0              ; <i1> [#uses=1]
52         br i1 %toBool34, label %bb22, label %return
53
54 return:         ; preds = %bb30
55         ret void
56 }