# 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
...