Skip to content

Commit 2426055

Browse files
committed
[RISCV] Add more zext nneg tests. NFC
This adds additional tests for #82199. These tests need us to propagate the nneg flag when we zero/sign extend an existing zext nneg node. For these tests on RV64, call lowering will need to sign extend or zero extend the existing zext nneg to i64. getNode will fold this into a single zext. We should propagate the nneg flag from the original zext nneg. This will allow us to remove the zext nneg based on known sign bits during DAG combine.
1 parent c9974ae commit 2426055

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

llvm/test/CodeGen/RISCV/sext-zext-trunc.ll

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -822,3 +822,85 @@ define void @zext_nneg_dominating_icmp_i32(i16 signext %0) {
822822
}
823823

824824
declare void @bar_i32(i32)
825+
826+
; Test that we propage zext nneg when we sign extend it on RV64 for the call to
827+
; bar_i32.
828+
define void @zext_nneg_dominating_icmp_i32_signext(i16 signext %0) {
829+
; RV32I-LABEL: zext_nneg_dominating_icmp_i32_signext:
830+
; RV32I: # %bb.0:
831+
; RV32I-NEXT: bltz a0, .LBB48_2
832+
; RV32I-NEXT: # %bb.1:
833+
; RV32I-NEXT: tail bar_i32
834+
; RV32I-NEXT: .LBB48_2:
835+
; RV32I-NEXT: ret
836+
;
837+
; RV64I-LABEL: zext_nneg_dominating_icmp_i32_signext:
838+
; RV64I: # %bb.0:
839+
; RV64I-NEXT: bltz a0, .LBB48_2
840+
; RV64I-NEXT: # %bb.1:
841+
; RV64I-NEXT: slli a0, a0, 48
842+
; RV64I-NEXT: srli a0, a0, 48
843+
; RV64I-NEXT: tail bar_i32
844+
; RV64I-NEXT: .LBB48_2:
845+
; RV64I-NEXT: ret
846+
;
847+
; RV64ZBB-LABEL: zext_nneg_dominating_icmp_i32_signext:
848+
; RV64ZBB: # %bb.0:
849+
; RV64ZBB-NEXT: bltz a0, .LBB48_2
850+
; RV64ZBB-NEXT: # %bb.1:
851+
; RV64ZBB-NEXT: zext.h a0, a0
852+
; RV64ZBB-NEXT: tail bar_i32
853+
; RV64ZBB-NEXT: .LBB48_2:
854+
; RV64ZBB-NEXT: ret
855+
%2 = icmp sgt i16 %0, -1
856+
br i1 %2, label %3, label %5
857+
858+
3:
859+
%4 = zext nneg i16 %0 to i32
860+
tail call void @bar_i32(i32 signext %4)
861+
br label %5
862+
863+
5:
864+
ret void
865+
}
866+
867+
; Test that we propage zext nneg when we zero extend it on RV64 for the call to
868+
; bar_i32.
869+
define void @zext_nneg_dominating_icmp_i32_zeroext(i16 signext %0) {
870+
; RV32I-LABEL: zext_nneg_dominating_icmp_i32_zeroext:
871+
; RV32I: # %bb.0:
872+
; RV32I-NEXT: bltz a0, .LBB49_2
873+
; RV32I-NEXT: # %bb.1:
874+
; RV32I-NEXT: tail bar_i32
875+
; RV32I-NEXT: .LBB49_2:
876+
; RV32I-NEXT: ret
877+
;
878+
; RV64I-LABEL: zext_nneg_dominating_icmp_i32_zeroext:
879+
; RV64I: # %bb.0:
880+
; RV64I-NEXT: bltz a0, .LBB49_2
881+
; RV64I-NEXT: # %bb.1:
882+
; RV64I-NEXT: slli a0, a0, 48
883+
; RV64I-NEXT: srli a0, a0, 48
884+
; RV64I-NEXT: tail bar_i32
885+
; RV64I-NEXT: .LBB49_2:
886+
; RV64I-NEXT: ret
887+
;
888+
; RV64ZBB-LABEL: zext_nneg_dominating_icmp_i32_zeroext:
889+
; RV64ZBB: # %bb.0:
890+
; RV64ZBB-NEXT: bltz a0, .LBB49_2
891+
; RV64ZBB-NEXT: # %bb.1:
892+
; RV64ZBB-NEXT: zext.h a0, a0
893+
; RV64ZBB-NEXT: tail bar_i32
894+
; RV64ZBB-NEXT: .LBB49_2:
895+
; RV64ZBB-NEXT: ret
896+
%2 = icmp sgt i16 %0, -1
897+
br i1 %2, label %3, label %5
898+
899+
3:
900+
%4 = zext nneg i16 %0 to i32
901+
tail call void @bar_i32(i32 signext %4)
902+
br label %5
903+
904+
5:
905+
ret void
906+
}

0 commit comments

Comments
 (0)