Skip to content

Commit 1301481

Browse files
committed
[InstCombine] Add pre-commit tests. NFC.
1 parent 770fd38 commit 1301481

File tree

1 file changed

+98
-0
lines changed
  • llvm/test/Transforms/InstCombine

1 file changed

+98
-0
lines changed

llvm/test/Transforms/InstCombine/not.ll

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -769,3 +769,101 @@ entry:
769769
%cmp = icmp sle i32 %select, %not.c
770770
ret i1 %cmp
771771
}
772+
773+
define i32 @test_sext(i32 %a, i32 %b){
774+
; CHECK-LABEL: @test_sext(
775+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], 0
776+
; CHECK-NEXT: [[SEXT:%.*]] = sext i1 [[CMP]] to i32
777+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[SEXT]], [[B:%.*]]
778+
; CHECK-NEXT: [[NOT:%.*]] = xor i32 [[ADD]], -1
779+
; CHECK-NEXT: ret i32 [[NOT]]
780+
;
781+
%cmp = icmp eq i32 %a, 0
782+
%sext = sext i1 %cmp to i32
783+
%add = add i32 %b, %sext
784+
%not = xor i32 %add, -1
785+
ret i32 %not
786+
}
787+
788+
define <2 x i32> @test_sext_vec(<2 x i32> %a, <2 x i32> %b){
789+
; CHECK-LABEL: @test_sext_vec(
790+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i32> [[A:%.*]], zeroinitializer
791+
; CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i32>
792+
; CHECK-NEXT: [[ADD:%.*]] = add <2 x i32> [[SEXT]], [[B:%.*]]
793+
; CHECK-NEXT: [[NOT:%.*]] = xor <2 x i32> [[ADD]], <i32 -1, i32 -1>
794+
; CHECK-NEXT: ret <2 x i32> [[NOT]]
795+
;
796+
%cmp = icmp eq <2 x i32> %a, zeroinitializer
797+
%sext = sext <2 x i1> %cmp to <2 x i32>
798+
%add = add <2 x i32> %b, %sext
799+
%not = xor <2 x i32> %add, <i32 -1, i32 -1>
800+
ret <2 x i32> %not
801+
}
802+
803+
define i64 @test_zext_nneg(i32 %c1, i64 %c2, i64 %c3){
804+
; CHECK-LABEL: @test_zext_nneg(
805+
; CHECK-NEXT: [[NOT:%.*]] = xor i32 [[C1:%.*]], -1
806+
; CHECK-NEXT: [[CONV:%.*]] = zext nneg i32 [[NOT]] to i64
807+
; CHECK-NEXT: [[ADD1:%.*]] = add i64 [[C2:%.*]], -5
808+
; CHECK-NEXT: [[ADD2:%.*]] = add i64 [[CONV]], [[C3:%.*]]
809+
; CHECK-NEXT: [[SUB:%.*]] = sub i64 [[ADD1]], [[ADD2]]
810+
; CHECK-NEXT: ret i64 [[SUB]]
811+
;
812+
%not = xor i32 %c1, -1
813+
%conv = zext nneg i32 %not to i64
814+
%add1 = add i64 %c2, -5
815+
%add2 = add i64 %conv, %c3
816+
%sub = sub i64 %add1, %add2
817+
ret i64 %sub
818+
}
819+
820+
define i8 @test_trunc(i8 %a){
821+
; CHECK-LABEL: @test_trunc(
822+
; CHECK-NEXT: [[ZEXT:%.*]] = zext i8 [[A:%.*]] to i32
823+
; CHECK-NEXT: [[SUB:%.*]] = add nsw i32 [[ZEXT]], -1
824+
; CHECK-NEXT: [[SHR:%.*]] = ashr i32 [[SUB]], 31
825+
; CHECK-NEXT: [[CONV:%.*]] = trunc i32 [[SHR]] to i8
826+
; CHECK-NEXT: [[NOT:%.*]] = xor i8 [[CONV]], -1
827+
; CHECK-NEXT: ret i8 [[NOT]]
828+
;
829+
%zext = zext i8 %a to i32
830+
%sub = add nsw i32 %zext, -1
831+
%shr = ashr i32 %sub, 31
832+
%conv = trunc i32 %shr to i8
833+
%not = xor i8 %conv, -1
834+
ret i8 %not
835+
}
836+
837+
define <2 x i8> @test_trunc_vec(<2 x i8> %a){
838+
; CHECK-LABEL: @test_trunc_vec(
839+
; CHECK-NEXT: [[ZEXT:%.*]] = zext <2 x i8> [[A:%.*]] to <2 x i32>
840+
; CHECK-NEXT: [[SUB:%.*]] = add nsw <2 x i32> [[ZEXT]], <i32 -1, i32 -1>
841+
; CHECK-NEXT: [[SHR:%.*]] = ashr <2 x i32> [[SUB]], <i32 31, i32 31>
842+
; CHECK-NEXT: [[CONV:%.*]] = trunc <2 x i32> [[SHR]] to <2 x i8>
843+
; CHECK-NEXT: [[NOT:%.*]] = xor <2 x i8> [[CONV]], <i8 -1, i8 -1>
844+
; CHECK-NEXT: ret <2 x i8> [[NOT]]
845+
;
846+
%zext = zext <2 x i8> %a to <2 x i32>
847+
%sub = add nsw <2 x i32> %zext, <i32 -1, i32 -1>
848+
%shr = ashr <2 x i32> %sub, <i32 31, i32 31>
849+
%conv = trunc <2 x i32> %shr to <2 x i8>
850+
%not = xor <2 x i8> %conv, <i8 -1, i8 -1>
851+
ret <2 x i8> %not
852+
}
853+
854+
; Negative tests
855+
856+
define i32 @test_zext(i32 %a, i32 %b){
857+
; CHECK-LABEL: @test_zext(
858+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], 0
859+
; CHECK-NEXT: [[SEXT:%.*]] = zext i1 [[CMP]] to i32
860+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[SEXT]], [[B:%.*]]
861+
; CHECK-NEXT: [[NOT:%.*]] = xor i32 [[ADD]], -1
862+
; CHECK-NEXT: ret i32 [[NOT]]
863+
;
864+
%cmp = icmp eq i32 %a, 0
865+
%sext = zext i1 %cmp to i32
866+
%add = add i32 %b, %sext
867+
%not = xor i32 %add, -1
868+
ret i32 %not
869+
}

0 commit comments

Comments
 (0)