165 lines
5.3 KiB
YAML
165 lines
5.3 KiB
YAML
# 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
|
|
|
|
...
|