brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.0 KiB · 3e30037 Raw
154 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2## Check that the delay-slot filler does not attempt to split BUNDLE instructions3# RUN: llc %s -start-before=mips-delay-slot-filler -stop-after=mips-delay-slot-filler \4# RUN:   -verify-machineinstrs -o - | FileCheck %s5## Check that we can emit assembly for input with BUNDLE instructions:6# RUN: llc %s -start-before=mips-delay-slot-filler -verify-machineinstrs -o - | FileCheck %s -check-prefix ASM7 8# ASM:  # %bb.0:9# ASM-NEXT: daddiu	$sp, $sp, -1610# ASM-NEXT: sd	$ra, 8($sp)11## BUNDLE should be emitted in order:12# ASM-NEXT: daddiu	$sp, $sp, -1613# ASM-NEXT: daddiu	$sp, $sp, 1614# ASM-NEXT: beqz	$4, .LBB0_215# ASM-NEXT: nop16--- |17  target datalayout = "E-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128"18  target triple = "mips64-unknown-freebsd"19  declare ptr @func_a(i64 zeroext)20  declare ptr @func_b(i64 zeroext)21  ; Function Attrs: nounwind22  define ptr @test(i64 zeroext %nbytes) local_unnamed_addr #0 {23  entry:24    %cmp = icmp eq i64 %nbytes, 025    br i1 %cmp, label %if.else, label %if.then26 27  if.then:                                          ; preds = %entry28    %call = tail call ptr @func_a(i64 zeroext %nbytes)29    br label %return30 31  if.else:                                          ; preds = %entry32    %call1 = tail call ptr @func_b(i64 zeroext 0)33    br label %return34 35  return:                                           ; preds = %if.else, %if.then36    %retval.0 = phi ptr [ %call, %if.then ], [ %call1, %if.else ]37    ret ptr %retval.038  }39  ; Function Attrs: nounwind40  declare void @llvm.stackprotector(ptr, ptr) #041 42  attributes #0 = { nounwind }43 44...45---46name:            test47alignment:       848exposesReturnsTwice: false49legalized:       false50regBankSelected: false51selected:        false52failedISel:      false53tracksRegLiveness: true54hasWinCFI:       false55registers:       []56liveins:57  - { reg: '$a0_64', virtual-reg: '' }58frameInfo:59  isFrameAddressTaken: false60  isReturnAddressTaken: false61  hasStackMap:     false62  hasPatchPoint:   false63  stackSize:       1664  offsetAdjustment: 065  maxAlignment:    866  adjustsStack:    true67  hasCalls:        true68  stackProtector:  ''69  maxCallFrameSize: 070  cvBytesOfCalleeSavedRegisters: 071  hasOpaqueSPAdjustment: false72  hasVAStart:      false73  hasMustTailInVarArgFunc: false74  localFrameSize:  075  savePoint:       []76  restorePoint:    []77fixedStack:      []78stack:79  - { id: 0, name: '', type: spill-slot, offset: -8, size: 8, alignment: 8,80      stack-id: default, callee-saved-register: '$ra_64', callee-saved-restored: true,81      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }82callSites:       []83constants:       []84machineFunctionInfo: {}85body:             |86  ; CHECK-LABEL: name: test87  ; CHECK: bb.0.entry:88  ; CHECK:   successors: %bb.2(0x30000000), %bb.1(0x50000000)89  ; CHECK:   $sp_64 = DADDiu $sp_64, -1690  ; CHECK:   CFI_INSTRUCTION def_cfa_offset 1691  ; CHECK:   SD killed $ra_64, $sp_64, 8 :: (store (s64) into %stack.0)92  ; CHECK:   CFI_INSTRUCTION offset $ra_64, -893  ; CHECK:   BUNDLE {94  ; CHECK:     $sp_64 = DADDiu $sp_64, -1695  ; CHECK:     $sp_64 = DADDiu $sp_64, 1696  ; CHECK:   }97  ; CHECK:   BEQ64 renamable $a0_64, $zero_64, %bb.2, implicit-def $at {98  ; CHECK:     $zero = SLL $zero, 099  ; CHECK:   }100  ; CHECK: bb.1.if.then:101  ; CHECK:   successors: %bb.3(0x80000000)102  ; CHECK:   JAL @func_a, csr_n64, implicit-def dead $ra, implicit $a0_64, implicit-def $sp, implicit-def $v0_64 {103  ; CHECK:     $zero = SLL $zero, 0104  ; CHECK:   }105  ; CHECK:   J %bb.3, implicit-def dead $at {106  ; CHECK:     $zero = SLL $zero, 0107  ; CHECK:   }108  ; CHECK: bb.2.if.else:109  ; CHECK:   successors: %bb.3(0x80000000)110  ; CHECK:   JAL @func_b, csr_n64, implicit-def dead $ra, implicit $a0_64, implicit-def $sp, implicit-def $v0_64 {111  ; CHECK:     $a0_64 = DADDiu $zero_64, 0112  ; CHECK:   }113  ; CHECK: bb.3.return:114  ; CHECK:   $ra_64 = LD $sp_64, 8 :: (load (s64) from %stack.0)115  ; CHECK:   PseudoReturn64 undef $ra_64, implicit $v0_64 {116  ; CHECK:     $sp_64 = DADDiu $sp_64, 16117  ; CHECK:   }118  bb.0.entry:119    successors: %bb.2(0x30000000), %bb.1(0x50000000)120    liveins: $a0_64, $ra_64121 122    $sp_64 = DADDiu $sp_64, -16123    CFI_INSTRUCTION def_cfa_offset 16124    SD killed $ra_64, $sp_64, 8 :: (store (s64) into %stack.0)125    CFI_INSTRUCTION offset $ra_64, -8126    ; This BUNDLE instruction must not be split by the delay slot filler:127    BUNDLE {128      $sp_64 = DADDiu $sp_64, -16129      $sp_64 = DADDiu $sp_64, 16130    }131    BEQ64 renamable $a0_64, $zero_64, %bb.2, implicit-def $at132 133  bb.1.if.then:134    successors: %bb.3(0x80000000)135    liveins: $a0_64136 137    JAL @func_a, csr_n64, implicit-def dead $ra, implicit $a0_64, implicit-def $sp, implicit-def $v0_64138    J %bb.3, implicit-def dead $at139 140  bb.2.if.else:141    successors: %bb.3(0x80000000)142 143    $a0_64 = DADDiu $zero_64, 0144    JAL @func_b, csr_n64, implicit-def dead $ra, implicit $a0_64, implicit-def $sp, implicit-def $v0_64145 146  bb.3.return:147    liveins: $v0_64148 149    $ra_64 = LD $sp_64, 8 :: (load (s64) from %stack.0)150    $sp_64 = DADDiu $sp_64, 16151    PseudoReturn64 undef $ra_64, implicit $v0_64152 153...154