1bd4b1b5fSAndrew Litteken; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --include-generated-funcs 29dd9575cSRoman Lebedev; RUN: opt -S -passes=verify,iroutliner -ir-outlining-no-cost < %s | FileCheck %s 3bd4b1b5fSAndrew Litteken 4bd4b1b5fSAndrew Litteken; This test checks that we do not fail when there is a similarity group with 5bd4b1b5fSAndrew Litteken; an ending instruction that is also the end of the module. 6bd4b1b5fSAndrew Litteken 7*f4b925eeSMatt Arsenault@a = global ptr null 8bd4b1b5fSAndrew Litteken 9bd4b1b5fSAndrew Littekendefine void @foo() { 10bd4b1b5fSAndrew Littekenentry: 11bd4b1b5fSAndrew Litteken br label %for.cond1 12bd4b1b5fSAndrew Litteken 13bd4b1b5fSAndrew Littekenfor.cond1: 14bd4b1b5fSAndrew Litteken br label %for.body 15bd4b1b5fSAndrew Litteken 16bd4b1b5fSAndrew Littekenfor.body: 17bd4b1b5fSAndrew Litteken %inc = add nsw i32 2, 1 18bd4b1b5fSAndrew Litteken br label %for.cond1 19bd4b1b5fSAndrew Litteken 20bd4b1b5fSAndrew Littekenfor.end: 21bd4b1b5fSAndrew Litteken %inc3 = add nsw i32 2, 1 22bd4b1b5fSAndrew Litteken br label %for.cond1 23bd4b1b5fSAndrew Litteken} 24bd4b1b5fSAndrew Litteken 25bd4b1b5fSAndrew Litteken; These are for testing if return instructions or unreachable instructions are 26bd4b1b5fSAndrew Litteken; matched for similarity. 27bd4b1b5fSAndrew Littekendefine void @foo1() { 28bd4b1b5fSAndrew Littekenentry: 29bd4b1b5fSAndrew Litteken br label %for.cond1 30bd4b1b5fSAndrew Litteken 31bd4b1b5fSAndrew Littekenfor.cond1: 32bd4b1b5fSAndrew Litteken br label %for.body 33bd4b1b5fSAndrew Litteken 34bd4b1b5fSAndrew Littekenfor.body: 35bd4b1b5fSAndrew Litteken %inc = add nsw i32 2, 1 36bd4b1b5fSAndrew Litteken ret void 37bd4b1b5fSAndrew Litteken 38bd4b1b5fSAndrew Littekenfor.end: 39bd4b1b5fSAndrew Litteken %inc3 = add nsw i32 2, 1 40bd4b1b5fSAndrew Litteken ret void 41bd4b1b5fSAndrew Litteken} 42bd4b1b5fSAndrew Litteken 43bd4b1b5fSAndrew Littekendefine void @foo2() { 44bd4b1b5fSAndrew Littekenentry: 45bd4b1b5fSAndrew Litteken br label %for.cond1 46bd4b1b5fSAndrew Litteken 47bd4b1b5fSAndrew Littekenfor.cond1: 48bd4b1b5fSAndrew Litteken br label %for.body 49bd4b1b5fSAndrew Litteken 50bd4b1b5fSAndrew Littekenfor.body: 51bd4b1b5fSAndrew Litteken %inc = add nsw i32 2, 1 52bd4b1b5fSAndrew Litteken unreachable 53bd4b1b5fSAndrew Litteken 54bd4b1b5fSAndrew Littekenfor.end: 55bd4b1b5fSAndrew Litteken %inc3 = add nsw i32 2, 1 56bd4b1b5fSAndrew Litteken unreachable 57bd4b1b5fSAndrew Litteken} 5881d3ac0cSAndrew Litteken 5981d3ac0cSAndrew Litteken; CHECK-LABEL: @foo( 6081d3ac0cSAndrew Litteken; CHECK-NEXT: entry: 6181d3ac0cSAndrew Litteken; CHECK-NEXT: br label [[FOR_COND1:%.*]] 6281d3ac0cSAndrew Litteken; CHECK: for.cond1: 6381d3ac0cSAndrew Litteken; CHECK-NEXT: br label [[FOR_BODY:%.*]] 6481d3ac0cSAndrew Litteken; CHECK: for.body: 6581d3ac0cSAndrew Litteken; CHECK-NEXT: call void @outlined_ir_func_1() 6681d3ac0cSAndrew Litteken; CHECK-NEXT: br label [[FOR_COND1]] 6781d3ac0cSAndrew Litteken; CHECK: for.end: 6881d3ac0cSAndrew Litteken; CHECK-NEXT: call void @outlined_ir_func_1() 6981d3ac0cSAndrew Litteken; CHECK-NEXT: br label [[FOR_COND1]] 7081d3ac0cSAndrew Litteken; 7181d3ac0cSAndrew Litteken; 7281d3ac0cSAndrew Litteken; CHECK-LABEL: @foo1( 7381d3ac0cSAndrew Litteken; CHECK-NEXT: entry: 7481d3ac0cSAndrew Litteken; CHECK-NEXT: call void @outlined_ir_func_0() 7581d3ac0cSAndrew Litteken; CHECK-NEXT: ret void 7681d3ac0cSAndrew Litteken; CHECK: for.end: 7781d3ac0cSAndrew Litteken; CHECK-NEXT: [[INC3:%.*]] = add nsw i32 2, 1 7881d3ac0cSAndrew Litteken; CHECK-NEXT: ret void 7981d3ac0cSAndrew Litteken; 8081d3ac0cSAndrew Litteken; 8181d3ac0cSAndrew Litteken; CHECK-LABEL: @foo2( 8281d3ac0cSAndrew Litteken; CHECK-NEXT: entry: 8381d3ac0cSAndrew Litteken; CHECK-NEXT: call void @outlined_ir_func_0() 8481d3ac0cSAndrew Litteken; CHECK-NEXT: unreachable 8581d3ac0cSAndrew Litteken; CHECK: for.end: 8681d3ac0cSAndrew Litteken; CHECK-NEXT: [[INC3:%.*]] = add nsw i32 2, 1 8781d3ac0cSAndrew Litteken; CHECK-NEXT: unreachable 8881d3ac0cSAndrew Litteken; 8981d3ac0cSAndrew Litteken; 9081d3ac0cSAndrew Litteken; CHECK: define internal void @outlined_ir_func_0( 9181d3ac0cSAndrew Litteken; CHECK-NEXT: newFuncRoot: 9281d3ac0cSAndrew Litteken; CHECK-NEXT: br label [[ENTRY_TO_OUTLINE:%.*]] 9381d3ac0cSAndrew Litteken; CHECK: entry_to_outline: 9481d3ac0cSAndrew Litteken; CHECK-NEXT: br label [[FOR_COND1:%.*]] 9581d3ac0cSAndrew Litteken; CHECK: for.cond1: 9681d3ac0cSAndrew Litteken; CHECK-NEXT: br label [[FOR_BODY:%.*]] 9781d3ac0cSAndrew Litteken; CHECK: for.body: 9881d3ac0cSAndrew Litteken; CHECK-NEXT: [[INC:%.*]] = add nsw i32 2, 1 9981d3ac0cSAndrew Litteken; CHECK-NEXT: br label [[ENTRY_AFTER_OUTLINE_EXITSTUB:%.*]] 10081d3ac0cSAndrew Litteken; CHECK: entry_after_outline.exitStub: 10181d3ac0cSAndrew Litteken; CHECK-NEXT: ret void 10281d3ac0cSAndrew Litteken; 10381d3ac0cSAndrew Litteken; 10481d3ac0cSAndrew Litteken; CHECK: define internal void @outlined_ir_func_1( 10581d3ac0cSAndrew Litteken; CHECK-NEXT: newFuncRoot: 10681d3ac0cSAndrew Litteken; CHECK-NEXT: br label [[FOR_BODY_TO_OUTLINE:%.*]] 10781d3ac0cSAndrew Litteken; CHECK: for.body_to_outline: 10881d3ac0cSAndrew Litteken; CHECK-NEXT: [[INC:%.*]] = add nsw i32 2, 1 10981d3ac0cSAndrew Litteken; CHECK-NEXT: br label [[FOR_COND1_EXITSTUB:%.*]] 11081d3ac0cSAndrew Litteken; CHECK: for.cond1.exitStub: 11181d3ac0cSAndrew Litteken; CHECK-NEXT: ret void 11281d3ac0cSAndrew Litteken; 113