From: Vedant Kumar Date: Tue, 8 Sep 2015 22:33:23 +0000 (+0000) Subject: [Bitcode] Add compatibility tests for new instructions X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=52dd30e21b87e69c29ac52164578a4a83f4affdb;hp=cc0152159f80724364ab227ab56e4e3c6215319d [Bitcode] Add compatibility tests for new instructions Adds basic compatibility tests for the following instructions: catchpad, catchendpad, cleanuppad, cleanupendpad, terminatepad, cleanupret, catchret git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@247087 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/Bitcode/compatibility.ll b/test/Bitcode/compatibility.ll index 302b6c4a17e..2dd6bc10963 100644 --- a/test/Bitcode/compatibility.ll +++ b/test/Bitcode/compatibility.ll @@ -700,6 +700,9 @@ define void @typesystem() { ret void } +declare void @llvm.token(token) +; CHECK: declare void @llvm.token(token) + ;; Inline Assembler Expressions define void @inlineasm(i32 %arg) { call i32 asm "bswap $0", "=r,r"(i32 %arg) @@ -760,6 +763,100 @@ exc: ret void } +define i32 @instructions.win_eh.1() personality i32 -3 { +entry: + %arg1 = alloca i32 + %arg2 = alloca i32 + invoke void @f.ccc() to label %normal unwind label %catchpad1 + invoke void @f.ccc() to label %normal unwind label %catchpad2 + invoke void @f.ccc() to label %normal unwind label %catchpad3 + +catchpad1: + catchpad [] to label %normal unwind label %exn.1 + ; CHECK: catchpad [] to label %normal unwind label %exn.1 + +catchpad2: + catchpad [i32* %arg1] to label %normal unwind label %exn.2 + ; CHECK: catchpad [i32* %arg1] to label %normal unwind label %exn.2 + +catchpad3: + catchpad [i32* %arg1, i32* %arg2] to label %normal unwind label %exn.3 + ; CHECK: catchpad [i32* %arg1, i32* %arg2] to label %normal unwind label %exn.3 + +exn.1: + catchendpad unwind label %terminate.1 + ; CHECK: catchendpad unwind label %terminate.1 + +exn.2: + catchendpad unwind to caller + ; CHECK: catchendpad unwind to caller + +exn.3: + catchendpad unwind label %cleanuppad1 + ; CHECK: catchendpad unwind label %cleanuppad1 + +cleanuppad1: + %clean.1 = cleanuppad [] + ; CHECK: %clean.1 = cleanuppad [] + invoke void @f.ccc() to label %normal unwind label %cleanupendpad1 + +cleanupendpad1: + cleanupendpad %clean.1 unwind label %terminate.2 + ; CHECK: cleanupendpad %clean.1 unwind label %terminate.2 + +terminate.1: + terminatepad [] unwind to caller + ; CHECK: terminatepad [] unwind to caller + +terminate.2: + terminatepad [i32* %arg1] unwind label %normal.pre + ; CHECK: terminatepad [i32* %arg1] unwind label %normal.pre + +normal.pre: + terminatepad [i32* %arg1, i32* %arg2] unwind to caller + ; CHECK: terminatepad [i32* %arg1, i32* %arg2] unwind to caller + +normal: + ret i32 0 +} + +define i32 @instructions.win_eh.2() personality i32 -4 { +entry: + invoke void @f.ccc() to label %invoke.cont unwind label %catchpad + +invoke.cont: + invoke void @f.ccc() to label %continue unwind label %cleanup + +cleanup: + %clean = cleanuppad [] + ; CHECK: %clean = cleanuppad [] + cleanupret %clean unwind to caller + ; CHECK: cleanupret %clean unwind to caller + +catchpad: + %catch = catchpad [] to label %body unwind label %catchend + ; CHECK: %catch = catchpad [] to label %body unwind label %catchend + +body: + invoke void @f.ccc() to label %continue unwind label %catchend + catchret %catch to label %return + ; CHECK: catchret %catch to label %return + +return: + ret i32 0 + +catchend: + catchendpad unwind label %terminate + ; CHECK: catchendpad unwind label %terminate + +terminate: + terminatepad [] unwind to caller + ; CHECK: terminatepad [] unwind to caller + +continue: + ret i32 0 +} + ; Instructions -- Binary Operations define void @instructions.binops(i8 %op1, i8 %op2) { ; nuw x nsw @@ -1212,9 +1309,6 @@ define void @misc.metadata() { ret void } -declare void @llvm.tokenfoo(token) -; CHECK: declare void @llvm.tokenfoo(token) - ; CHECK: attributes #0 = { alignstack=4 } ; CHECK: attributes #1 = { alignstack=8 } ; CHECK: attributes #2 = { alwaysinline }