Revert r176154 in favor of a better approach.
[oota-llvm.git] / test / CodeGen / ARM / invoke-donothing-assert.ll
index d0c98f80289672ae3b9330ebbad493fb37a8801c..0b607f7edf38901511d618abced6853128b3847c 100644 (file)
@@ -1,13 +1,10 @@
 ; RUN: llc < %s -mtriple=armv7-apple-ios | FileCheck %s
 ; This testcase makes sure we can handle invoke @llvm.donothing without
 ; assertion failure.
-; rdar://problem/13228754
-; CHECK: .globl  _main
+; <rdar://problem/13228754> & <rdar://problem/13316637>
 
-declare void @callA()
-declare i32 @__gxx_personality_sj0(...)
-
-define void @main() {
+; CHECK: .globl  _foo
+define void @foo() {
 invoke.cont:
   invoke void @callA() 
           to label %invoke.cont25 unwind label %lpad2
@@ -36,5 +33,41 @@ eh.resume:
   resume { i8*, i32 } zeroinitializer
 }
 
+; CHECK: .globl _bar
+define linkonce_odr void @bar(i32* %a) {
+if.end.i.i.i:
+  invoke void @llvm.donothing()
+          to label %call.i.i.i.noexc unwind label %eh.resume
+
+call.i.i.i.noexc:
+  br i1 false, label %cleanup, label %new.notnull.i.i
+
+new.notnull.i.i:
+  br label %cleanup
+
+cleanup:
+  %0 = load i32* %a, align 4
+  %inc294 = add nsw i32 %0, 4
+  store i32 %inc294, i32* %a, align 4
+  br i1 false, label %_ZN3lol5ArrayIivvvvvvvED1Ev.exit, label %delete.notnull.i.i.i1409
+
+delete.notnull.i.i.i1409:
+  br label %_ZN3lol5ArrayIivvvvvvvED1Ev.exit
+
+_ZN3lol5ArrayIivvvvvvvED1Ev.exit:
+  ret void
+
+eh.resume:
+  %1 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+          cleanup
+  %2 = extractvalue { i8*, i32 } %1, 0
+  %3 = extractvalue { i8*, i32 } %1, 1
+  %lpad.val = insertvalue { i8*, i32 } undef, i8* %2, 0
+  %lpad.val395 = insertvalue { i8*, i32 } %lpad.val, i32 %3, 1
+  resume { i8*, i32 } %lpad.val395
+}
+
+declare void @callA()
 declare void @callB()
 declare void @llvm.donothing() nounwind readnone
+declare i32 @__gxx_personality_sj0(...)