[PATCH] D63358: [Attributor] Tests for nounwind attribute.
Stefan Stipanovic via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 14 13:19:09 PDT 2019
sstefan1 created this revision.
sstefan1 added reviewers: jdoerfert, uenoku.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Adding tests for nounwind attribute. This will be followed with a deduction of nounwind attribute in Attributor.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D63358
Files:
llvm/test/Transforms/FunctionAttrs/nounwind.ll
Index: llvm/test/Transforms/FunctionAttrs/nounwind.ll
===================================================================
--- /dev/null
+++ llvm/test/Transforms/FunctionAttrs/nounwind.ll
@@ -0,0 +1,91 @@
+; RUN: opt < %s -functionattrs -S | FileCheck %s
+
+; TEST 1
+; CHECK: Function Attrs: norecurs, nounwind readnone
+; CHECK-NEXT: define i32 @leaf()
+define i32 @foo1() {
+ ret i32 1
+}
+
+; TEST 2
+; CHECK: Function Attrs: nounwind readnone
+; CHECK: define i32 @scc1_foo()
+define i32 @scc1_foo() {
+ %1 = call i32 @scc1_bar()
+ ret i32 1
+}
+
+
+; TEST 3
+; CHECK: Function Attrs: nounwind readnone
+; CHECK: define i32 @scc1_bar()
+define i32 @scc1_bar() {
+ %1 = call i32 @scc1_foo()
+ ret i32 1
+}
+
+; CHECK-NOT: nounwind
+; CHECK-NEXT: declare i32 @non_nounwind()
+declare i32 @non_nounwind()
+
+; TEST 4
+; CHECK-NOT: nounwind
+; CHECK-NEXT: define void @call_non_nounwind()
+define void @call_non_nounwind(){
+ tail call i32 @non_nounwind()
+ ret void
+}
+
+; TEST 5 - throw
+; int maybe_throw(bool canThrow) {
+; if (canThrow)
+; throw;
+; else
+; return -1;
+; }
+
+; CHECK: define i32 @maybe_throw(i1 zeroext)
+define i32 @maybe_throw(i1 zeroext) {
+ br i1 %0, label %2, label %3
+
+2: ; preds = %1
+ tail call void @__cxa_rethrow() #1
+ unreachable
+
+3: ; preds = %1
+ ret i32 -1
+}
+
+declare void @__cxa_rethrow()
+
+; TEST 6 - catch
+; int catch_thing() {
+; try {
+; int a = doThing(true);
+; }
+; catch(...) { return -1; }
+; return 1;
+; }
+
+; CHECK: define i32 @catch_thing()
+define i32 @catch_thing() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+ invoke void @__cxa_rethrow() #1
+ to label %1 unwind label %2
+
+1: ; preds = %0
+ unreachable
+
+2: ; preds = %0
+ %3 = landingpad { i8*, i32 }
+ catch i8* null
+ %4 = extractvalue { i8*, i32 } %3, 0
+ %5 = tail call i8* @__cxa_begin_catch(i8* %4) #2
+ tail call void @__cxa_end_catch()
+ ret i32 -1
+}
+
+declare i32 @__gxx_personality_v0(...)
+
+declare i8* @__cxa_begin_catch(i8*)
+
+declare void @__cxa_end_catch()
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D63358.204837.patch
Type: text/x-patch
Size: 2275 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190614/d290fb5f/attachment.bin>
More information about the llvm-commits
mailing list