1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
|
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
; RUN: | FileCheck %s
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write)
declare void @llvm.assume(i1 noundef) #0
declare fastcc i1 @S_reginclass()
declare fastcc ptr @Perl_av_store(i64)
define fastcc i32 @S_regrepeat(ptr %startposp, i32 %max, i8 %0, i1 %cmp343) nounwind {
; CHECK-LABEL: S_regrepeat:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addi sp, sp, -32
; CHECK-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
; CHECK-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
; CHECK-NEXT: sd s1, 8(sp) # 8-byte Folded Spill
; CHECK-NEXT: sd s2, 0(sp) # 8-byte Folded Spill
; CHECK-NEXT: zext.b a2, a2
; CHECK-NEXT: addi a4, a2, -19
; CHECK-NEXT: li a5, 2
; CHECK-NEXT: mv a0, a1
; CHECK-NEXT: bltu a4, a5, .LBB0_4
; CHECK-NEXT: # %bb.1: # %entry
; CHECK-NEXT: li a1, 1
; CHECK-NEXT: bltu a1, a2, .LBB0_8
; CHECK-NEXT: # %bb.2: # %do_exactf
; CHECK-NEXT: andi a3, a3, 1
; CHECK-NEXT: beqz a3, .LBB0_10
; CHECK-NEXT: # %bb.3: # %land.rhs251
; CHECK-NEXT: lw zero, 0(zero)
; CHECK-NEXT: li s0, 1
; CHECK-NEXT: bnez s0, .LBB0_9
; CHECK-NEXT: j .LBB0_8
; CHECK-NEXT: .LBB0_4: # %sw.bb336
; CHECK-NEXT: mv s1, a0
; CHECK-NEXT: li s0, 0
; CHECK-NEXT: andi s2, a3, 1
; CHECK-NEXT: .LBB0_5: # %land.rhs345
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
; CHECK-NEXT: call S_reginclass
; CHECK-NEXT: andi a0, a0, 1
; CHECK-NEXT: beqz a0, .LBB0_7
; CHECK-NEXT: # %bb.6: # %while.body350
; CHECK-NEXT: # in Loop: Header=BB0_5 Depth=1
; CHECK-NEXT: addiw s0, s0, 1
; CHECK-NEXT: bnez s2, .LBB0_5
; CHECK-NEXT: j .LBB0_8
; CHECK-NEXT: .LBB0_7:
; CHECK-NEXT: mv a0, s1
; CHECK-NEXT: bnez s0, .LBB0_9
; CHECK-NEXT: .LBB0_8: # %if.else1492
; CHECK-NEXT: li a0, 0
; CHECK-NEXT: .LBB0_9: # %if.end1497
; CHECK-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
; CHECK-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
; CHECK-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
; CHECK-NEXT: ld s2, 0(sp) # 8-byte Folded Reload
; CHECK-NEXT: addi sp, sp, 32
; CHECK-NEXT: ret
; CHECK-NEXT: .LBB0_10:
; CHECK-NEXT: j .LBB0_8
entry:
switch i8 %0, label %if.else1492 [
i8 19, label %sw.bb336
i8 20, label %sw.bb336
i8 1, label %do_exactf
i8 0, label %do_exactf
]
do_exactf: ; preds = %entry, %entry
br i1 %cmp343, label %land.rhs251, label %if.end334
land.rhs251: ; preds = %do_exactf
%bcmp414 = load volatile i32, ptr null, align 4
br label %if.end334
if.end334: ; preds = %land.rhs251, %do_exactf
%hardcount.7 = phi i32 [ 0, %do_exactf ], [ 1, %land.rhs251 ]
call void @llvm.lifetime.end.p0(i64 0, ptr null)
br label %sw.epilog1489
sw.bb336: ; preds = %entry, %entry
br label %land.rhs345
land.rhs345: ; preds = %while.body350, %sw.bb336
%hardcount.8634 = phi i32 [ %inc356, %while.body350 ], [ 0, %sw.bb336 ]
%call347 = call fastcc i1 @S_reginclass()
br i1 %call347, label %while.body350, label %sw.epilog1489
while.body350: ; preds = %land.rhs345
%inc356 = add i32 %hardcount.8634, 1
br i1 %cmp343, label %land.rhs345, label %if.end1497
sw.epilog1489: ; preds = %land.rhs345, %if.end334
%hardcount.20 = phi i32 [ %hardcount.7, %if.end334 ], [ %hardcount.8634, %land.rhs345 ]
%tobool1490.not = icmp eq i32 %hardcount.20, 0
br i1 %tobool1490.not, label %if.else1492, label %if.end1497
if.else1492: ; preds = %sw.epilog1489, %entry
br label %if.end1497
if.end1497: ; preds = %if.else1492, %sw.epilog1489, %while.body350
%c.0 = phi i32 [ 0, %if.else1492 ], [ %max, %sw.epilog1489 ], [ 0, %while.body350 ]
ret i32 %c.0
}
define ptr @Perl_pp_refassign(ptr %PL_stack_sp, i1 %tobool.not, i1 %tobool3.not, i1 %cond1) nounwind {
; CHECK-LABEL: Perl_pp_refassign:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: andi a1, a1, 1
; CHECK-NEXT: beqz a1, .LBB1_3
; CHECK-NEXT: # %bb.1:
; CHECK-NEXT: li a1, 0
; CHECK-NEXT: andi a2, a2, 1
; CHECK-NEXT: bnez a2, .LBB1_4
; CHECK-NEXT: .LBB1_2: # %cond.true4
; CHECK-NEXT: ld a0, 0(a0)
; CHECK-NEXT: snez a0, a0
; CHECK-NEXT: bnez a0, .LBB1_5
; CHECK-NEXT: j .LBB1_6
; CHECK-NEXT: .LBB1_3: # %cond.true
; CHECK-NEXT: ld a1, 0(a0)
; CHECK-NEXT: andi a2, a2, 1
; CHECK-NEXT: beqz a2, .LBB1_2
; CHECK-NEXT: .LBB1_4:
; CHECK-NEXT: j .LBB1_6
; CHECK-NEXT: .LBB1_5: # %sw.bb85
; CHECK-NEXT: addi sp, sp, -16
; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
; CHECK-NEXT: ld a0, 0(a1)
; CHECK-NEXT: call Perl_av_store
; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
; CHECK-NEXT: addi sp, sp, 16
; CHECK-NEXT: .LBB1_6: # %common.ret
; CHECK-NEXT: li a0, 0
; CHECK-NEXT: ret
entry:
br i1 %tobool.not, label %cond.end, label %cond.true
cond.true: ; preds = %entry
%0 = load ptr, ptr %PL_stack_sp, align 8
br label %cond.end
cond.end: ; preds = %cond.true, %entry
%cond = phi ptr [ %0, %cond.true ], [ null, %entry ]
br i1 %tobool3.not, label %cond.end7, label %cond.true4
cond.true4: ; preds = %cond.end
%1 = load ptr, ptr %PL_stack_sp, align 8
%2 = icmp ne ptr %1, null
br label %cond.end7
cond.end7: ; preds = %cond.true4, %cond.end
%cond84 = phi i1 [ %2, %cond.true4 ], [ false, %cond.end ]
br i1 %cond1, label %if.end48, label %sw.bb
sw.bb: ; preds = %cond.end7
call void @llvm.assume(i1 %tobool.not)
br label %if.end48
if.end48: ; preds = %sw.bb, %cond.end7
br i1 %cond84, label %sw.bb85, label %common.ret
common.ret: ; preds = %sw.bb85, %if.end48
ret ptr null
sw.bb85: ; preds = %if.end48
%3 = load i64, ptr %cond, align 8
%call125 = call fastcc ptr @Perl_av_store(i64 %3)
br label %common.ret
}
attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) }
|