; RUN: opt < %s -inline -inline-threshold=20 -S -mtriple=aarch64-none-linux | FileCheck %s ; RUN: opt < %s -passes='cgscc(inline)' -inline-threshold=20 -S -mtriple=aarch64-none-linux | FileCheck %s define i32 @callee_range(i32 %a, i32* %P) { switch i32 %a, label %sw.default [ i32 0, label %sw.bb0 i32 1000, label %sw.bb1 i32 2000, label %sw.bb1 i32 3000, label %sw.bb1 i32 4000, label %sw.bb1 i32 5000, label %sw.bb1 i32 6000, label %sw.bb1 i32 7000, label %sw.bb1 i32 8000, label %sw.bb1 i32 9000, label %sw.bb1 ] sw.default: store volatile i32 %a, i32* %P br label %return sw.bb0: store volatile i32 %a, i32* %P br label %return sw.bb1: store volatile i32 %a, i32* %P br label %return return: ret i32 42 } define i32 @caller_range(i32 %a, i32* %P) { ; CHECK-LABEL: @caller_range( ; CHECK: call i32 @callee_range %r = call i32 @callee_range(i32 %a, i32* %P) ret i32 %r } define i32 @callee_bittest(i32 %a, i32* %P) { switch i32 %a, label %sw.default [ i32 0, label %sw.bb0 i32 1, label %sw.bb1 i32 2, label %sw.bb2 i32 3, label %sw.bb0 i32 4, label %sw.bb1 i32 5, label %sw.bb2 i32 6, label %sw.bb0 i32 7, label %sw.bb1 i32 8, label %sw.bb2 ] sw.default: store volatile i32 %a, i32* %P br label %return sw.bb0: store volatile i32 %a, i32* %P br label %return sw.bb1: store volatile i32 %a, i32* %P br label %return sw.bb2: br label %return return: ret i32 42 } define i32 @caller_bittest(i32 %a, i32* %P) { ; CHECK-LABEL: @caller_bittest( ; CHECK-NOT: call i32 @callee_bittest %r= call i32 @callee_bittest(i32 %a, i32* %P) ret i32 %r } define i32 @callee_jumptable(i32 %a, i32* %P) { switch i32 %a, label %sw.default [ i32 1001, label %sw.bb101 i32 1002, label %sw.bb102 i32 1003, label %sw.bb103 i32 1004, label %sw.bb104 i32 1005, label %sw.bb101 i32 1006, label %sw.bb102 i32 1007, label %sw.bb103 i32 1008, label %sw.bb104 i32 1009, label %sw.bb101 i32 1010, label %sw.bb102 i32 1011, label %sw.bb103 i32 1012, label %sw.bb104 ] sw.default: br label %return sw.bb101: store volatile i32 %a, i32* %P br label %return sw.bb102: store volatile i32 %a, i32* %P br label %return sw.bb103: store volatile i32 %a, i32* %P br label %return sw.bb104: store volatile i32 %a, i32* %P br label %return return: ret i32 42 } define i32 @caller_jumptable(i32 %a, i32 %b, i32* %P) { ; CHECK-LABEL: @caller_jumptable( ; CHECK: call i32 @callee_jumptable %r = call i32 @callee_jumptable(i32 %b, i32* %P) ret i32 %r } define internal i32 @callee_negativeCost(i32 %t) { entry: switch i32 %t, label %sw.default [ i32 1, label %sw.bb i32 0, label %sw.bb1 i32 42, label %sw.bb2 i32 43, label %sw.bb3 ] sw.bb: ; preds = %entry br label %cleanup sw.bb1: ; preds = %entry br label %cleanup sw.bb2: ; preds = %entry br label %cleanup sw.bb3: ; preds = %entry br label %cleanup sw.default: ; preds = %entry br label %cleanup cleanup: ; preds = %sw.default, %sw.bb3, %sw.bb2, %sw.bb1, %sw.bb %retval.0 = phi i32 [ 1, %sw.default ], [ 3, %sw.bb3 ], [ 2, %sw.bb2 ], [ 0, %sw.bb1 ], [ 0, %sw.bb ] ret i32 %retval.0 } define i32 @caller_negativeCost(i32 %t) { ; CHECK-LABEL: @caller_negativeCost( ; CHECK-NOT: call i32 @callee_negativeCost entry: %call = call i32 @callee_negativeCost(i32 %t) ret i32 %call }