[VENTUS][RISCV][fix] Modify JOIN instruction to use X0 rather than V0

This commit is contained in:
zhoujing 2023-07-13 17:01:36 +08:00
parent a5c1106e25
commit 3719c07dc0
4 changed files with 31 additions and 18 deletions

View File

@ -127,8 +127,8 @@ bool VentusInsertJoinToVBranch::runOnMachineFunction(MachineFunction &MF) {
JoinedBB.insert(PostIDomBB);
BuildMI(*PostIDomBB, PostIDomBB->begin(), DebugLoc(),
TII->get(RISCV::JOIN))
.addReg(RISCV::V0)
.addReg(RISCV::V0)
.addReg(RISCV::X0)
.addReg(RISCV::X0)
.addImm(0);
}
}

View File

@ -740,8 +740,13 @@ def SETRPC : RVInstI<0b011, OPC_CUSTOM_2, (outs GPR:$rd), (ins GPR:$rs1, simm12:
Sched<[WriteIALU, ReadIALU]>;
let hasSideEffects = 1, mayLoad = 0, mayStore = 0, CustomConstraints = "" in
def JOIN : RVInstVB<0b010, (outs), (ins VGPR:$vs2, VGPR:$vs1, simm12:$imm12),
"join", "$vs2, $vs1, $imm12">, Sched<[]>;
def JOIN : RVInstVB<0b010, (outs), (ins GPR:$rs2, GPR:$rs1, simm12:$imm12),
"join", "$rs2, $rs1, $imm12">, Sched<[]> {
bits<5> rs2;
bits<5> rs1;
let Inst{24-20} = rs2;
let Inst{19-15} = rs1;
}
def VLUXEI8 : VectorLoad<LSWidth8, "vluxei8.v">;
def VLUXEI16 : VectorLoad<LSWidth16, "vluxei16.v">;

View File

@ -34,7 +34,8 @@ define dso_local i32 @branch(i32 noundef %dim) local_unnamed_addr {
; VENTUS-NEXT: call _Z13get_global_idj
; VENTUS-NEXT: vadd.vx v1, v0, zero
; VENTUS-NEXT: .LBB0_3: # %cleanup
; VENTUS-NEXT: join
; VENTUS-NEXT: # Label of block must be emitted
; VENTUS-NEXT: join zero, zero, 0
; VENTUS-NEXT: vadd.vx v0, v1, zero
; VENTUS-NEXT: lw ra, -4(sp) # 4-byte Folded Reload
; VENTUS-NEXT: addi sp, sp, -4
@ -94,7 +95,8 @@ define dso_local ventus_kernel void @loop_branch(ptr addrspace(1) nocapture noun
; VENTUS-NEXT: setrpc zero, t1, %pcrel_lo(.Lpcrel_hi3)
; VENTUS-NEXT: vbne v0, v5, .LBB1_2
; VENTUS-NEXT: .LBB1_3: # %for.cond.cleanup
; VENTUS-NEXT: join
; VENTUS-NEXT: # Label of block must be emitted
; VENTUS-NEXT: join zero, zero, 0
; VENTUS-NEXT: lw ra, -8(sp) # 4-byte Folded Reload
; VENTUS-NEXT: addi sp, sp, -8
; VENTUS-NEXT: ret
@ -146,7 +148,7 @@ define dso_local i32 @branch_in_branch(i32 noundef %dim) local_unnamed_addr {
; VENTUS-NEXT: .Lpcrel_hi4:
; VENTUS-NEXT: auipc t1, %pcrel_hi(.LBB2_7)
; VENTUS-NEXT: setrpc zero, t1, %pcrel_lo(.Lpcrel_hi4)
; VENTUS-NEXT: regext zero, zero, 8
; VENTUS-NEXT: regext zero, zero, 64
; VENTUS-NEXT: vblt v33, v1, .LBB2_7
; VENTUS-NEXT: # %bb.1: # %if.else
; VENTUS-NEXT: li t0, 17
@ -154,7 +156,7 @@ define dso_local i32 @branch_in_branch(i32 noundef %dim) local_unnamed_addr {
; VENTUS-NEXT: .Lpcrel_hi5:
; VENTUS-NEXT: auipc t1, %pcrel_hi(.LBB2_7)
; VENTUS-NEXT: setrpc zero, t1, %pcrel_lo(.Lpcrel_hi5)
; VENTUS-NEXT: regext zero, zero, 64
; VENTUS-NEXT: regext zero, zero, 8
; VENTUS-NEXT: vbltu v0, v33, .LBB2_4
; VENTUS-NEXT: # %bb.2: # %if.then2
; VENTUS-NEXT: li t0, 1
@ -163,7 +165,7 @@ define dso_local i32 @branch_in_branch(i32 noundef %dim) local_unnamed_addr {
; VENTUS-NEXT: .Lpcrel_hi6:
; VENTUS-NEXT: auipc t1, %pcrel_hi(.LBB2_6)
; VENTUS-NEXT: setrpc zero, t1, %pcrel_lo(.Lpcrel_hi6)
; VENTUS-NEXT: regext zero, zero, 64
; VENTUS-NEXT: regext zero, zero, 8
; VENTUS-NEXT: vblt v0, v33, .LBB2_5
; VENTUS-NEXT: # %bb.3: # %if.then2
; VENTUS-NEXT: li t0, 23
@ -176,10 +178,12 @@ define dso_local i32 @branch_in_branch(i32 noundef %dim) local_unnamed_addr {
; VENTUS-NEXT: .LBB2_5:
; VENTUS-NEXT: li t0, 12
; VENTUS-NEXT: .LBB2_6: # %cleanup9
; VENTUS-NEXT: join
; VENTUS-NEXT: # Label of block must be emitted
; VENTUS-NEXT: join zero, zero, 0
; VENTUS-NEXT: vmv.v.x v0, t0
; VENTUS-NEXT: .LBB2_7: # %cleanup9
; VENTUS-NEXT: join
; VENTUS-NEXT: # Label of block must be emitted
; VENTUS-NEXT: join zero, zero, 0
; VENTUS-NEXT: lw ra, -4(sp) # 4-byte Folded Reload
; VENTUS-NEXT: addi sp, sp, -4
; VENTUS-NEXT: addi tp, tp, -4
@ -251,9 +255,10 @@ define dso_local ventus_kernel void @double_loop(ptr addrspace(1) nocapture noun
; VENTUS-NEXT: auipc t1, %pcrel_hi(.LBB3_4)
; VENTUS-NEXT: setrpc zero, t1, %pcrel_lo(.Lpcrel_hi8)
; VENTUS-NEXT: vbne v4, v6, .LBB3_3
; VENTUS-NEXT: # %bb.4: # %for.cond1.for.cond.cleanup3_crit_edge
; VENTUS-NEXT: .LBB3_4: # %for.cond1.for.cond.cleanup3_crit_edge
; VENTUS-NEXT: # in Loop: Header=BB3_2 Depth=1
; VENTUS-NEXT: join
; VENTUS-NEXT: # Label of block must be emitted
; VENTUS-NEXT: join zero, zero, 0
; VENTUS-NEXT: addi t0, t0, 1
; VENTUS-NEXT: vmv.v.x v4, t0
; VENTUS-NEXT: .Lpcrel_hi9:
@ -261,7 +266,8 @@ define dso_local ventus_kernel void @double_loop(ptr addrspace(1) nocapture noun
; VENTUS-NEXT: setrpc zero, t1, %pcrel_lo(.Lpcrel_hi9)
; VENTUS-NEXT: vbne v4, v0, .LBB3_2
; VENTUS-NEXT: .LBB3_5: # %for.cond.cleanup
; VENTUS-NEXT: join
; VENTUS-NEXT: # Label of block must be emitted
; VENTUS-NEXT: join zero, zero, 0
; VENTUS-NEXT: lw ra, -8(sp) # 4-byte Folded Reload
; VENTUS-NEXT: addi sp, sp, -8
; VENTUS-NEXT: ret
@ -366,7 +372,8 @@ define dso_local ventus_kernel void @loop_switch(ptr addrspace(1) nocapture noun
; VENTUS-NEXT: vmv.v.x v6, t1
; VENTUS-NEXT: j .LBB4_3
; VENTUS-NEXT: .LBB4_9: # %for.cond.cleanup
; VENTUS-NEXT: join
; VENTUS-NEXT: # Label of block must be emitted
; VENTUS-NEXT: join zero, zero, 0
; VENTUS-NEXT: lw ra, -8(sp) # 4-byte Folded Reload
; VENTUS-NEXT: addi sp, sp, -8
; VENTUS-NEXT: ret
@ -452,7 +459,8 @@ define dso_local i32 @_Z13get_global_idj(i32 noundef %dim) local_unnamed_addr {
; VENTUS-NEXT: .LBB5_6:
; VENTUS-NEXT: vmv.v.x v0, zero
; VENTUS-NEXT: .LBB5_7: # %return
; VENTUS-NEXT: join
; VENTUS-NEXT: # Label of block must be emitted
; VENTUS-NEXT: join zero, zero, 0
; VENTUS-NEXT: lw ra, -4(sp) # 4-byte Folded Reload
; VENTUS-NEXT: addi sp, sp, -4
; VENTUS-NEXT: ret

View File

@ -4,8 +4,8 @@
# RUN: | llvm-objdump -d --mattr=+v - \
# RUN: | FileCheck %s --check-prefix=CHECK-INST
join v0, v0, 0
# CHECK-INST: join v0, v0, 0
join x0, x0, 0
# CHECK-INST: join zero, zero, 0
# CHECK-ENCODING: [0x5b,0x20,0x00,0x00]
setrpc zero, x4, 256