diff options
| author | Mingming Liu <mingmingl@google.com> | 2025-09-10 15:25:31 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-10 15:25:31 -0700 |
| commit | 1417dafa1db9cb1b2b09438aa9f53ea5ab6e36e2 (patch) | |
| tree | 57f4b1f313c8cf74eed8819870f39c36ea263c68 /llvm/test/CodeGen/RISCV/rv64xtheadbb.ll | |
| parent | 898b813bc8a6d0276bf0f4769f5f2f64b34e632d (diff) | |
| parent | b8cefcb601ddaa18482555c4ff363c01a270c2fe (diff) | |
Merge branch 'main' into users/mingmingl-llvm/samplefdo-profile-formatusers/mingmingl-llvm/samplefdo-profile-format
Diffstat (limited to 'llvm/test/CodeGen/RISCV/rv64xtheadbb.ll')
| -rw-r--r-- | llvm/test/CodeGen/RISCV/rv64xtheadbb.ll | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/RISCV/rv64xtheadbb.ll b/llvm/test/CodeGen/RISCV/rv64xtheadbb.ll index 24853ebafefc..d504d418c150 100644 --- a/llvm/test/CodeGen/RISCV/rv64xtheadbb.ll +++ b/llvm/test/CodeGen/RISCV/rv64xtheadbb.ll @@ -1122,3 +1122,191 @@ define i64 @bswap_i64(i64 %a) { %1 = call i64 @llvm.bswap.i64(i64 %a) ret i64 %1 } + +define void @sextw_removal_ext(i32 signext %arg, i32 signext %arg1) nounwind { +; RV64I-LABEL: sextw_removal_ext: +; RV64I: # %bb.0: # %bb +; RV64I-NEXT: addi sp, sp, -16 +; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill +; RV64I-NEXT: sraw a0, a0, a1 +; RV64I-NEXT: .LBB36_1: # %bb2 +; RV64I-NEXT: # =>This Inner Loop Header: Depth=1 +; RV64I-NEXT: call foo +; RV64I-NEXT: slli a0, a0, 16 +; RV64I-NEXT: srai a0, a0, 32 +; RV64I-NEXT: bnez a0, .LBB36_1 +; RV64I-NEXT: # %bb.2: # %bb7 +; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload +; RV64I-NEXT: addi sp, sp, 16 +; RV64I-NEXT: ret +; +; RV64XTHEADBB-LABEL: sextw_removal_ext: +; RV64XTHEADBB: # %bb.0: # %bb +; RV64XTHEADBB-NEXT: addi sp, sp, -16 +; RV64XTHEADBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill +; RV64XTHEADBB-NEXT: sraw a0, a0, a1 +; RV64XTHEADBB-NEXT: .LBB36_1: # %bb2 +; RV64XTHEADBB-NEXT: # =>This Inner Loop Header: Depth=1 +; RV64XTHEADBB-NEXT: call foo +; RV64XTHEADBB-NEXT: th.ext a0, a0, 47, 16 +; RV64XTHEADBB-NEXT: bnez a0, .LBB36_1 +; RV64XTHEADBB-NEXT: # %bb.2: # %bb7 +; RV64XTHEADBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload +; RV64XTHEADBB-NEXT: addi sp, sp, 16 +; RV64XTHEADBB-NEXT: ret +bb: + %i = ashr i32 %arg, %arg1 + br label %bb2 + +bb2: ; preds = %bb2, %bb + %i3 = phi i32 [ %i, %bb ], [ %i7, %bb2 ] + %i4 = tail call i64 @foo(i32 signext %i3) + %i5 = shl i64 %i4, 16 + %i6 = ashr i64 %i5, 32 + %i7 = trunc i64 %i6 to i32 + %i8 = icmp eq i32 %i7, 0 + br i1 %i8, label %bb7, label %bb2 + +bb7: ; preds = %bb2 + ret void +} + +declare i64 @foo(i32 signext) + +define void @sextw_removal_extu(i32 signext %arg, i32 signext %arg1) nounwind { +; RV64I-LABEL: sextw_removal_extu: +; RV64I: # %bb.0: # %bb +; RV64I-NEXT: addi sp, sp, -16 +; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill +; RV64I-NEXT: sraw a0, a0, a1 +; RV64I-NEXT: .LBB37_1: # %bb2 +; RV64I-NEXT: # =>This Inner Loop Header: Depth=1 +; RV64I-NEXT: call foo +; RV64I-NEXT: slli a0, a0, 16 +; RV64I-NEXT: srli a0, a0, 33 +; RV64I-NEXT: bnez a0, .LBB37_1 +; RV64I-NEXT: # %bb.2: # %bb7 +; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload +; RV64I-NEXT: addi sp, sp, 16 +; RV64I-NEXT: ret +; +; RV64XTHEADBB-LABEL: sextw_removal_extu: +; RV64XTHEADBB: # %bb.0: # %bb +; RV64XTHEADBB-NEXT: addi sp, sp, -16 +; RV64XTHEADBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill +; RV64XTHEADBB-NEXT: sraw a0, a0, a1 +; RV64XTHEADBB-NEXT: .LBB37_1: # %bb2 +; RV64XTHEADBB-NEXT: # =>This Inner Loop Header: Depth=1 +; RV64XTHEADBB-NEXT: call foo +; RV64XTHEADBB-NEXT: th.extu a0, a0, 47, 17 +; RV64XTHEADBB-NEXT: bnez a0, .LBB37_1 +; RV64XTHEADBB-NEXT: # %bb.2: # %bb7 +; RV64XTHEADBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload +; RV64XTHEADBB-NEXT: addi sp, sp, 16 +; RV64XTHEADBB-NEXT: ret +bb: + %i = ashr i32 %arg, %arg1 + br label %bb2 + +bb2: ; preds = %bb2, %bb + %i3 = phi i32 [ %i, %bb ], [ %i7, %bb2 ] + %i4 = tail call i64 @foo(i32 signext %i3) + %i5 = shl i64 %i4, 16 + %i6 = lshr i64 %i5, 33 + %i7 = trunc i64 %i6 to i32 + %i8 = icmp eq i32 %i7, 0 + br i1 %i8, label %bb7, label %bb2 + +bb7: ; preds = %bb2 + ret void +} + +define signext i32 @hasAllNBitUsers_extu(i64 %arg1, i64 %arg2, i64 %arg3) { +; RV64I-LABEL: hasAllNBitUsers_extu: +; RV64I: # %bb.0: # %entry +; RV64I-NEXT: addi a2, a2, -1 +; RV64I-NEXT: li a3, 256 +; RV64I-NEXT: .LBB38_1: # %bb2 +; RV64I-NEXT: # =>This Inner Loop Header: Depth=1 +; RV64I-NEXT: slli a0, a0, 47 +; RV64I-NEXT: srli a0, a0, 62 +; RV64I-NEXT: addi a2, a2, 1 +; RV64I-NEXT: addw a0, a0, a1 +; RV64I-NEXT: bltu a2, a3, .LBB38_1 +; RV64I-NEXT: # %bb.2: # %bb7 +; RV64I-NEXT: ret +; +; RV64XTHEADBB-LABEL: hasAllNBitUsers_extu: +; RV64XTHEADBB: # %bb.0: # %entry +; RV64XTHEADBB-NEXT: addi a2, a2, -1 +; RV64XTHEADBB-NEXT: li a3, 256 +; RV64XTHEADBB-NEXT: .LBB38_1: # %bb2 +; RV64XTHEADBB-NEXT: # =>This Inner Loop Header: Depth=1 +; RV64XTHEADBB-NEXT: th.extu a0, a0, 16, 15 +; RV64XTHEADBB-NEXT: addi a2, a2, 1 +; RV64XTHEADBB-NEXT: addw a0, a0, a1 +; RV64XTHEADBB-NEXT: bltu a2, a3, .LBB38_1 +; RV64XTHEADBB-NEXT: # %bb.2: # %bb7 +; RV64XTHEADBB-NEXT: ret +entry: + br label %bb2 + +bb2: ; preds = %bb2, %entry + %i1 = phi i64 [ %arg1, %entry ], [ %i5, %bb2 ] + %i2 = phi i64 [ %arg3, %entry ], [ %i3, %bb2 ] + %i3 = add i64 %i2, 1 + %i4 = lshr i64 %i1, 15 + %i4b = and i64 %i4, 3 + %i5 = add i64 %i4b, %arg2 + %i6 = icmp ugt i64 %i2, 255 + br i1 %i6, label %bb7, label %bb2 + +bb7: ; preds = %bb2 + %i7 = trunc i64 %i5 to i32 + ret i32 %i7 +} + +define signext i32 @hasAllNBitUsers_ext(i64 %arg1, i64 %arg2, i64 %arg3) { +; RV64I-LABEL: hasAllNBitUsers_ext: +; RV64I: # %bb.0: # %entry +; RV64I-NEXT: addi a2, a2, -1 +; RV64I-NEXT: li a3, 256 +; RV64I-NEXT: .LBB39_1: # %bb2 +; RV64I-NEXT: # =>This Inner Loop Header: Depth=1 +; RV64I-NEXT: slli a0, a0, 47 +; RV64I-NEXT: srli a0, a0, 62 +; RV64I-NEXT: addi a2, a2, 1 +; RV64I-NEXT: addw a0, a0, a1 +; RV64I-NEXT: bltu a2, a3, .LBB39_1 +; RV64I-NEXT: # %bb.2: # %bb7 +; RV64I-NEXT: ret +; +; RV64XTHEADBB-LABEL: hasAllNBitUsers_ext: +; RV64XTHEADBB: # %bb.0: # %entry +; RV64XTHEADBB-NEXT: addi a2, a2, -1 +; RV64XTHEADBB-NEXT: li a3, 256 +; RV64XTHEADBB-NEXT: .LBB39_1: # %bb2 +; RV64XTHEADBB-NEXT: # =>This Inner Loop Header: Depth=1 +; RV64XTHEADBB-NEXT: th.extu a0, a0, 16, 15 +; RV64XTHEADBB-NEXT: addi a2, a2, 1 +; RV64XTHEADBB-NEXT: addw a0, a0, a1 +; RV64XTHEADBB-NEXT: bltu a2, a3, .LBB39_1 +; RV64XTHEADBB-NEXT: # %bb.2: # %bb7 +; RV64XTHEADBB-NEXT: ret +entry: + br label %bb2 + +bb2: ; preds = %bb2, %entry + %i1 = phi i64 [ %arg1, %entry ], [ %i5, %bb2 ] + %i2 = phi i64 [ %arg3, %entry ], [ %i3, %bb2 ] + %i3 = add i64 %i2, 1 + %i4 = ashr i64 %i1, 15 + %i4b = and i64 %i4, 3 + %i5 = add i64 %i4b, %arg2 + %i6 = icmp ugt i64 %i2, 255 + br i1 %i6, label %bb7, label %bb2 + +bb7: ; preds = %bb2 + %i7 = trunc i64 %i5 to i32 + ret i32 %i7 +} |
