110 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=riscv64 -mcpu=sifive-p670 -O3 -verify-machineinstrs -riscv-enable-pipeliner=false < %s \3; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-NOT-PIPELINED4; RUN: llc -mtriple=riscv64 -mcpu=sifive-p670 -O3 -verify-machineinstrs -riscv-enable-pipeliner=true < %s \5; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-PIPELINED6 7; We shouldn't pipeline this loop as one operand of branch is a PHI.8define i32 @test_phi() {9; CHECK-LABEL: test_phi:10; CHECK: # %bb.0: # %entry11; CHECK-NEXT: li a0, 012; CHECK-NEXT: .LBB0_1: # %for.body13; CHECK-NEXT: # =>This Inner Loop Header: Depth=114; CHECK-NEXT: mv a1, a015; CHECK-NEXT: li a0, 116; CHECK-NEXT: sh a0, 0(zero)17; CHECK-NEXT: bnez a1, .LBB0_118; CHECK-NEXT: # %bb.2: # %for.cond.cleanup19; CHECK-NEXT: li a0, 020; CHECK-NEXT: ret21entry:22 br label %for.body23 24for.cond.cleanup: ; preds = %for.body25 ret i32 026 27for.body: ; preds = %for.body, %entry28 %indvars.iv1 = phi i64 [ 0, %entry ], [ 1, %for.body ]29 store i16 1, ptr null, align 430 %exitcond.not.31 = icmp eq i64 %indvars.iv1, 031 br i1 %exitcond.not.31, label %for.cond.cleanup, label %for.body32}33 34define void @test_pipelined_1(ptr noalias %in, ptr noalias %out, i32 signext %cnt) {35; CHECK-NOT-PIPELINED-LABEL: test_pipelined_1:36; CHECK-NOT-PIPELINED: # %bb.0: # %entry37; CHECK-NOT-PIPELINED-NEXT: blez a2, .LBB1_338; CHECK-NOT-PIPELINED-NEXT: # %bb.1: # %for.body.preheader39; CHECK-NOT-PIPELINED-NEXT: addi a2, a2, -140; CHECK-NOT-PIPELINED-NEXT: sh2add.uw a2, a2, a141; CHECK-NOT-PIPELINED-NEXT: addi a2, a2, 442; CHECK-NOT-PIPELINED-NEXT: .LBB1_2: # %for.body43; CHECK-NOT-PIPELINED-NEXT: # =>This Inner Loop Header: Depth=144; CHECK-NOT-PIPELINED-NEXT: lw a3, 0(a1)45; CHECK-NOT-PIPELINED-NEXT: addi a1, a1, 446; CHECK-NOT-PIPELINED-NEXT: addi a3, a3, 147; CHECK-NOT-PIPELINED-NEXT: sw a3, 0(a0)48; CHECK-NOT-PIPELINED-NEXT: addi a0, a0, 449; CHECK-NOT-PIPELINED-NEXT: bne a1, a2, .LBB1_250; CHECK-NOT-PIPELINED-NEXT: .LBB1_3: # %for.end51; CHECK-NOT-PIPELINED-NEXT: ret52;53; CHECK-PIPELINED-LABEL: test_pipelined_1:54; CHECK-PIPELINED: # %bb.0: # %entry55; CHECK-PIPELINED-NEXT: blez a2, .LBB1_656; CHECK-PIPELINED-NEXT: # %bb.1: # %for.body.preheader57; CHECK-PIPELINED-NEXT: lw a7, 0(a1)58; CHECK-PIPELINED-NEXT: addi a2, a2, -159; CHECK-PIPELINED-NEXT: addi a3, a0, 460; CHECK-PIPELINED-NEXT: addi a5, a1, 461; CHECK-PIPELINED-NEXT: sh2add.uw a6, a2, a162; CHECK-PIPELINED-NEXT: addi a6, a6, 463; CHECK-PIPELINED-NEXT: beq a5, a6, .LBB1_564; CHECK-PIPELINED-NEXT: # %bb.2: # %for.body65; CHECK-PIPELINED-NEXT: lw a1, 0(a5)66; CHECK-PIPELINED-NEXT: addi a4, a3, 467; CHECK-PIPELINED-NEXT: addi a5, a5, 468; CHECK-PIPELINED-NEXT: beq a5, a6, .LBB1_469; CHECK-PIPELINED-NEXT: .LBB1_3: # %for.body70; CHECK-PIPELINED-NEXT: # =>This Inner Loop Header: Depth=171; CHECK-PIPELINED-NEXT: addi a2, a7, 172; CHECK-PIPELINED-NEXT: mv a7, a173; CHECK-PIPELINED-NEXT: lw a1, 0(a5)74; CHECK-PIPELINED-NEXT: sw a2, 0(a0)75; CHECK-PIPELINED-NEXT: mv a0, a376; CHECK-PIPELINED-NEXT: mv a3, a477; CHECK-PIPELINED-NEXT: addi a4, a4, 478; CHECK-PIPELINED-NEXT: addi a5, a5, 479; CHECK-PIPELINED-NEXT: bne a5, a6, .LBB1_380; CHECK-PIPELINED-NEXT: .LBB1_4:81; CHECK-PIPELINED-NEXT: addi a7, a7, 182; CHECK-PIPELINED-NEXT: sw a7, 0(a0)83; CHECK-PIPELINED-NEXT: mv a0, a384; CHECK-PIPELINED-NEXT: mv a7, a185; CHECK-PIPELINED-NEXT: .LBB1_5:86; CHECK-PIPELINED-NEXT: addi a7, a7, 187; CHECK-PIPELINED-NEXT: sw a7, 0(a0)88; CHECK-PIPELINED-NEXT: .LBB1_6: # %for.end89; CHECK-PIPELINED-NEXT: ret90entry:91 %cmp = icmp sgt i32 %cnt, 092 br i1 %cmp, label %for.body, label %for.end93 94for.body: ; preds = %entry, %for.body95 %inc.next = phi i32 [ %inc, %for.body ], [ 0, %entry ]96 %in.addr.next = phi ptr [ %incdec.in, %for.body ], [ %in, %entry ]97 %out.addr.next = phi ptr [ %incdec.out, %for.body ], [ %out, %entry ]98 %0 = load i32, ptr %out.addr.next, align 499 %1 = add i32 %0, 1100 store i32 %1, ptr %in.addr.next, align 4101 %incdec.in = getelementptr inbounds i8, ptr %in.addr.next, i64 4102 %incdec.out = getelementptr inbounds i8, ptr %out.addr.next, i64 4103 %inc = add nuw nsw i32 %inc.next, 1104 %exitcond.not = icmp eq i32 %inc, %cnt105 br i1 %exitcond.not, label %for.end, label %for.body106 107for.end: ; preds = %for.body, %entry108 ret void109}110