2013-09-25 00:26:17 +00:00
|
|
|
; RUN: llc -O3 -o - %s | FileCheck %s
|
|
|
|
; Test case from PR16882.
|
|
|
|
target triple = "thumbv7s-apple-ios"
|
|
|
|
|
2013-11-08 18:14:17 +00:00
|
|
|
define i32 @test1() {
|
2013-09-25 00:26:17 +00:00
|
|
|
; CHECK-LABEL: @test1
|
|
|
|
; CHECK-NOT: push
|
|
|
|
entry:
|
|
|
|
tail call void @overflow() #0
|
|
|
|
unreachable
|
|
|
|
}
|
|
|
|
|
2013-11-08 18:14:17 +00:00
|
|
|
; Function Attrs: noreturn nounwind
|
2013-09-25 00:26:17 +00:00
|
|
|
declare void @overflow() #0
|
|
|
|
|
|
|
|
define i32 @test2(i32 %x, i32 %y) {
|
|
|
|
; CHECK-LABEL: @test2
|
|
|
|
; CHECK-NOT: push
|
|
|
|
; CHECK-NOT: pop
|
|
|
|
entry:
|
|
|
|
%conv = sext i32 %x to i64
|
|
|
|
%conv1 = sext i32 %y to i64
|
|
|
|
%mul = mul nsw i64 %conv1, %conv
|
|
|
|
%conv2 = trunc i64 %mul to i32
|
|
|
|
%conv3 = sext i32 %conv2 to i64
|
|
|
|
%cmp = icmp eq i64 %mul, %conv3
|
|
|
|
br i1 %cmp, label %if.end, label %if.then
|
|
|
|
|
|
|
|
if.then: ; preds = %entry
|
|
|
|
tail call void @overflow() #0
|
|
|
|
unreachable
|
|
|
|
|
|
|
|
if.end: ; preds = %entry
|
|
|
|
ret i32 %conv2
|
|
|
|
}
|
|
|
|
|
2013-11-08 18:14:17 +00:00
|
|
|
; Test case for PR17825.
|
|
|
|
define i32 @test3() {
|
|
|
|
; CHECK-LABEL: @test3
|
|
|
|
; CHECK: push
|
|
|
|
entry:
|
|
|
|
tail call void @overflow_with_unwind() #1
|
|
|
|
unreachable
|
|
|
|
}
|
|
|
|
|
2014-02-25 16:57:28 +00:00
|
|
|
; Test case for uwtable
|
|
|
|
define i32 @test4() uwtable {
|
|
|
|
; CHECK-LABEL: @test4
|
|
|
|
; CHECK: push
|
|
|
|
entry:
|
|
|
|
tail call void @overflow() #0
|
|
|
|
unreachable
|
|
|
|
}
|
|
|
|
|
|
|
|
define i32 @test5() uwtable {
|
|
|
|
; CHECK-LABEL: @test5
|
|
|
|
; CHECK: push
|
|
|
|
entry:
|
|
|
|
tail call void @overflow_with_unwind() #1
|
|
|
|
unreachable
|
|
|
|
}
|
|
|
|
|
2013-11-08 18:14:17 +00:00
|
|
|
; Function Attrs: noreturn
|
|
|
|
declare void @overflow_with_unwind() #1
|
|
|
|
|
|
|
|
attributes #0 = { noreturn nounwind }
|
|
|
|
attributes #1 = { noreturn }
|