Skip to content

Commit b896ff5

Browse files
committed
[InstCombine] Added tests to fsh.ll
1 parent 1f7dec3 commit b896ff5

File tree

1 file changed

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

1 file changed

+128
-0
lines changed

llvm/test/Transforms/InstCombine/fsh.ll

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -722,6 +722,134 @@ define i32 @fsh_orconst_rotate(i32 %a) {
722722
ret i32 %t2
723723
}
724724

725+
define i32 @fsh_rotate_5(i8 %x, i32 %y) {
726+
; CHECK-LABEL: @fsh_rotate_5(
727+
; CHECK-NEXT: [[T1:%.*]] = zext i8 [[X:%.*]] to i32
728+
; CHECK-NEXT: [[OR1:%.*]] = or i32 [[T1]], [[Y:%.*]]
729+
; CHECK-NEXT: [[OR2:%.*]] = call i32 @llvm.fshl.i32(i32 [[OR1]], i32 [[Y]], i32 5)
730+
; CHECK-NEXT: ret i32 [[OR2]]
731+
;
732+
733+
%t1 = zext i8 %x to i32
734+
%or1 = or i32 %t1, %y
735+
%shr = lshr i32 %or1, 27
736+
%shl = shl i32 %or1, 5
737+
%or2 = or i32 %shr, %shl
738+
ret i32 %or2
739+
}
740+
741+
define i32 @fsh_rotate_18(i8 %x, i32 %y) {
742+
; CHECK-LABEL: @fsh_rotate_18(
743+
; CHECK-NEXT: [[T1:%.*]] = zext i8 [[X:%.*]] to i32
744+
; CHECK-NEXT: [[OR1:%.*]] = or i32 [[T1]], [[Y:%.*]]
745+
; CHECK-NEXT: [[OR2:%.*]] = call i32 @llvm.fshl.i32(i32 [[OR1]], i32 [[Y]], i32 18)
746+
; CHECK-NEXT: ret i32 [[OR2]]
747+
;
748+
749+
%t1 = zext i8 %x to i32
750+
%or1 = or i32 %t1, %y
751+
%shr = lshr i32 %or1, 14
752+
%shl = shl i32 %or1, 18
753+
%or2 = or i32 %shr, %shl
754+
ret i32 %or2
755+
}
756+
757+
define i32 @fsh_load_rotate_12(ptr %data) {
758+
; CHECK-LABEL: @fsh_load_rotate_12(
759+
; CHECK-NEXT: entry:
760+
; CHECK-NEXT: [[TMP0:%.*]] = load i8, ptr [[DATA:%.*]], align 1
761+
; CHECK-NEXT: [[CONV:%.*]] = zext i8 [[TMP0]] to i32
762+
; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 [[CONV]], 24
763+
; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[DATA]], i64 1
764+
; CHECK-NEXT: [[TMP1:%.*]] = load i8, ptr [[ARRAYIDX1]], align 1
765+
; CHECK-NEXT: [[CONV2:%.*]] = zext i8 [[TMP1]] to i32
766+
; CHECK-NEXT: [[SHL3:%.*]] = shl nuw nsw i32 [[CONV2]], 16
767+
; CHECK-NEXT: [[OR:%.*]] = or i32 [[SHL3]], [[SHL]]
768+
; CHECK-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds i8, ptr [[DATA]], i64 2
769+
; CHECK-NEXT: [[TMP2:%.*]] = load i8, ptr [[ARRAYIDX4]], align 1
770+
; CHECK-NEXT: [[CONV5:%.*]] = zext i8 [[TMP2]] to i32
771+
; CHECK-NEXT: [[SHL6:%.*]] = shl nuw nsw i32 [[CONV5]], 8
772+
; CHECK-NEXT: [[ARRAYIDX8:%.*]] = getelementptr inbounds i8, ptr [[DATA]], i64 3
773+
; CHECK-NEXT: [[TMP3:%.*]] = load i8, ptr [[ARRAYIDX8]], align 1
774+
; CHECK-NEXT: [[CONV9:%.*]] = zext i8 [[TMP3]] to i32
775+
; CHECK-NEXT: [[TMP4:%.*]] = or i32 [[SHL6]], [[CONV9]]
776+
; CHECK-NEXT: [[OR10:%.*]] = or i32 [[TMP4]], [[SHL3]]
777+
; CHECK-NEXT: [[OR15:%.*]] = call i32 @llvm.fshl.i32(i32 [[OR10]], i32 [[OR]], i32 12)
778+
; CHECK-NEXT: ret i32 [[OR15]]
779+
;
780+
781+
entry:
782+
%0 = load i8, ptr %data
783+
%conv = zext i8 %0 to i32
784+
%shl = shl nuw i32 %conv, 24
785+
%arrayidx1 = getelementptr inbounds i8, ptr %data, i64 1
786+
%1 = load i8, ptr %arrayidx1
787+
%conv2 = zext i8 %1 to i32
788+
%shl3 = shl nuw nsw i32 %conv2, 16
789+
%or = or i32 %shl3, %shl
790+
%arrayidx4 = getelementptr inbounds i8, ptr %data, i64 2
791+
%2 = load i8, ptr %arrayidx4
792+
%conv5 = zext i8 %2 to i32
793+
%shl6 = shl nuw nsw i32 %conv5, 8
794+
%or7 = or i32 %or, %shl6
795+
%arrayidx8 = getelementptr inbounds i8, ptr %data, i64 3
796+
%3 = load i8, ptr %arrayidx8
797+
%conv9 = zext i8 %3 to i32
798+
%or10 = or i32 %or7, %conv9
799+
%shr = lshr i32 %or10, 20
800+
%shl7 = shl i32 %or10, 12
801+
%or15 = or i32 %shr, %shl7
802+
ret i32 %or15
803+
}
804+
805+
define i32 @fsh_load_rotate_25(ptr %data) {
806+
; CHECK-LABEL: @fsh_load_rotate_25(
807+
; CHECK-NEXT: entry:
808+
; CHECK-NEXT: [[TMP0:%.*]] = load i8, ptr [[DATA:%.*]], align 1
809+
; CHECK-NEXT: [[CONV:%.*]] = zext i8 [[TMP0]] to i32
810+
; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 [[CONV]], 24
811+
; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[DATA]], i64 1
812+
; CHECK-NEXT: [[TMP1:%.*]] = load i8, ptr [[ARRAYIDX1]], align 1
813+
; CHECK-NEXT: [[CONV2:%.*]] = zext i8 [[TMP1]] to i32
814+
; CHECK-NEXT: [[SHL3:%.*]] = shl nuw nsw i32 [[CONV2]], 16
815+
; CHECK-NEXT: [[OR:%.*]] = or i32 [[SHL3]], [[SHL]]
816+
; CHECK-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds i8, ptr [[DATA]], i64 2
817+
; CHECK-NEXT: [[TMP2:%.*]] = load i8, ptr [[ARRAYIDX4]], align 1
818+
; CHECK-NEXT: [[CONV5:%.*]] = zext i8 [[TMP2]] to i32
819+
; CHECK-NEXT: [[SHL6:%.*]] = shl nuw nsw i32 [[CONV5]], 8
820+
; CHECK-NEXT: [[OR7:%.*]] = or i32 [[OR]], [[SHL6]]
821+
; CHECK-NEXT: [[ARRAYIDX8:%.*]] = getelementptr inbounds i8, ptr [[DATA]], i64 3
822+
; CHECK-NEXT: [[TMP3:%.*]] = load i8, ptr [[ARRAYIDX8]], align 1
823+
; CHECK-NEXT: [[CONV9:%.*]] = zext i8 [[TMP3]] to i32
824+
; CHECK-NEXT: [[OR10:%.*]] = or i32 [[OR7]], [[CONV9]]
825+
; CHECK-NEXT: [[OR15:%.*]] = call i32 @llvm.fshl.i32(i32 [[CONV9]], i32 [[OR10]], i32 25)
826+
; CHECK-NEXT: ret i32 [[OR15]]
827+
;
828+
829+
entry:
830+
%0 = load i8, ptr %data
831+
%conv = zext i8 %0 to i32
832+
%shl = shl nuw i32 %conv, 24
833+
%arrayidx1 = getelementptr inbounds i8, ptr %data, i64 1
834+
%1 = load i8, ptr %arrayidx1
835+
%conv2 = zext i8 %1 to i32
836+
%shl3 = shl nuw nsw i32 %conv2, 16
837+
%or = or i32 %shl3, %shl
838+
%arrayidx4 = getelementptr inbounds i8, ptr %data, i64 2
839+
%2 = load i8, ptr %arrayidx4
840+
%conv5 = zext i8 %2 to i32
841+
%shl6 = shl nuw nsw i32 %conv5, 8
842+
%or7 = or i32 %or, %shl6
843+
%arrayidx8 = getelementptr inbounds i8, ptr %data, i64 3
844+
%3 = load i8, ptr %arrayidx8
845+
%conv9 = zext i8 %3 to i32
846+
%or10 = or i32 %or7, %conv9
847+
%shr = lshr i32 %or10, 7
848+
%shl7 = shl i32 %or10, 25
849+
%or15 = or i32 %shr, %shl7
850+
ret i32 %or15
851+
}
852+
725853
define <2 x i31> @fshr_mask_args_same_vector(<2 x i31> %a) {
726854
; CHECK-LABEL: @fshr_mask_args_same_vector(
727855
; CHECK-NEXT: [[T3:%.*]] = shl <2 x i31> [[A:%.*]], <i31 10, i31 10>

0 commit comments

Comments
 (0)