KEYWORD("asm", ASM_TOK);
KEYWORD("sideeffect", SIDEEFFECT);
KEYWORD("gc", GC);
- KEYWORD("unwind_to", UNWIND_TO);
+ KEYWORD("unwinds", UNWINDS);
KEYWORD("cc", CC_TOK);
KEYWORD("ccc", CCC_TOK);
%token OPAQUE EXTERNAL TARGET TRIPLE ALIGN ADDRSPACE
%token DEPLIBS CALL TAIL ASM_TOK MODULE SIDEEFFECT
%token CC_TOK CCC_TOK FASTCC_TOK COLDCC_TOK X86_STDCALLCC_TOK X86_FASTCALLCC_TOK
-%token DATALAYOUT UNWIND_TO
+%token DATALAYOUT UNWINDS
%type <UIntVal> OptCallingConv
%type <ParamAttrs> OptParamAttrs ParamAttr
%type <ParamAttrs> OptFuncAttrs FuncAttr
$$ = defineBBVal(ValID::createLocalID(CurFun.NextValNum), 0);
CHECK_FOR_ERROR
}
- | UNWIND_TO ValueRef { // Only the unwind to block
- $$ = defineBBVal(ValID::createLocalID(CurFun.NextValNum), getBBVal($2));
+ | UNWINDS TO ValueRef { // Only the unwind to block
+ $$ = defineBBVal(ValID::createLocalID(CurFun.NextValNum), getBBVal($3));
CHECK_FOR_ERROR
}
| LABELSTR { // Labelled (named) basic block
delete $1;
CHECK_FOR_ERROR
}
- | LABELSTR UNWIND_TO ValueRef {
- $$ = defineBBVal(ValID::createLocalName(*$1), getBBVal($3));
+ | LABELSTR UNWINDS TO ValueRef {
+ $$ = defineBBVal(ValID::createLocalName(*$1), getBBVal($4));
delete $1;
CHECK_FOR_ERROR
};
STATISTIC(NumRemoved, "Number of invokes removed");
STATISTIC(NumUnreach, "Number of noreturn calls optimized");
-STATISTIC(NumBBUnwind, "Number of unwind_to removed from blocks");
+STATISTIC(NumBBUnwind, "Number of unwind dest removed from blocks");
namespace {
struct VISIBILITY_HIDDEN PruneEH : public CallGraphSCCPass {
//
for (Function::iterator BB = cast<BasicBlock>(ValueMap[OldFunc->begin()]),
BE = NewFunc->end(); BB != BE; ++BB) {
- // Fix up the unwind_to label.
+ // Fix up the unwind destination.
if (BasicBlock *UnwindDest = BB->getUnwindDest())
BB->setUnwindDest(cast<BasicBlock>(ValueMap[UnwindDest]));
for (std::vector<BasicBlock *>::const_iterator BB = clonedTrace.begin(),
BE = clonedTrace.end(); BB != BE; ++BB) {
- //Remap the unwind_to label
+ //Remap the unwind destination
if (BasicBlock *UnwindDest = (*BB)->getUnwindDest())
(*BB)->setUnwindDest(cast<BasicBlock>(ValueMap[UnwindDest]));
// Move all definitions in the successor to the predecessor.
OnlyPred->getInstList().splice(OnlyPred->end(), BB->getInstList());
- // Move the unwind_to block
+ // Move the unwind destination block
if (!OnlyPred->getUnwindDest() && BB->getUnwindDest())
OnlyPred->setUnwindDest(BB->getUnwindDest());
if (BB->hasName())
Out << ' ';
- Out << "unwind_to";
+ Out << "unwinds to";
writeOperand(unwindDest, false);
}
; http://nondot.org/sabre/LLVMNotes/ExceptionHandlingChanges.txt
define i1 @test1(i8 %i, i8 %j) {
-entry: unwind_to %target
+entry: unwinds to %target
%tmp = sub i8 %i, %j ; <i8> [#uses=1]
%b = icmp eq i8 %tmp, 0 ; <i1> [#uses=1]
ret i1 %b
define i1 @test2(i8 %i, i8 %j) {
entry:
br label %0
-unwind_to %1
+unwinds to %1
%tmp = sub i8 %i, %j ; <i8> [#uses=1]
%b = icmp eq i8 %tmp, 0 ; <i1> [#uses=1]
ret i1 %b
define i1 @test3(i8 %i, i8 %j) {
entry:
br label %0
-unwind_to %1
+unwinds to %1
%tmp = sub i8 %i, %j ; <i8> [#uses=1]
%b = icmp eq i8 %tmp, 0 ; <i1> [#uses=1]
ret i1 %b
-unwind_to %0
+unwinds to %0
ret i1 false
}
%tmp = sub i8 %i, %j ; <i8> [#uses=1]
%b = icmp eq i8 %tmp, 0 ; <i1> [#uses=1]
br label %1
-unwind_to %1
+unwinds to %1
ret i1 false
}
define void @test6() {
entry:
br label %unwind
-unwind: unwind_to %unwind
+unwind: unwinds to %unwind
unwind
}
define i8 @test7(i1 %b) {
-entry: unwind_to %cleanup
+entry: unwinds to %cleanup
br i1 %b, label %cond_true, label %cond_false
-cond_true: unwind_to %cleanup
+cond_true: unwinds to %cleanup
br label %cleanup
-cond_false: unwind_to %cleanup
+cond_false: unwinds to %cleanup
br label %cleanup
cleanup:
%x = phi i8 [0, %entry], [1, %cond_true], [1, %cond_true],
}
define i32 @f1() {
-entry: unwind_to %cleanup
+entry: unwinds to %cleanup
call void @g()
ret i32 0
cleanup:
-; RUN: llvm-as < %s | opt -prune-eh | llvm-dis | not grep unwind_to
+; RUN: llvm-as < %s | opt -prune-eh | llvm-dis | not grep {unwinds to}
define i8 @test7(i1 %b) {
-entry: unwind_to %cleanup
+entry: unwinds to %cleanup
br i1 %b, label %cond_true, label %cond_false
-cond_true: unwind_to %cleanup
+cond_true: unwinds to %cleanup
br label %cleanup
-cond_false: unwind_to %cleanup
+cond_false: unwinds to %cleanup
br label %cleanup
cleanup:
%x = phi i8 [0, %entry], [1, %cond_true], [1, %cond_true],
-; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis | grep unwind_to | count 3
+; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis | grep {unwinds to} | count 3
declare void @g(i32)
define i32 @f1() {
entry:
br label %bb1
-bb1: unwind_to %cleanup1
+bb1: unwinds to %cleanup1
call void @g(i32 0)
br label %bb2
-bb2: unwind_to %cleanup2
+bb2: unwinds to %cleanup2
call void @g(i32 1)
br label %exit
exit:
}
define i32 @f2() {
-entry: unwind_to %cleanup
+entry: unwinds to %cleanup
br label %bb1
-bb1: unwind_to %cleanup
+bb1: unwinds to %cleanup
br label %bb2
-bb2: unwind_to %cleanup
+bb2: unwinds to %cleanup
br label %bb3
bb3:
br label %bb4
-bb4: unwind_to %cleanup
+bb4: unwinds to %cleanup
ret i32 0
cleanup:
ret i32 1
}
define i32 @f3() {
-entry: unwind_to %cleanup
+entry: unwinds to %cleanup
call void @g(i32 0)
ret i32 0
cleanup:
}
define i32 @f4() {
-entry: unwind_to %cleanup
+entry: unwinds to %cleanup
call void @g(i32 0)
br label %cleanup
cleanup:
}
define i32 @f5() {
-entry: unwind_to %cleanup
+entry: unwinds to %cleanup
call void @g(i32 0)
br label %other
other: