# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2 # RUN: llc -run-pass=break-false-deps -verify-machineinstrs %s -o - | FileCheck %s # # Check that BreakFalseDeps pass does not crash in presense of dead blocks. --- | ; ModuleID = 'repro.ll' target datalayout = "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-f80:32-n8:16:32-S128" target triple = "i686-unknown-unknown" declare fastcc void @hoge() #0 ; Function Attrs: nounwind define fastcc void @widget(i32 %arg) #1 { bb: br label %bb1 bb1: ; preds = %bb1, %bb %phi = phi i1 [ true, %bb ], [ false, %bb1 ] br i1 %phi, label %bb1, label %bb2 bb2: ; preds = %bb1 br i1 %phi, label %bb4, label %bb3 bb3: ; preds = %bb2 ret void bb4: ; preds = %bb2 br label %bb5 bb5: ; preds = %bb5, %bb4 %phi6 = phi double [ 0.000000e+00, %bb4 ], [ %fmul, %bb5 ] %fptosi = fptosi double %phi6 to i32 %icmp = icmp slt i32 %fptosi, %arg %select = select i1 %icmp, i32 %fptosi, i32 0 %sitofp = sitofp i32 %select to double %fsub = fsub double 0.000000e+00, %sitofp %fmul = fmul double 0.000000e+00, %fsub br label %bb5 } declare fastcc void @quux() #0 declare fastcc void @hoge.1() #0 declare fastcc void @barney() #0 declare fastcc void @ham() #0 declare fastcc void @wombat() #0 attributes #0 = { "target-features"="+sse2" } attributes #1 = { nounwind "target-features"="+sse2" } ... --- name: widget alignment: 16 exposesReturnsTwice: false legalized: false regBankSelected: false selected: false failedISel: false tracksRegLiveness: true hasWinCFI: false callsEHReturn: false callsUnwindInit: false hasEHCatchret: false hasEHScopes: false hasEHFunclets: false isOutlined: false debugInstrRef: false failsVerification: false tracksDebugUserValues: true registers: [] liveins: - { reg: '$ecx', virtual-reg: '' } frameInfo: isFrameAddressTaken: false isReturnAddressTaken: false hasStackMap: false hasPatchPoint: false stackSize: 0 offsetAdjustment: 0 maxAlignment: 1 adjustsStack: false hasCalls: false stackProtector: '' functionContext: '' maxCallFrameSize: 0 cvBytesOfCalleeSavedRegisters: 0 hasOpaqueSPAdjustment: false hasVAStart: false hasMustTailInVarArgFunc: false hasTailCall: false localFrameSize: 0 savePoint: '' restorePoint: '' fixedStack: [] stack: [] callSites: [] debugValueSubstitutions: [] constants: [] machineFunctionInfo: {} body: | ; CHECK-LABEL: name: widget ; CHECK: bb.0.bb: ; CHECK-NEXT: successors: %bb.1(0x80000000) ; CHECK-NEXT: liveins: $ecx ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: renamable $al = MOV8ri 1, implicit-def $eax ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.1.bb1 (align 16): ; CHECK-NEXT: successors: %bb.1(0x7c000000), %bb.2(0x04000000) ; CHECK-NEXT: liveins: $eax, $ecx ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: TEST8ri renamable $al, 1, implicit-def $eflags, implicit killed $eax ; CHECK-NEXT: renamable $eax = MOV32ri 0 ; CHECK-NEXT: JCC_1 %bb.1, 5, implicit $eflags ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.2.bb3: ; CHECK-NEXT: RET32 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.3.bb5: ; CHECK-NEXT: successors: %bb.3(0x80000000) ; CHECK-NEXT: liveins: $eax, $ecx, $xmm0, $xmm1 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: renamable $edx = nofpexcept CVTTSD2SIrr killed renamable $xmm1, implicit $mxcsr ; CHECK-NEXT: CMP32rr renamable $edx, renamable $ecx, implicit-def $eflags ; CHECK-NEXT: renamable $edx = CMOV32rr killed renamable $edx, renamable $eax, 13, implicit killed $eflags ; CHECK-NEXT: renamable $xmm2 = CVTSI2SDrr killed renamable $edx ; CHECK-NEXT: renamable $xmm1 = XORPSrr undef $xmm1, undef $xmm1 ; CHECK-NEXT: renamable $xmm1 = nofpexcept SUBSDrr killed renamable $xmm1, killed renamable $xmm2, implicit $mxcsr ; CHECK-NEXT: renamable $xmm1 = nofpexcept MULSDrr killed renamable $xmm1, renamable $xmm0, implicit $mxcsr ; CHECK-NEXT: JMP_1 %bb.3 bb.0.bb: successors: %bb.1(0x80000000) liveins: $ecx renamable $al = MOV8ri 1, implicit-def $eax bb.1.bb1 (align 16): successors: %bb.1(0x7c000000), %bb.2(0x04000000) liveins: $eax, $ecx TEST8ri renamable $al, 1, implicit-def $eflags, implicit killed $eax renamable $eax = MOV32ri 0 JCC_1 %bb.1, 5, implicit $eflags bb.2.bb3: RET32 bb.3.bb5: successors: %bb.3(0x80000000) liveins: $eax, $ecx, $xmm0, $xmm1 renamable $edx = nofpexcept CVTTSD2SIrr killed renamable $xmm1, implicit $mxcsr CMP32rr renamable $edx, renamable $ecx, implicit-def $eflags renamable $edx = CMOV32rr killed renamable $edx, renamable $eax, 13, implicit killed $eflags renamable $xmm2 = CVTSI2SDrr killed renamable $edx renamable $xmm1 = XORPSrr undef $xmm1, undef $xmm1 renamable $xmm1 = nofpexcept SUBSDrr killed renamable $xmm1, killed renamable $xmm2, implicit $mxcsr renamable $xmm1 = nofpexcept MULSDrr killed renamable $xmm1, renamable $xmm0, implicit $mxcsr JMP_1 %bb.3 ...