X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=test%2FBitcode%2Fcompatibility.ll;h=2dd6bc10963825eac427749bba9c28569a4bc1fd;hp=585d51b73d4cc72569eaabfe5f0dc35c2eb0ebad;hb=52dd30e21b87e69c29ac52164578a4a83f4affdb;hpb=ea56ef761a84bb8895ad74bc8cf5fb91f6c78695 diff --git a/test/Bitcode/compatibility.ll b/test/Bitcode/compatibility.ll index 585d51b73d4..2dd6bc10963 100644 --- a/test/Bitcode/compatibility.ll +++ b/test/Bitcode/compatibility.ll @@ -3,7 +3,7 @@ ; Please update this file when making any IR changes. Information on the ; release process for this file is available here: ; -; http://llvm.org/docs/DeveloperPolicy.html#ir-backwards-compatibility +; http://llvm.org/docs/DeveloperPolicy.html#ir-backwards-compatibility ; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s ; RUN: verify-uselistorder < %s @@ -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