diff --git a/llvm/lib/IR/Instruction.cpp b/llvm/lib/IR/Instruction.cpp --- a/llvm/lib/IR/Instruction.cpp +++ b/llvm/lib/IR/Instruction.cpp @@ -138,8 +138,7 @@ InsertBB = II->getNormalDest(); InsertPt = InsertBB->getFirstInsertionPt(); } else if (auto *CB = dyn_cast(this)) { - InsertBB = CB->getDefaultDest(); - InsertPt = InsertBB->getFirstInsertionPt(); + return nullptr; } else { assert(!isTerminator() && "Only invoke/callbr terminators return value"); InsertBB = getParent(); diff --git a/llvm/test/Transforms/Coroutines/coro-debug.ll b/llvm/test/Transforms/Coroutines/coro-debug.ll --- a/llvm/test/Transforms/Coroutines/coro-debug.ll +++ b/llvm/test/Transforms/Coroutines/coro-debug.ll @@ -193,6 +193,8 @@ ; CHECK: %[[CALLBR_RES:.+]] = callbr i32 asm ; CHECK-NEXT: to label %[[DEFAULT_DEST:.+]] [label ; CHECK: [[DEFAULT_DEST]]: +; CHECK-NEXT: %1 = load i8*, i8** %coro_hdl.reload.addr +; CHECK-NEXT: call void @free(i8* %1) ; CHECK-NEXT: call void @llvm.dbg.declare(metadata i32 %[[CALLBR_RES]] ; CHECK: define internal fastcc void @f.destroy(%f.Frame* noalias nonnull align 8 dereferenceable(40) %FramePtr) #0 personality i32 0 !dbg ![[DESTROY:[0-9]+]] ; CHECK: define internal fastcc void @f.cleanup(%f.Frame* noalias nonnull align 8 dereferenceable(40) %FramePtr) #0 personality i32 0 !dbg ![[CLEANUP:[0-9]+]] diff --git a/llvm/test/Transforms/InstCombine/freeze.ll b/llvm/test/Transforms/InstCombine/freeze.ll --- a/llvm/test/Transforms/InstCombine/freeze.ll +++ b/llvm/test/Transforms/InstCombine/freeze.ll @@ -453,9 +453,9 @@ ; CHECK-NEXT: to label [[CALLBR_CONT:%.*]] [] ; CHECK: callbr.cont: ; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ [[X]], [[ENTRY:%.*]] ], [ 0, [[CALLBR_CONT]] ] +; CHECK-NEXT: call void @use_i32(i32 [[X]]) ; CHECK-NEXT: [[FR:%.*]] = freeze i32 [[X]] ; CHECK-NEXT: call void @use_i32(i32 [[FR]]) -; CHECK-NEXT: call void @use_i32(i32 [[FR]]) ; CHECK-NEXT: call void @use_i32(i32 [[PHI]]) ; CHECK-NEXT: br label [[CALLBR_CONT]] ; diff --git a/llvm/test/Transforms/Reassociate/callbr.ll b/llvm/test/Transforms/Reassociate/callbr.ll --- a/llvm/test/Transforms/Reassociate/callbr.ll +++ b/llvm/test/Transforms/Reassociate/callbr.ll @@ -6,8 +6,10 @@ ; CHECK-NEXT: [[RES:%.*]] = callbr i32 asm "", "=r,!i"() ; CHECK-NEXT: to label [[NORMAL:%.*]] [label %abnormal] ; CHECK: normal: -; CHECK-NEXT: [[FACTOR:%.*]] = mul i32 [[RES]], -2 -; CHECK-NEXT: [[SUB2:%.*]] = add i32 [[FACTOR]], 5 +; CHECK-NEXT: [[RES_NEG:%.*]] = sub i32 0, [[RES]] +; CHECK-NEXT: [[SUB1:%.*]] = add i32 [[RES_NEG]], 5 +; CHECK-NEXT: [[RES_NEG1:%.*]] = sub i32 0, [[RES]] +; CHECK-NEXT: [[SUB2:%.*]] = add i32 [[SUB1]], [[RES_NEG1]] ; CHECK-NEXT: ret i32 [[SUB2]] ; CHECK: abnormal: ; CHECK-NEXT: ret i32 0