aboutsummaryrefslogtreecommitdiffstats
path: root/test/CodeGen/PowerPC/2007-11-16-landingpad-split.ll
blob: 3ac056dbc266f10efe149d37e2e8c36f8ac50d25 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
; RUN: llvm-as < %s | opt -std-compile-opts | llc -enable-eh
;; Formerly crashed, see PR 1508
; ModuleID = '5550437.c'
target datalayout = "E-p:64:64:64-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-f128:64:128"
target triple = "powerpc64-apple-darwin8"
  %struct.Range = type { i64, i64 }

define void @Bork(i64 %range.0.0, i64 %range.0.1, i64 %size) {
entry:
  %range_addr = alloca %struct.Range    ; <%struct.Range*> [#uses=5]
  %size_addr = alloca i64   ; <i64*> [#uses=2]
  %size.0 = alloca i64, align 8   ; <i64*> [#uses=6]
  %additionalKeys.5 = alloca i8**   ; <i8***> [#uses=2]
  %saved_stack.7 = alloca i8*   ; <i8**> [#uses=3]
  %eh_exception = alloca i8*    ; <i8**> [#uses=3]
  %eh_selector = alloca i64   ; <i64*> [#uses=1]
  %effectiveRange = alloca %struct.Range, align 8   ; <%struct.Range*> [#uses=2]
  %"alloca point" = bitcast i32 0 to i32    ; <i32> [#uses=0]
  %tmp = bitcast %struct.Range* %range_addr to { [2 x i64] }*   ; <{ [2 x i64] }*> [#uses=1]
  %tmp1 = getelementptr { [2 x i64] }* %tmp, i32 0, i32 0   ; <[2 x i64]*> [#uses=2]
  %tmp2 = getelementptr [2 x i64]* %tmp1, i32 0, i32 0    ; <i64*> [#uses=1]
  store i64 %range.0.0, i64* %tmp2
  %tmp3 = getelementptr [2 x i64]* %tmp1, i32 0, i32 1    ; <i64*> [#uses=1]
  store i64 %range.0.1, i64* %tmp3
  store i64 %size, i64* %size_addr
  %tmp4 = call i8* @llvm.stacksave( )   ; <i8*> [#uses=1]
  store i8* %tmp4, i8** %saved_stack.7, align 8
  %tmp5 = load i64* %size_addr, align 8   ; <i64> [#uses=1]
  store i64 %tmp5, i64* %size.0, align 8
  %tmp6 = load i64* %size.0, align 8    ; <i64> [#uses=1]
  %tmp7 = sub i64 %tmp6, 1    ; <i64> [#uses=0]
  %tmp8 = load i64* %size.0, align 8    ; <i64> [#uses=1]
  %tmp9 = mul i64 %tmp8, 64   ; <i64> [#uses=0]
  %tmp10 = load i64* %size.0, align 8   ; <i64> [#uses=1]
  %tmp11 = mul i64 %tmp10, 8    ; <i64> [#uses=0]
  %tmp12 = load i64* %size.0, align 8   ; <i64> [#uses=1]
  %tmp13 = mul i64 %tmp12, 64   ; <i64> [#uses=0]
  %tmp14 = load i64* %size.0, align 8   ; <i64> [#uses=1]
  %tmp15 = mul i64 %tmp14, 8    ; <i64> [#uses=1]
  %tmp1516 = trunc i64 %tmp15 to i32    ; <i32> [#uses=1]
  %tmp17 = alloca i8, i32 %tmp1516    ; <i8*> [#uses=1]
  %tmp1718 = bitcast i8* %tmp17 to i8**   ; <i8**> [#uses=1]
  store i8** %tmp1718, i8*** %additionalKeys.5, align 8
  %tmp19 = load i8*** %additionalKeys.5, align 8    ; <i8**> [#uses=1]
  invoke void @Foo( i8** %tmp19 )
      to label %invcont unwind label %unwind

unwind:   ; preds = %bb, %entry
  %eh_ptr = call i8* @llvm.eh.exception( )    ; <i8*> [#uses=1]
  store i8* %eh_ptr, i8** %eh_exception
  %eh_ptr20 = load i8** %eh_exception   ; <i8*> [#uses=1]
  %eh_select = call i64 (i8*, i8*, ...)* @llvm.eh.selector.i64( i8* %eh_ptr20, i8* bitcast (void ()* @__gxx_personality_v0 to i8*), i8* null )    ; <i64> [#uses=1]
  store i64 %eh_select, i64* %eh_selector
  br label %cleanup37

invcont:    ; preds = %entry
  br label %bb30

bb:   ; preds = %cond_true
  %tmp21 = getelementptr %struct.Range* %range_addr, i32 0, i32 0   ; <i64*> [#uses=1]
  %tmp22 = load i64* %tmp21, align 8    ; <i64> [#uses=1]
  invoke void @Bar( i64 %tmp22, %struct.Range* %effectiveRange )
      to label %invcont23 unwind label %unwind

invcont23:    ; preds = %bb
  %tmp24 = getelementptr %struct.Range* %range_addr, i32 0, i32 1   ; <i64*> [#uses=1]
  %tmp25 = load i64* %tmp24, align 8    ; <i64> [#uses=1]
  %tmp26 = getelementptr %struct.Range* %effectiveRange, i32 0, i32 1   ; <i64*> [#uses=1]
  %tmp27 = load i64* %tmp26, align 8    ; <i64> [#uses=1]
  %tmp28 = sub i64 %tmp25, %tmp27   ; <i64> [#uses=1]
  %tmp29 = getelementptr %struct.Range* %range_addr, i32 0, i32 1   ; <i64*> [#uses=1]
  store i64 %tmp28, i64* %tmp29, align 8
  br label %bb30

bb30:   ; preds = %invcont23, %invcont
  %tmp31 = getelementptr %struct.Range* %range_addr, i32 0, i32 1   ; <i64*> [#uses=1]
  %tmp32 = load i64* %tmp31, align 8    ; <i64> [#uses=1]
  %tmp33 = icmp ne i64 %tmp32, 0    ; <i1> [#uses=1]
  %tmp3334 = zext i1 %tmp33 to i8   ; <i8> [#uses=1]
  %toBool = icmp ne i8 %tmp3334, 0    ; <i1> [#uses=1]
  br i1 %toBool, label %cond_true, label %cond_false

cond_true:    ; preds = %bb30
  br label %bb

cond_false:   ; preds = %bb30
  br label %bb35

cond_next:    ; No predecessors!
  br label %bb35

bb35:   ; preds = %cond_next, %cond_false
  br label %cleanup

cleanup:    ; preds = %bb35
  %tmp36 = load i8** %saved_stack.7, align 8    ; <i8*> [#uses=1]
  call void @llvm.stackrestore( i8* %tmp36 )
  br label %finally

cleanup37:    ; preds = %unwind
  %tmp38 = load i8** %saved_stack.7, align 8    ; <i8*> [#uses=1]
  call void @llvm.stackrestore( i8* %tmp38 )
  br label %Unwind

finally:    ; preds = %cleanup
  br label %return

return:   ; preds = %finally
  ret void

Unwind:   ; preds = %cleanup37
  %eh_ptr39 = load i8** %eh_exception   ; <i8*> [#uses=1]
  call void @_Unwind_Resume( i8* %eh_ptr39 )
  unreachable
}

declare i8* @llvm.stacksave()

declare void @Foo(i8**)

declare i8* @llvm.eh.exception()

declare i64 @llvm.eh.selector.i64(i8*, i8*, ...)

declare i64 @llvm.eh.typeid.for.i64(i8*)

declare void @__gxx_personality_v0()

declare void @_Unwind_Resume(i8*)

declare void @Bar(i64, %struct.Range*)

declare void @llvm.stackrestore(i8*)