# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py ## Check that the delay-slot filler looks at the registers defined by BUNDLE instructions # RUN: llc %s -run-pass=mips-delay-slot-filler -verify-machineinstrs -o - | FileCheck %s --- | ; ModuleID = '/Users/alex/cheri/llvm-project/llvm/test/CodeGen/Mips/delay-test.ll' source_filename = "/Users/alex/cheri/llvm-project/llvm/test/CodeGen/Mips/delay-test.ll" target datalayout = "E-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128" target triple = "mips64-unknown-freebsd" ; Function Attrs: nounwind define i64 @test(i1 %cond) local_unnamed_addr #0 { entry: br i1 %cond, label %err, label %return err: ; preds = %entry unreachable return: ; preds = %entry ret i64 1 } attributes #0 = { nounwind } ... --- name: test alignment: 8 exposesReturnsTwice: false legalized: false regBankSelected: false selected: false failedISel: false tracksRegLiveness: true hasWinCFI: false registers: [] liveins: - { reg: '$a0_64', virtual-reg: '' } frameInfo: isFrameAddressTaken: false isReturnAddressTaken: false hasStackMap: false hasPatchPoint: false stackSize: 0 offsetAdjustment: 0 maxAlignment: 1 adjustsStack: false hasCalls: false stackProtector: '' maxCallFrameSize: 0 cvBytesOfCalleeSavedRegisters: 0 hasOpaqueSPAdjustment: false hasVAStart: false hasMustTailInVarArgFunc: false localFrameSize: 0 savePoint: '' restorePoint: '' fixedStack: [] stack: [] callSites: [] constants: [] machineFunctionInfo: {} body: | ; CHECK-LABEL: name: test ; CHECK: bb.0.entry: ; CHECK: successors: %bb.2(0x00000001), %bb.1(0x7fffffff) ; CHECK: renamable $at = SLL renamable $a0, 0, implicit killed $a0_64 ; CHECK: renamable $at = ANDi killed renamable $at, 1 ; CHECK: $v0_64 = DADDiu $zero_64, 1 ; CHECK: $v0_64 = DADDiu $v0_64, 1 ; CHECK: BUNDLE implicit-def $v0_64 { ; CHECK: $v0_64 = DADDiu $zero_64, 1 ; CHECK: $v0_64 = DADDiu $v0_64, 1 ; CHECK: } ; CHECK: BNE killed renamable $at, $zero, %bb.2, implicit-def $at { ; CHECK: $zero = SLL $zero, 0 ; CHECK: } ; CHECK: bb.1.return: ; CHECK: PseudoReturn64 undef $ra_64, implicit killed $v0_64 { ; CHECK: $zero = SLL $zero, 0 ; CHECK: } ; CHECK: bb.2.err: bb.0.entry: successors: %bb.1(0x00000001), %bb.2(0x7fffffff) liveins: $a0_64 renamable $at = SLL renamable $a0, 0, implicit killed $a0_64 renamable $at = ANDi killed renamable $at, 1 ; Check that none of these instructions are hoisted after the BUNDLE to avoid ; incorrect values from being $v0_64 = DADDiu $zero_64, 1 $v0_64 = DADDiu $v0_64, 1 BUNDLE implicit-def $v0_64 { $v0_64 = DADDiu $zero_64, 1 $v0_64 = DADDiu $v0_64, 1 } BNE killed renamable $at, $zero, %bb.1, implicit-def $at bb.2.return: liveins: $v0_64 PseudoReturn64 undef $ra_64, implicit killed $v0_64 bb.1.err: ...