158 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc < %s -mtriple=x86_64 -o - | FileCheck %s3 4define void @foo(i32 %i) nounwind {5; CHECK-LABEL: foo:6; CHECK: # %bb.0: # %entry7; CHECK-NEXT: pushq %rax8; CHECK-NEXT: cmpl $7, %edi9; CHECK-NEXT: je .LBB0_310; CHECK-NEXT: # %bb.1: # %entry11; CHECK-NEXT: cmpl $5, %edi12; CHECK-NEXT: jne .LBB0_413; CHECK-NEXT: # %bb.2: # %if.then14; CHECK-NEXT: callq bar15; CHECK-NEXT: popq %rax16; CHECK-NEXT: jmp bar # TAILCALL17; CHECK-NEXT: .LBB0_3: # %if.then218; CHECK-NEXT: callq bar19; CHECK-NEXT: .LBB0_4: # %if.end320; CHECK-NEXT: popq %rax21; CHECK-NEXT: jmp bar # TAILCALL22entry:23 switch i32 %i, label %if.end3 [24 i32 5, label %if.then25 i32 7, label %if.then226 ]27 28if.then:29 tail call void @bar() #030 br label %if.end331 32if.then2:33 tail call void @bar() #034 br label %if.end335 36if.end3:37 tail call void @bar() #038 ret void39}40 41define void @foo_tail(i1 %i) nounwind {42; CHECK-LABEL: foo_tail:43; CHECK: # %bb.0: # %entry44; CHECK-NEXT: testb $1, %dil45; CHECK-NEXT: je bar # TAILCALL46; CHECK-NEXT: # %bb.1: # %if.then47; CHECK-NEXT: jmp bar # TAILCALL48entry:49 br i1 %i, label %if.then, label %if.else50 51if.then:52 tail call void @bar() #053 br label %if.end54 55if.else:56 tail call void @bar() #057 br label %if.end58 59if.end:60 ret void61}62 63declare dso_local void @bar()64 65define void @nomerge_trap(i32 %i) {66; CHECK-LABEL: nomerge_trap:67; CHECK: # %bb.0: # %entry68; CHECK: # %bb.1: # %entry69; CHECK: # %bb.2: # %if.then70; CHECK-NEXT: ud271; CHECK-NEXT: LBB{{.*}}: # %if.then272; CHECK-NEXT: ud273; CHECK-NEXT: .LBB{{.*}}: # %if.end374; CHECK-NEXT: ud275entry:76 switch i32 %i, label %if.end3 [77 i32 5, label %if.then78 i32 7, label %if.then279 ]80 81if.then:82 tail call void @llvm.trap() #083 unreachable84 85if.then2:86 tail call void @llvm.trap() #087 unreachable88 89if.end3:90 tail call void @llvm.trap() #091 unreachable92}93 94declare dso_local void @llvm.trap()95 96define void @nomerge_debugtrap(i32 %i) {97; CHECK-LABEL: nomerge_debugtrap:98; CHECK: # %bb.0: # %entry99; CHECK: # %bb.1: # %entry100; CHECK: # %bb.2: # %if.then101; CHECK-NEXT: int3102; CHECK-NEXT: LBB{{.*}}: # %if.then2103; CHECK-NEXT: int3104; CHECK-NEXT: .LBB{{.*}}: # %if.end3105; CHECK-NEXT: int3106entry:107 switch i32 %i, label %if.end3 [108 i32 5, label %if.then109 i32 7, label %if.then2110 ]111 112if.then:113 tail call void @llvm.debugtrap() #0114 unreachable115 116if.then2:117 tail call void @llvm.debugtrap() #0118 unreachable119 120if.end3:121 tail call void @llvm.debugtrap() #0122 unreachable123}124 125define void @nomerge_named_debugtrap(i32 %i) {126; CHECK-LABEL: nomerge_named_debugtrap:127; CHECK: # %bb.0: # %entry128; CHECK: # %bb.1: # %entry129; CHECK: # %bb.2: # %if.then130; CHECK-NEXT: callq trap_func@PLT131; CHECK-NEXT: LBB{{.*}}: # %if.then2132; CHECK-NEXT: callq trap_func@PLT133; CHECK-NEXT: .LBB{{.*}}: # %if.end3134; CHECK-NEXT: callq trap_func@PLT135entry:136 switch i32 %i, label %if.end3 [137 i32 5, label %if.then138 i32 7, label %if.then2139 ]140 141if.then:142 tail call void @llvm.debugtrap() #1143 unreachable144 145if.then2:146 tail call void @llvm.debugtrap() #1147 unreachable148 149if.end3:150 tail call void @llvm.debugtrap() #1151 unreachable152}153 154declare dso_local void @llvm.debugtrap()155 156attributes #0 = { nomerge }157attributes #1 = { nomerge "trap-func-name"="trap_func" }158