1 ; RUN: opt %loadPolly %defaultOpts -polly-codegen -enable-polly-vector -dce -S %s | FileCheck %s
2 ; ModuleID = 'pr22543.s'
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-n8:16:32:64"
4 target triple = "x86_64-unknown-linux-gnu"
6 %struct.C = type { [4 x i32] }
7 %struct.X = type { i8 }
8 %struct.A = type { i32, i32 }
9 %struct.B = type { i8 }
11 @_ZN1CC1Ev = alias void (%struct.C*)* @_ZN1CC2Ev
13 define void @_ZN1CC2Ev(%struct.C* %this) unnamed_addr uwtable align 2 {
15 %x = alloca %struct.X, align 1
16 %temp.lvalue = alloca %struct.A, align 4
17 %tmp12 = alloca %struct.B, align 1
20 for.cond: ; preds = %for.inc, %entry
21 %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %entry ]
22 %arrayidx = getelementptr %struct.C* %this, i64 0, i32 0, i64 %indvar
23 %exitcond = icmp ne i64 %indvar, 4
24 br i1 %exitcond, label %for.body, label %for.end
26 for.body: ; preds = %for.cond
27 store i32 0, i32* %arrayidx, align 4
30 for.inc: ; preds = %for.body
31 %indvar.next = add i64 %indvar, 1
34 for.end: ; preds = %for.cond
37 for.cond7: ; preds = %for.inc18, %for.end
38 %tmp = phi i32 [ 0, %for.end ], [ %inc20, %for.inc18 ]
39 %cmp9 = icmp slt i32 %tmp, 4
40 br i1 %cmp9, label %for.body10, label %for.end21
42 for.body10: ; preds = %for.cond7
43 invoke void @_ZNK1B3fooEv(%struct.A* sret %temp.lvalue, %struct.B* %tmp12)
44 to label %invoke.cont unwind label %lpad
46 invoke.cont: ; preds = %for.body10
47 %call = invoke i32 @_ZN1AcviEv(%struct.A* %temp.lvalue)
48 to label %invoke.cont15 unwind label %lpad13
50 invoke.cont15: ; preds = %invoke.cont
51 invoke void @_ZN1AD1Ev(%struct.A* %temp.lvalue)
52 to label %invoke.cont16 unwind label %lpad
54 invoke.cont16: ; preds = %invoke.cont15
57 for.inc18: ; preds = %invoke.cont16
58 %inc20 = add nsw i32 %tmp, 1
61 lpad: ; preds = %invoke.cont15, %for.body10
62 %exn = call i8* @llvm.eh.exception() nounwind
63 %tmp1 = call i32 (i8*, i8*, ...)* @llvm.eh.selector(i8* %exn, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 0) nounwind
66 lpad13: ; preds = %invoke.cont
67 %exn14 = call i8* @llvm.eh.exception() nounwind
68 %tmp2 = call i32 (i8*, i8*, ...)* @llvm.eh.selector(i8* %exn14, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 0) nounwind
69 invoke void @_ZN1AD1Ev(%struct.A* %temp.lvalue)
70 to label %invoke.cont17 unwind label %terminate.lpad
72 invoke.cont17: ; preds = %lpad13
75 for.end21: ; preds = %for.cond7
76 call void @_ZN1XD1Ev(%struct.X* %x)
79 eh.cleanup: ; preds = %invoke.cont17, %lpad
80 %exn.slot.0 = phi i8* [ %exn, %lpad ], [ %exn14, %invoke.cont17 ]
81 %ehselector.slot.0 = phi i32 [ %tmp1, %lpad ], [ %tmp2, %invoke.cont17 ]
82 invoke void @_ZN1XD1Ev(%struct.X* %x)
83 to label %invoke.cont22 unwind label %terminate.lpad
85 invoke.cont22: ; preds = %eh.cleanup
88 eh.resume: ; preds = %invoke.cont22
89 call void @llvm.eh.resume(i8* %exn.slot.0, i32 %ehselector.slot.0) noreturn
92 terminate.lpad: ; preds = %eh.cleanup, %lpad13
93 %exn23 = call i8* @llvm.eh.exception() nounwind
94 %tmp3 = call i32 (i8*, i8*, ...)* @llvm.eh.selector(i8* %exn23, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* null) nounwind
95 call void @_ZSt9terminatev() noreturn nounwind
99 define linkonce_odr void @_ZNK1B3fooEv(%struct.A* sret %agg.result, %struct.B* %this) uwtable align 2 {
101 call void @_ZN1AC1Ev(%struct.A* %agg.result)
105 declare i8* @llvm.eh.exception() nounwind readonly
107 declare i32 @__gxx_personality_v0(...)
109 declare i32 @llvm.eh.selector(i8*, i8*, ...) nounwind
111 declare i32 @llvm.eh.typeid.for(i8*) nounwind
113 declare void @llvm.eh.resume(i8*, i32)
115 define linkonce_odr i32 @_ZN1AcviEv(%struct.A* %this) nounwind uwtable align 2 {
120 define linkonce_odr void @_ZN1AD1Ev(%struct.A* %this) unnamed_addr uwtable align 2 {
122 call void @_ZN1AD2Ev(%struct.A* %this)
126 declare void @_ZSt9terminatev()
128 declare void @_ZN1XD1Ev(%struct.X*)
130 define linkonce_odr void @_ZN1AD2Ev(%struct.A* %this) unnamed_addr nounwind uwtable align 2 {
135 define linkonce_odr void @_ZN1AC1Ev(%struct.A* %this) unnamed_addr uwtable align 2 {
137 call void @_ZN1AC2Ev(%struct.A* %this)
141 define linkonce_odr void @_ZN1AC2Ev(%struct.A* %this) unnamed_addr nounwind uwtable align 2 {
143 %i = getelementptr inbounds %struct.A* %this, i64 0, i32 0
144 store i32 0, i32* %i, align 4
145 %j = getelementptr inbounds %struct.A* %this, i64 0, i32 1
146 store i32 0, i32* %j, align 4