@@ -6,6 +6,7 @@ declare i16 @llvm.fshr.i16(i16, i16, i16)
6
6
declare i32 @llvm.fshl.i32 (i32 , i32 , i32 )
7
7
declare i33 @llvm.fshr.i33 (i33 , i33 , i33 )
8
8
declare <2 x i32 > @llvm.fshr.v2i32 (<2 x i32 >, <2 x i32 >, <2 x i32 >)
9
+ declare <2 x i16 > @llvm.fshl.v2i16 (<2 x i16 >, <2 x i16 >, <2 x i16 >)
9
10
declare <2 x i31 > @llvm.fshl.v2i31 (<2 x i31 >, <2 x i31 >, <2 x i31 >)
10
11
declare <3 x i16 > @llvm.fshl.v3i16 (<3 x i16 >, <3 x i16 >, <3 x i16 >)
11
12
@@ -1010,3 +1011,91 @@ define <2 x i32> @fshr_vec_zero_elem(<2 x i32> %x, <2 x i32> %y) {
1010
1011
%fsh = call <2 x i32 > @llvm.fshr.v2i32 (<2 x i32 > %x , <2 x i32 > %y , <2 x i32 > <i32 2 , i32 0 >)
1011
1012
ret <2 x i32 > %fsh
1012
1013
}
1014
+
1015
+ define i16 @fshl_i16_shl (i16 %x , i16 %y ) {
1016
+ ; CHECK-LABEL: @fshl_i16_shl(
1017
+ ; CHECK-NEXT: entry:
1018
+ ; CHECK-NEXT: [[RES:%.*]] = call i16 @llvm.fshl.i16(i16 [[X:%.*]], i16 0, i16 [[Y:%.*]])
1019
+ ; CHECK-NEXT: ret i16 [[RES]]
1020
+ ;
1021
+ entry:
1022
+ %res = call i16 @llvm.fshl.i16 (i16 %x , i16 0 , i16 %y )
1023
+ ret i16 %res
1024
+ }
1025
+
1026
+ define i32 @fshl_i32_shl (i32 %x , i32 %y ) {
1027
+ ; CHECK-LABEL: @fshl_i32_shl(
1028
+ ; CHECK-NEXT: entry:
1029
+ ; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.fshl.i32(i32 [[X:%.*]], i32 0, i32 [[Y:%.*]])
1030
+ ; CHECK-NEXT: ret i32 [[RES]]
1031
+ ;
1032
+ entry:
1033
+ %res = call i32 @llvm.fshl.i32 (i32 %x , i32 0 , i32 %y )
1034
+ ret i32 %res
1035
+ }
1036
+
1037
+ define <2 x i16 > @fshl_vi16_shl (<2 x i16 > %x , <2 x i16 > %y ) {
1038
+ ; CHECK-LABEL: @fshl_vi16_shl(
1039
+ ; CHECK-NEXT: entry:
1040
+ ; CHECK-NEXT: [[RES:%.*]] = call <2 x i16> @llvm.fshl.v2i16(<2 x i16> [[X:%.*]], <2 x i16> zeroinitializer, <2 x i16> [[Y:%.*]])
1041
+ ; CHECK-NEXT: ret <2 x i16> [[RES]]
1042
+ ;
1043
+ entry:
1044
+ %res = call <2 x i16 > @llvm.fshl.v2i16 (<2 x i16 > %x , <2 x i16 > <i16 0 , i16 0 >, <2 x i16 > %y )
1045
+ ret <2 x i16 > %res
1046
+ }
1047
+
1048
+ define <2 x i31 > @fshl_vi31_shl (<2 x i31 > %x , <2 x i31 > %y ) {
1049
+ ; CHECK-LABEL: @fshl_vi31_shl(
1050
+ ; CHECK-NEXT: entry:
1051
+ ; CHECK-NEXT: [[RES:%.*]] = call <2 x i31> @llvm.fshl.v2i31(<2 x i31> [[X:%.*]], <2 x i31> zeroinitializer, <2 x i31> [[Y:%.*]])
1052
+ ; CHECK-NEXT: ret <2 x i31> [[RES]]
1053
+ ;
1054
+ entry:
1055
+ %res = call <2 x i31 > @llvm.fshl.v2i31 (<2 x i31 > %x , <2 x i31 > <i31 0 , i31 0 >, <2 x i31 > %y )
1056
+ ret <2 x i31 > %res
1057
+ }
1058
+
1059
+ define i16 @fshl_i16_shl_with_range (i16 %x , i16 range(i16 0 , 16 ) %y ) {
1060
+ ; CHECK-LABEL: @fshl_i16_shl_with_range(
1061
+ ; CHECK-NEXT: entry:
1062
+ ; CHECK-NEXT: [[RES:%.*]] = call i16 @llvm.fshl.i16(i16 [[X:%.*]], i16 0, i16 [[Y:%.*]])
1063
+ ; CHECK-NEXT: ret i16 [[RES]]
1064
+ ;
1065
+ entry:
1066
+ %res = call i16 @llvm.fshl.i16 (i16 %x , i16 0 , i16 %y )
1067
+ ret i16 %res
1068
+ }
1069
+
1070
+ define i32 @fshl_i32_shl_with_range (i32 %x , i32 range(i32 0 , 32 ) %y ) {
1071
+ ; CHECK-LABEL: @fshl_i32_shl_with_range(
1072
+ ; CHECK-NEXT: entry:
1073
+ ; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.fshl.i32(i32 [[X:%.*]], i32 0, i32 [[Y:%.*]])
1074
+ ; CHECK-NEXT: ret i32 [[RES]]
1075
+ ;
1076
+ entry:
1077
+ %res = call i32 @llvm.fshl.i32 (i32 %x , i32 0 , i32 %y )
1078
+ ret i32 %res
1079
+ }
1080
+
1081
+ define i16 @fshl_i16_shl_with_range_ignored (i16 %x , i16 range(i16 0 , 17 ) %y ) {
1082
+ ; CHECK-LABEL: @fshl_i16_shl_with_range_ignored(
1083
+ ; CHECK-NEXT: entry:
1084
+ ; CHECK-NEXT: [[RES:%.*]] = call i16 @llvm.fshl.i16(i16 [[X:%.*]], i16 0, i16 [[Y:%.*]])
1085
+ ; CHECK-NEXT: ret i16 [[RES]]
1086
+ ;
1087
+ entry:
1088
+ %res = call i16 @llvm.fshl.i16 (i16 %x , i16 0 , i16 %y )
1089
+ ret i16 %res
1090
+ }
1091
+
1092
+ define i32 @fshl_i32_shl_with_range_ignored (i32 %x , i32 range(i32 0 , 33 ) %y ) {
1093
+ ; CHECK-LABEL: @fshl_i32_shl_with_range_ignored(
1094
+ ; CHECK-NEXT: entry:
1095
+ ; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.fshl.i32(i32 [[X:%.*]], i32 0, i32 [[Y:%.*]])
1096
+ ; CHECK-NEXT: ret i32 [[RES]]
1097
+ ;
1098
+ entry:
1099
+ %res = call i32 @llvm.fshl.i32 (i32 %x , i32 0 , i32 %y )
1100
+ ret i32 %res
1101
+ }
0 commit comments