@@ -948,23 +948,18 @@ declare <8 x float> @llvm.x86.avx.rsqrt.ps.256(<8 x float>) nounwind readnone
948
948
define <2 x double > @test_x86_avx_vpermilvar_pd (<2 x double > %a0 , <2 x i64 > %a1 ) #0 {
949
949
; CHECK-LABEL: @test_x86_avx_vpermilvar_pd(
950
950
; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8
951
- ; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 16) to ptr), align 8
952
951
; CHECK-NEXT: call void @llvm.donothing()
953
- ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <2 x i64> [[TMP2]], i64 0
954
- ; CHECK-NEXT: [[TMP9:%.*]] = and i64 [[TMP3]], 1
955
- ; CHECK-NEXT: [[TMP5:%.*]] = or i64 [[TMP3]], [[TMP9]]
956
- ; CHECK-NEXT: [[TMP6:%.*]] = extractelement <2 x i64> [[TMP2]], i64 1
957
- ; CHECK-NEXT: [[TMP7:%.*]] = and i64 [[TMP6]], 1
958
- ; CHECK-NEXT: [[TMP8:%.*]] = or i64 [[TMP6]], [[TMP7]]
952
+ ; CHECK-NEXT: [[TMP2:%.*]] = trunc <2 x i64> [[A1:%.*]] to <2 x i1>
959
953
; CHECK-NEXT: [[A0:%.*]] = bitcast <2 x i64> [[TMP1]] to <2 x double>
960
- ; CHECK-NEXT: [[RES:%.*]] = call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> [[A0]], <2 x i64> [[A1:%.* ]])
954
+ ; CHECK-NEXT: [[RES:%.*]] = call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> [[A0]], <2 x i64> [[A1]])
961
955
; CHECK-NEXT: [[TMP4:%.*]] = bitcast <2 x double> [[RES]] to <2 x i64>
962
- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP8]], 0
963
- ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP12:%.*]], label [[TMP13:%.*]], !prof [[PROF1]]
964
- ; CHECK: 12:
956
+ ; CHECK-NEXT: [[TMP6:%.*]] = bitcast <2 x i1> [[TMP2]] to i2
957
+ ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i2 [[TMP6]], 0
958
+ ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]
959
+ ; CHECK: 7:
965
960
; CHECK-NEXT: call void @__msan_warning_noreturn()
966
961
; CHECK-NEXT: unreachable
967
- ; CHECK: 13 :
962
+ ; CHECK: 8 :
968
963
; CHECK-NEXT: [[RES1:%.*]] = call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> [[A2:%.*]], <2 x i64> [[A1]])
969
964
; CHECK-NEXT: store <2 x i64> [[TMP4]], ptr @__msan_retval_tls, align 8
970
965
; CHECK-NEXT: ret <2 x double> [[RES1]]
@@ -978,29 +973,18 @@ declare <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double>, <2 x i64>) nounwi
978
973
define <4 x double > @test_x86_avx_vpermilvar_pd_256 (<4 x double > %a0 , <4 x i64 > %a1 ) #0 {
979
974
; CHECK-LABEL: @test_x86_avx_vpermilvar_pd_256(
980
975
; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i64>, ptr @__msan_param_tls, align 8
981
- ; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 32) to ptr), align 8
982
976
; CHECK-NEXT: call void @llvm.donothing()
983
- ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <4 x i64> [[TMP2]], i64 0
984
- ; CHECK-NEXT: [[TMP15:%.*]] = and i64 [[TMP3]], 3
985
- ; CHECK-NEXT: [[TMP5:%.*]] = or i64 [[TMP3]], [[TMP15]]
986
- ; CHECK-NEXT: [[TMP6:%.*]] = extractelement <4 x i64> [[TMP2]], i64 1
987
- ; CHECK-NEXT: [[TMP7:%.*]] = and i64 [[TMP6]], 3
988
- ; CHECK-NEXT: [[TMP8:%.*]] = or i64 [[TMP6]], [[TMP7]]
989
- ; CHECK-NEXT: [[TMP9:%.*]] = extractelement <4 x i64> [[TMP2]], i64 2
990
- ; CHECK-NEXT: [[TMP10:%.*]] = and i64 [[TMP9]], 3
991
- ; CHECK-NEXT: [[TMP11:%.*]] = or i64 [[TMP9]], [[TMP10]]
992
- ; CHECK-NEXT: [[TMP12:%.*]] = extractelement <4 x i64> [[TMP2]], i64 3
993
- ; CHECK-NEXT: [[TMP13:%.*]] = and i64 [[TMP12]], 3
994
- ; CHECK-NEXT: [[TMP14:%.*]] = or i64 [[TMP12]], [[TMP13]]
977
+ ; CHECK-NEXT: [[TMP2:%.*]] = trunc <4 x i64> [[A1:%.*]] to <4 x i2>
995
978
; CHECK-NEXT: [[A0:%.*]] = bitcast <4 x i64> [[TMP1]] to <4 x double>
996
- ; CHECK-NEXT: [[RES:%.*]] = call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> [[A0]], <4 x i64> [[A1:%.* ]])
979
+ ; CHECK-NEXT: [[RES:%.*]] = call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> [[A0]], <4 x i64> [[A1]])
997
980
; CHECK-NEXT: [[TMP4:%.*]] = bitcast <4 x double> [[RES]] to <4 x i64>
998
- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP14]], 0
999
- ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP18:%.*]], label [[TMP19:%.*]], !prof [[PROF1]]
1000
- ; CHECK: 18:
981
+ ; CHECK-NEXT: [[TMP6:%.*]] = bitcast <4 x i2> [[TMP2]] to i8
982
+ ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i8 [[TMP6]], 0
983
+ ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]
984
+ ; CHECK: 7:
1001
985
; CHECK-NEXT: call void @__msan_warning_noreturn()
1002
986
; CHECK-NEXT: unreachable
1003
- ; CHECK: 19 :
987
+ ; CHECK: 8 :
1004
988
; CHECK-NEXT: [[RES1:%.*]] = call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> [[A2:%.*]], <4 x i64> [[A1]])
1005
989
; CHECK-NEXT: store <4 x i64> [[TMP4]], ptr @__msan_retval_tls, align 8
1006
990
; CHECK-NEXT: ret <4 x double> [[RES1]]
@@ -1028,29 +1012,18 @@ define <4 x double> @test_x86_avx_vpermilvar_pd_256_2(<4 x double> %a0) #0 {
1028
1012
define <4 x float > @test_x86_avx_vpermilvar_ps (<4 x float > %a0 , <4 x i32 > %a1 ) #0 {
1029
1013
; CHECK-LABEL: @test_x86_avx_vpermilvar_ps(
1030
1014
; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8
1031
- ; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i32>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 16) to ptr), align 8
1032
1015
; CHECK-NEXT: call void @llvm.donothing()
1033
- ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <4 x i32> [[TMP2]], i64 0
1034
- ; CHECK-NEXT: [[TMP15:%.*]] = and i32 [[TMP3]], 3
1035
- ; CHECK-NEXT: [[TMP5:%.*]] = or i32 [[TMP3]], [[TMP15]]
1036
- ; CHECK-NEXT: [[TMP6:%.*]] = extractelement <4 x i32> [[TMP2]], i64 1
1037
- ; CHECK-NEXT: [[TMP7:%.*]] = and i32 [[TMP6]], 3
1038
- ; CHECK-NEXT: [[TMP8:%.*]] = or i32 [[TMP6]], [[TMP7]]
1039
- ; CHECK-NEXT: [[TMP9:%.*]] = extractelement <4 x i32> [[TMP2]], i64 2
1040
- ; CHECK-NEXT: [[TMP10:%.*]] = and i32 [[TMP9]], 3
1041
- ; CHECK-NEXT: [[TMP11:%.*]] = or i32 [[TMP9]], [[TMP10]]
1042
- ; CHECK-NEXT: [[TMP12:%.*]] = extractelement <4 x i32> [[TMP2]], i64 3
1043
- ; CHECK-NEXT: [[TMP13:%.*]] = and i32 [[TMP12]], 3
1044
- ; CHECK-NEXT: [[TMP14:%.*]] = or i32 [[TMP12]], [[TMP13]]
1016
+ ; CHECK-NEXT: [[TMP2:%.*]] = trunc <4 x i32> [[A1:%.*]] to <4 x i2>
1045
1017
; CHECK-NEXT: [[A0:%.*]] = bitcast <4 x i32> [[TMP1]] to <4 x float>
1046
- ; CHECK-NEXT: [[RES:%.*]] = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> [[A0]], <4 x i32> [[A1:%.* ]])
1018
+ ; CHECK-NEXT: [[RES:%.*]] = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> [[A0]], <4 x i32> [[A1]])
1047
1019
; CHECK-NEXT: [[TMP4:%.*]] = bitcast <4 x float> [[RES]] to <4 x i32>
1048
- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i32 [[TMP14]], 0
1049
- ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP18:%.*]], label [[TMP19:%.*]], !prof [[PROF1]]
1050
- ; CHECK: 18:
1020
+ ; CHECK-NEXT: [[TMP6:%.*]] = bitcast <4 x i2> [[TMP2]] to i8
1021
+ ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i8 [[TMP6]], 0
1022
+ ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]
1023
+ ; CHECK: 7:
1051
1024
; CHECK-NEXT: call void @__msan_warning_noreturn()
1052
1025
; CHECK-NEXT: unreachable
1053
- ; CHECK: 19 :
1026
+ ; CHECK: 8 :
1054
1027
; CHECK-NEXT: [[RES1:%.*]] = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> [[A2:%.*]], <4 x i32> [[A1]])
1055
1028
; CHECK-NEXT: store <4 x i32> [[TMP4]], ptr @__msan_retval_tls, align 8
1056
1029
; CHECK-NEXT: ret <4 x float> [[RES1]]
@@ -1074,27 +1047,17 @@ define <4 x float> @test_x86_avx_vpermilvar_ps_load(<4 x float> %a0, ptr %a1) #0
1074
1047
; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 87960930222080
1075
1048
; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
1076
1049
; CHECK-NEXT: [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP7]], align 16
1077
- ; CHECK-NEXT: [[TMP8:%.*]] = extractelement <4 x i32> [[_MSLD]], i64 0
1078
- ; CHECK-NEXT: [[TMP9:%.*]] = and i32 [[TMP8]], 3
1079
- ; CHECK-NEXT: [[TMP20:%.*]] = or i32 [[TMP8]], [[TMP9]]
1080
- ; CHECK-NEXT: [[TMP11:%.*]] = extractelement <4 x i32> [[_MSLD]], i64 1
1081
- ; CHECK-NEXT: [[TMP12:%.*]] = and i32 [[TMP11]], 3
1082
- ; CHECK-NEXT: [[TMP13:%.*]] = or i32 [[TMP11]], [[TMP12]]
1083
- ; CHECK-NEXT: [[TMP14:%.*]] = extractelement <4 x i32> [[_MSLD]], i64 2
1084
- ; CHECK-NEXT: [[TMP15:%.*]] = and i32 [[TMP14]], 3
1085
- ; CHECK-NEXT: [[TMP16:%.*]] = or i32 [[TMP14]], [[TMP15]]
1086
- ; CHECK-NEXT: [[TMP17:%.*]] = extractelement <4 x i32> [[_MSLD]], i64 3
1087
- ; CHECK-NEXT: [[TMP18:%.*]] = and i32 [[TMP17]], 3
1088
- ; CHECK-NEXT: [[TMP19:%.*]] = or i32 [[TMP17]], [[TMP18]]
1050
+ ; CHECK-NEXT: [[TMP8:%.*]] = trunc <4 x i32> [[A2]] to <4 x i2>
1089
1051
; CHECK-NEXT: [[A0:%.*]] = bitcast <4 x i32> [[TMP2]] to <4 x float>
1090
1052
; CHECK-NEXT: [[RES:%.*]] = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> [[A0]], <4 x i32> [[A2]])
1091
1053
; CHECK-NEXT: [[TMP10:%.*]] = bitcast <4 x float> [[RES]] to <4 x i32>
1092
- ; CHECK-NEXT: [[_MSCMP1:%.*]] = icmp ne i32 [[TMP19]], 0
1093
- ; CHECK-NEXT: br i1 [[_MSCMP1]], label [[TMP23:%.*]], label [[TMP24:%.*]], !prof [[PROF1]]
1094
- ; CHECK: 23:
1054
+ ; CHECK-NEXT: [[TMP12:%.*]] = bitcast <4 x i2> [[TMP8]] to i8
1055
+ ; CHECK-NEXT: [[_MSCMP1:%.*]] = icmp ne i8 [[TMP12]], 0
1056
+ ; CHECK-NEXT: br i1 [[_MSCMP1]], label [[TMP13:%.*]], label [[TMP14:%.*]], !prof [[PROF1]]
1057
+ ; CHECK: 13:
1095
1058
; CHECK-NEXT: call void @__msan_warning_noreturn()
1096
1059
; CHECK-NEXT: unreachable
1097
- ; CHECK: 24 :
1060
+ ; CHECK: 14 :
1098
1061
; CHECK-NEXT: [[RES1:%.*]] = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> [[A3:%.*]], <4 x i32> [[A2]])
1099
1062
; CHECK-NEXT: store <4 x i32> [[TMP10]], ptr @__msan_retval_tls, align 8
1100
1063
; CHECK-NEXT: ret <4 x float> [[RES1]]
@@ -1109,41 +1072,18 @@ declare <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float>, <4 x i32>) nounwind
1109
1072
define <8 x float > @test_x86_avx_vpermilvar_ps_256 (<8 x float > %a0 , <8 x i32 > %a1 ) #0 {
1110
1073
; CHECK-LABEL: @test_x86_avx_vpermilvar_ps_256(
1111
1074
; CHECK-NEXT: [[TMP1:%.*]] = load <8 x i32>, ptr @__msan_param_tls, align 8
1112
- ; CHECK-NEXT: [[TMP2:%.*]] = load <8 x i32>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 32) to ptr), align 8
1113
1075
; CHECK-NEXT: call void @llvm.donothing()
1114
- ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <8 x i32> [[TMP2]], i64 0
1115
- ; CHECK-NEXT: [[TMP27:%.*]] = and i32 [[TMP3]], 7
1116
- ; CHECK-NEXT: [[TMP5:%.*]] = or i32 [[TMP3]], [[TMP27]]
1117
- ; CHECK-NEXT: [[TMP6:%.*]] = extractelement <8 x i32> [[TMP2]], i64 1
1118
- ; CHECK-NEXT: [[TMP7:%.*]] = and i32 [[TMP6]], 7
1119
- ; CHECK-NEXT: [[TMP8:%.*]] = or i32 [[TMP6]], [[TMP7]]
1120
- ; CHECK-NEXT: [[TMP9:%.*]] = extractelement <8 x i32> [[TMP2]], i64 2
1121
- ; CHECK-NEXT: [[TMP10:%.*]] = and i32 [[TMP9]], 7
1122
- ; CHECK-NEXT: [[TMP11:%.*]] = or i32 [[TMP9]], [[TMP10]]
1123
- ; CHECK-NEXT: [[TMP12:%.*]] = extractelement <8 x i32> [[TMP2]], i64 3
1124
- ; CHECK-NEXT: [[TMP13:%.*]] = and i32 [[TMP12]], 7
1125
- ; CHECK-NEXT: [[TMP14:%.*]] = or i32 [[TMP12]], [[TMP13]]
1126
- ; CHECK-NEXT: [[TMP15:%.*]] = extractelement <8 x i32> [[TMP2]], i64 4
1127
- ; CHECK-NEXT: [[TMP16:%.*]] = and i32 [[TMP15]], 7
1128
- ; CHECK-NEXT: [[TMP17:%.*]] = or i32 [[TMP15]], [[TMP16]]
1129
- ; CHECK-NEXT: [[TMP18:%.*]] = extractelement <8 x i32> [[TMP2]], i64 5
1130
- ; CHECK-NEXT: [[TMP19:%.*]] = and i32 [[TMP18]], 7
1131
- ; CHECK-NEXT: [[TMP20:%.*]] = or i32 [[TMP18]], [[TMP19]]
1132
- ; CHECK-NEXT: [[TMP21:%.*]] = extractelement <8 x i32> [[TMP2]], i64 6
1133
- ; CHECK-NEXT: [[TMP22:%.*]] = and i32 [[TMP21]], 7
1134
- ; CHECK-NEXT: [[TMP23:%.*]] = or i32 [[TMP21]], [[TMP22]]
1135
- ; CHECK-NEXT: [[TMP24:%.*]] = extractelement <8 x i32> [[TMP2]], i64 7
1136
- ; CHECK-NEXT: [[TMP25:%.*]] = and i32 [[TMP24]], 7
1137
- ; CHECK-NEXT: [[TMP26:%.*]] = or i32 [[TMP24]], [[TMP25]]
1076
+ ; CHECK-NEXT: [[TMP2:%.*]] = trunc <8 x i32> [[A1:%.*]] to <8 x i3>
1138
1077
; CHECK-NEXT: [[A0:%.*]] = bitcast <8 x i32> [[TMP1]] to <8 x float>
1139
- ; CHECK-NEXT: [[RES:%.*]] = call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> [[A0]], <8 x i32> [[A1:%.* ]])
1078
+ ; CHECK-NEXT: [[RES:%.*]] = call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> [[A0]], <8 x i32> [[A1]])
1140
1079
; CHECK-NEXT: [[TMP4:%.*]] = bitcast <8 x float> [[RES]] to <8 x i32>
1141
- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i32 [[TMP26]], 0
1142
- ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP30:%.*]], label [[TMP31:%.*]], !prof [[PROF1]]
1143
- ; CHECK: 30:
1080
+ ; CHECK-NEXT: [[TMP6:%.*]] = bitcast <8 x i3> [[TMP2]] to i24
1081
+ ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i24 [[TMP6]], 0
1082
+ ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]
1083
+ ; CHECK: 7:
1144
1084
; CHECK-NEXT: call void @__msan_warning_noreturn()
1145
1085
; CHECK-NEXT: unreachable
1146
- ; CHECK: 31 :
1086
+ ; CHECK: 8 :
1147
1087
; CHECK-NEXT: [[RES1:%.*]] = call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> [[A2:%.*]], <8 x i32> [[A1]])
1148
1088
; CHECK-NEXT: store <8 x i32> [[TMP4]], ptr @__msan_retval_tls, align 8
1149
1089
; CHECK-NEXT: ret <8 x float> [[RES1]]
0 commit comments