120 lines
3.4 KiB
LLVM
120 lines
3.4 KiB
LLVM
|
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
||
|
; RUN: llc -mtriple=riscv64 -mattr=+zbb -verify-machineinstrs < %s \
|
||
|
; RUN: | FileCheck -check-prefix=RV64I %s
|
||
|
|
||
|
@PL_reg_match_utf8 = external global i8, align 1
|
||
|
|
||
|
declare signext i32 @test1(i8 signext)
|
||
|
|
||
|
declare signext i32 @test2(i8 signext)
|
||
|
|
||
|
declare signext i32 @test3(i8 signext)
|
||
|
|
||
|
define signext i32 @test() nounwind {
|
||
|
; RV64I-LABEL: test:
|
||
|
; RV64I: # %bb.0:
|
||
|
; RV64I-NEXT: addi sp, sp, -16
|
||
|
; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
|
||
|
; RV64I-NEXT: sd s0, 0(sp) # 8-byte Folded Spill
|
||
|
; RV64I-NEXT: lui a0, %hi(PL_reg_match_utf8)
|
||
|
; RV64I-NEXT: lb s0, %lo(PL_reg_match_utf8)(a0)
|
||
|
; RV64I-NEXT: beqz s0, .LBB0_2
|
||
|
; RV64I-NEXT: # %bb.1:
|
||
|
; RV64I-NEXT: mv a0, s0
|
||
|
; RV64I-NEXT: call test1
|
||
|
; RV64I-NEXT: mv a0, s0
|
||
|
; RV64I-NEXT: call test2
|
||
|
; RV64I-NEXT: mv a0, s0
|
||
|
; RV64I-NEXT: call test3
|
||
|
; RV64I-NEXT: j .LBB0_3
|
||
|
; RV64I-NEXT: .LBB0_2:
|
||
|
; RV64I-NEXT: li a0, 0
|
||
|
; RV64I-NEXT: call test2
|
||
|
; RV64I-NEXT: .LBB0_3:
|
||
|
; RV64I-NEXT: li a0, 0
|
||
|
; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
|
||
|
; RV64I-NEXT: ld s0, 0(sp) # 8-byte Folded Reload
|
||
|
; RV64I-NEXT: addi sp, sp, 16
|
||
|
; RV64I-NEXT: ret
|
||
|
%1 = load i8, ptr @PL_reg_match_utf8, align 1
|
||
|
%2 = icmp eq i8 %1, 0
|
||
|
br i1 %2, label %7, label %3
|
||
|
|
||
|
3:
|
||
|
%4 = tail call signext i32 @test1(i8 signext %1)
|
||
|
%5 = tail call signext i32 @test2(i8 signext %1)
|
||
|
%6 = tail call signext i32 @test3(i8 signext %1)
|
||
|
br label %9
|
||
|
|
||
|
7:
|
||
|
%8 = tail call signext i32 @test2(i8 signext 0)
|
||
|
br label %9
|
||
|
|
||
|
9:
|
||
|
ret i32 0
|
||
|
}
|
||
|
|
||
|
|
||
|
define signext i32 @test_loop() nounwind {
|
||
|
; RV64I-LABEL: test_loop:
|
||
|
; RV64I: # %bb.0:
|
||
|
; RV64I-NEXT: addi sp, sp, -32
|
||
|
; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
|
||
|
; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
|
||
|
; RV64I-NEXT: sd s1, 8(sp) # 8-byte Folded Spill
|
||
|
; RV64I-NEXT: sd s2, 0(sp) # 8-byte Folded Spill
|
||
|
; RV64I-NEXT: li s1, -16
|
||
|
; RV64I-NEXT: lui s2, %hi(PL_reg_match_utf8)
|
||
|
; RV64I-NEXT: j .LBB1_2
|
||
|
; RV64I-NEXT: .LBB1_1: # in Loop: Header=BB1_2 Depth=1
|
||
|
; RV64I-NEXT: mv a0, s0
|
||
|
; RV64I-NEXT: call test2
|
||
|
; RV64I-NEXT: addiw s1, s1, 1
|
||
|
; RV64I-NEXT: beqz s1, .LBB1_4
|
||
|
; RV64I-NEXT: .LBB1_2: # =>This Inner Loop Header: Depth=1
|
||
|
; RV64I-NEXT: lb s0, %lo(PL_reg_match_utf8)(s2)
|
||
|
; RV64I-NEXT: beqz s0, .LBB1_1
|
||
|
; RV64I-NEXT: # %bb.3: # in Loop: Header=BB1_2 Depth=1
|
||
|
; RV64I-NEXT: mv a0, s0
|
||
|
; RV64I-NEXT: call test1
|
||
|
; RV64I-NEXT: mv a0, s0
|
||
|
; RV64I-NEXT: call test2
|
||
|
; RV64I-NEXT: mv a0, s0
|
||
|
; RV64I-NEXT: call test3
|
||
|
; RV64I-NEXT: addiw s1, s1, 1
|
||
|
; RV64I-NEXT: bnez s1, .LBB1_2
|
||
|
; RV64I-NEXT: .LBB1_4:
|
||
|
; RV64I-NEXT: li a0, 0
|
||
|
; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
|
||
|
; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
|
||
|
; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
|
||
|
; RV64I-NEXT: ld s2, 0(sp) # 8-byte Folded Reload
|
||
|
; RV64I-NEXT: addi sp, sp, 32
|
||
|
; RV64I-NEXT: ret
|
||
|
br label %1
|
||
|
|
||
|
1:
|
||
|
%2 = phi i32 [ 16, %0 ], [ %12, %11 ]
|
||
|
%3 = load i8, ptr @PL_reg_match_utf8, align 1
|
||
|
%4 = icmp eq i8 %3, 0
|
||
|
br i1 %4, label %9, label %5
|
||
|
|
||
|
5:
|
||
|
%6 = tail call signext i32 @test1(i8 signext %3)
|
||
|
%7 = tail call signext i32 @test2(i8 signext %3)
|
||
|
%8 = tail call signext i32 @test3(i8 signext %3)
|
||
|
br label %11
|
||
|
|
||
|
9:
|
||
|
%10 = tail call signext i32 @test2(i8 signext %3)
|
||
|
br label %11
|
||
|
|
||
|
11:
|
||
|
%12 = add nsw i32 %2, -1
|
||
|
%13 = icmp eq i32 %12, 0
|
||
|
br i1 %13, label %14, label %1
|
||
|
|
||
|
14:
|
||
|
ret i32 0
|
||
|
}
|