Index: test/CodeGen/ARM/ehreturn.ll |
diff --git a/test/CodeGen/ARM/ehreturn.ll b/test/CodeGen/ARM/ehreturn.ll |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9ed819a8caf090fcd719c08ba5601d56df9ad7f1 |
--- /dev/null |
+++ b/test/CodeGen/ARM/ehreturn.ll |
@@ -0,0 +1,25 @@ |
+; RUN: llc -O0 < %s | FileCheck %s |
+target datalayout = "e-p:32:32-i64:64-n32" |
+target triple = "armv7-unknown-nacl-gnueabihf" |
+ |
+declare void @llvm.eh.return.i32(i32, i8*) nounwind |
+declare void @llvm.eh.unwind.init() nounwind |
+ |
+; CHECK-LABEL: @raise_exception |
+; CHECK: push {r0, r1, r4, r5, r6, r7, r8, r10, r11, lr} |
+define i32 @raise_exception(i32 %b) { |
+entry: |
+ tail call void @llvm.eh.unwind.init() |
+ %a = add i32 %b, 3 |
+ %cmp = icmp slt i32 %a, 0 |
+ br i1 %cmp, label %normal_ret, label %eh_ret |
+normal_ret: |
+; CHECK: ldm sp!, {r12} |
+; CHECK: ldm sp!, {r12} |
+; CHECK: pop {r4, r5, r6, r7, r8, r10, r11, lr} |
+ ret i32 %a |
+eh_ret: |
+; CHECK: pop {r0, r1, r4, r5, r6, r7, r8, r10, r11, lr} |
+ tail call void @llvm.eh.return.i32(i32 %a, i8* null) |
+ unreachable |
+} |