Skip to content

Commit 1f1de06

Browse files
committed
[SimplifyCFG] Add test for invoke of nounwind non-willreturn function (NFC)
Test both the case with and without willreturn attribute.
1 parent be3fc66 commit 1f1de06

File tree

1 file changed

+32
-11
lines changed

1 file changed

+32
-11
lines changed

llvm/test/Transforms/SimplifyCFG/invoke.ll

+32-11
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
44

55
declare i32 @__gxx_personality_v0(...)
66
declare void @__cxa_call_unexpected(i8*)
7-
declare void @purefn() nounwind readnone
8-
declare i32 @read_only() nounwind readonly
7+
declare void @purefn() nounwind readnone willreturn
8+
declare i32 @readonly() nounwind readonly
9+
declare i32 @readonly_willreturn() nounwind readonly willreturn
910
declare i32 @nounwind_fn() nounwind
1011
declare i32 @fn()
1112

@@ -61,7 +62,7 @@ define i8* @f2_no_null_opt() nounwind uwtable ssp #0 personality i8* bitcast (i3
6162
; CHECK-NEXT: [[TMP0:%.*]] = landingpad { i8*, i32 }
6263
; CHECK-NEXT: filter [0 x i8*] zeroinitializer
6364
; CHECK-NEXT: [[TMP1:%.*]] = extractvalue { i8*, i32 } [[TMP0]], 0
64-
; CHECK-NEXT: tail call void @__cxa_call_unexpected(i8* [[TMP1]]) #[[ATTR6:[0-9]+]]
65+
; CHECK-NEXT: tail call void @__cxa_call_unexpected(i8* [[TMP1]]) #[[ATTR7:[0-9]+]]
6566
; CHECK-NEXT: unreachable
6667
;
6768
entry:
@@ -79,13 +80,13 @@ lpad:
7980
unreachable
8081
}
8182

82-
define i32 @f3() nounwind uwtable ssp personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
83-
; CHECK-LABEL: @f3(
83+
define i32 @invoke_readonly_may_not_return() nounwind personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
84+
; CHECK-LABEL: @invoke_readonly_may_not_return(
8485
; CHECK-NEXT: entry:
8586
; CHECK-NEXT: ret i32 3
8687
;
8788
entry:
88-
%call = invoke i32 @read_only()
89+
%call = invoke i32 @readonly()
8990
to label %invoke.cont unwind label %lpad
9091

9192
invoke.cont:
@@ -99,14 +100,34 @@ lpad:
99100
unreachable
100101
}
101102

102-
define i32 @f4() nounwind uwtable ssp personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
103-
; CHECK-LABEL: @f4(
103+
define i32 @invoke_readonly_willreturn() nounwind personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
104+
; CHECK-LABEL: @invoke_readonly_willreturn(
104105
; CHECK-NEXT: entry:
105-
; CHECK-NEXT: [[CALL:%.*]] = call i32 @read_only()
106+
; CHECK-NEXT: ret i32 3
107+
;
108+
entry:
109+
%call = invoke i32 @readonly_willreturn()
110+
to label %invoke.cont unwind label %lpad
111+
112+
invoke.cont:
113+
ret i32 3
114+
115+
lpad:
116+
%0 = landingpad { i8*, i32 }
117+
filter [0 x i8*] zeroinitializer
118+
%1 = extractvalue { i8*, i32 } %0, 0
119+
tail call void @__cxa_call_unexpected(i8* %1) noreturn nounwind
120+
unreachable
121+
}
122+
123+
define i32 @invoke_readonly_willreturn_with_used_retval() nounwind personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
124+
; CHECK-LABEL: @invoke_readonly_willreturn_with_used_retval(
125+
; CHECK-NEXT: entry:
126+
; CHECK-NEXT: [[CALL:%.*]] = call i32 @readonly_willreturn()
106127
; CHECK-NEXT: ret i32 [[CALL]]
107128
;
108129
entry:
109-
%call = invoke i32 @read_only()
130+
%call = invoke i32 @readonly_willreturn()
110131
to label %invoke.cont unwind label %lpad
111132

112133
invoke.cont:
@@ -136,7 +157,7 @@ define i32 @f5(i1 %cond, i8* %a, i8* %b) personality i8* bitcast (i32 (...)* @__
136157
; CHECK: lpad:
137158
; CHECK-NEXT: [[TMP0:%.*]] = landingpad { i8*, i32 }
138159
; CHECK-NEXT: filter [0 x i8*] zeroinitializer
139-
; CHECK-NEXT: tail call void @__cxa_call_unexpected(i8* [[A:%.*]]) #[[ATTR6]]
160+
; CHECK-NEXT: tail call void @__cxa_call_unexpected(i8* [[A:%.*]]) #[[ATTR7]]
140161
; CHECK-NEXT: unreachable
141162
;
142163
entry:

0 commit comments

Comments
 (0)