4
4
; Handled strictly:
5
5
; - i32 @llvm.x86.avx.movmsk.pd.256(<4 x double> %a0)
6
6
; - i32 @llvm.x86.avx.movmsk.ps.256(<8 x float> %a0)
7
- ; - <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> %a0, <2 x i64> %a1)
8
- ; - <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %a0, <4 x i64> %a1)
9
- ; - <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %a0, <4 x i64> <i64 2, i64 0, i64 0, i64 2>)
10
- ; - <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %a0, <4 x i32> %a1)
11
- ; - <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %a0, <4 x i32> %a2)
12
- ; - <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %a0, <8 x i32> %a1)
13
7
; - void @llvm.x86.avx.vzeroall()
14
8
; - void @llvm.x86.avx.vzeroupper()
15
9
@@ -956,19 +950,19 @@ define <2 x double> @test_x86_avx_vpermilvar_pd(<2 x double> %a0, <2 x i64> %a1)
956
950
; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8
957
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
958
952
; CHECK-NEXT: call void @llvm.donothing()
959
- ; CHECK-NEXT: [[TMP3 :%.*]] = bitcast <2 x i64> [[TMP1]] to i128
960
- ; CHECK-NEXT: [[_MSCMP :%.*]] = icmp ne i128 [[TMP3 ]], 0
961
- ; CHECK-NEXT: [[TMP4:%.*]] = bitcast <2 x i64 > [[TMP2 ]] to i128
962
- ; CHECK-NEXT: [[_MSCMP1 :%.*]] = icmp ne i128 [[TMP4]], 0
963
- ; CHECK-NEXT: [[_MSOR :%.*]] = or i1 [[_MSCMP ]], [[_MSCMP1]]
964
- ; CHECK-NEXT: br i1 [[_MSOR ]], label [[TMP5 :%.*]], label [[TMP6 :%.*]], !prof [[PROF1]]
965
- ; CHECK: 5 :
953
+ ; CHECK-NEXT: [[A0 :%.*]] = bitcast <2 x i64> [[TMP1]] to <2 x double>
954
+ ; CHECK-NEXT: [[RES :%.*]] = call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> [[A0 ]], <2 x i64> [[A1:%.*]])
955
+ ; CHECK-NEXT: [[TMP4:%.*]] = bitcast <2 x double > [[RES ]] to <2 x i64>
956
+ ; CHECK-NEXT: [[TMP6 :%.*]] = bitcast <2 x i64> [[TMP2]] to i128
957
+ ; CHECK-NEXT: [[_MSCMP :%.*]] = icmp ne i128 [[TMP6 ]], 0
958
+ ; CHECK-NEXT: br i1 [[_MSCMP ]], label [[TMP7 :%.*]], label [[TMP8 :%.*]], !prof [[PROF1]]
959
+ ; CHECK: 7 :
966
960
; CHECK-NEXT: call void @__msan_warning_noreturn()
967
961
; CHECK-NEXT: unreachable
968
- ; CHECK: 6 :
969
- ; CHECK-NEXT: [[RES :%.*]] = call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> [[A0 :%.*]], <2 x i64> [[A1:%.* ]])
970
- ; CHECK-NEXT: store <2 x i64> zeroinitializer , ptr @__msan_retval_tls, align 8
971
- ; CHECK-NEXT: ret <2 x double> [[RES ]]
962
+ ; CHECK: 8 :
963
+ ; CHECK-NEXT: [[RES1 :%.*]] = call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> [[A2 :%.*]], <2 x i64> [[A1]])
964
+ ; CHECK-NEXT: store <2 x i64> [[TMP4]] , ptr @__msan_retval_tls, align 8
965
+ ; CHECK-NEXT: ret <2 x double> [[RES1 ]]
972
966
;
973
967
%res = call <2 x double > @llvm.x86.avx.vpermilvar.pd (<2 x double > %a0 , <2 x i64 > %a1 ) ; <<2 x double>> [#uses=1]
974
968
ret <2 x double > %res
@@ -981,19 +975,19 @@ define <4 x double> @test_x86_avx_vpermilvar_pd_256(<4 x double> %a0, <4 x i64>
981
975
; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i64>, ptr @__msan_param_tls, align 8
982
976
; 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
983
977
; CHECK-NEXT: call void @llvm.donothing()
984
- ; CHECK-NEXT: [[TMP3 :%.*]] = bitcast <4 x i64> [[TMP1]] to i256
985
- ; CHECK-NEXT: [[_MSCMP :%.*]] = icmp ne i256 [[TMP3 ]], 0
986
- ; CHECK-NEXT: [[TMP4:%.*]] = bitcast <4 x i64 > [[TMP2 ]] to i256
987
- ; CHECK-NEXT: [[_MSCMP1 :%.*]] = icmp ne i256 [[TMP4]], 0
988
- ; CHECK-NEXT: [[_MSOR :%.*]] = or i1 [[_MSCMP ]], [[_MSCMP1]]
989
- ; CHECK-NEXT: br i1 [[_MSOR ]], label [[TMP5 :%.*]], label [[TMP6 :%.*]], !prof [[PROF1]]
990
- ; CHECK: 5 :
978
+ ; CHECK-NEXT: [[A0 :%.*]] = bitcast <4 x i64> [[TMP1]] to <4 x double>
979
+ ; CHECK-NEXT: [[RES :%.*]] = call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> [[A0 ]], <4 x i64> [[A1:%.*]])
980
+ ; CHECK-NEXT: [[TMP4:%.*]] = bitcast <4 x double > [[RES ]] to <4 x i64>
981
+ ; CHECK-NEXT: [[TMP6 :%.*]] = bitcast <4 x i64> [[TMP2]] to i256
982
+ ; CHECK-NEXT: [[_MSCMP :%.*]] = icmp ne i256 [[TMP6 ]], 0
983
+ ; CHECK-NEXT: br i1 [[_MSCMP ]], label [[TMP7 :%.*]], label [[TMP8 :%.*]], !prof [[PROF1]]
984
+ ; CHECK: 7 :
991
985
; CHECK-NEXT: call void @__msan_warning_noreturn()
992
986
; CHECK-NEXT: unreachable
993
- ; CHECK: 6 :
994
- ; CHECK-NEXT: [[RES :%.*]] = call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> [[A0 :%.*]], <4 x i64> [[A1:%.* ]])
995
- ; CHECK-NEXT: store <4 x i64> zeroinitializer , ptr @__msan_retval_tls, align 8
996
- ; CHECK-NEXT: ret <4 x double> [[RES ]]
987
+ ; CHECK: 8 :
988
+ ; CHECK-NEXT: [[RES1 :%.*]] = call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> [[A2 :%.*]], <4 x i64> [[A1]])
989
+ ; CHECK-NEXT: store <4 x i64> [[TMP4]] , ptr @__msan_retval_tls, align 8
990
+ ; CHECK-NEXT: ret <4 x double> [[RES1 ]]
997
991
;
998
992
%res = call <4 x double > @llvm.x86.avx.vpermilvar.pd.256 (<4 x double > %a0 , <4 x i64 > %a1 ) ; <<4 x double>> [#uses=1]
999
993
ret <4 x double > %res
@@ -1004,16 +998,12 @@ define <4 x double> @test_x86_avx_vpermilvar_pd_256_2(<4 x double> %a0) #0 {
1004
998
; CHECK-LABEL: @test_x86_avx_vpermilvar_pd_256_2(
1005
999
; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i64>, ptr @__msan_param_tls, align 8
1006
1000
; CHECK-NEXT: call void @llvm.donothing()
1007
- ; CHECK-NEXT: [[TMP2:%.*]] = bitcast <4 x i64> [[TMP1]] to i256
1008
- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i256 [[TMP2]], 0
1009
- ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
1010
- ; CHECK: 3:
1011
- ; CHECK-NEXT: call void @__msan_warning_noreturn()
1012
- ; CHECK-NEXT: unreachable
1013
- ; CHECK: 4:
1014
- ; CHECK-NEXT: [[RES:%.*]] = call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> [[A0:%.*]], <4 x i64> <i64 2, i64 0, i64 0, i64 2>)
1015
- ; CHECK-NEXT: store <4 x i64> zeroinitializer, ptr @__msan_retval_tls, align 8
1016
- ; CHECK-NEXT: ret <4 x double> [[RES]]
1001
+ ; CHECK-NEXT: [[A0:%.*]] = bitcast <4 x i64> [[TMP1]] to <4 x double>
1002
+ ; CHECK-NEXT: [[RES:%.*]] = call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> [[A0]], <4 x i64> <i64 2, i64 0, i64 0, i64 2>)
1003
+ ; CHECK-NEXT: [[TMP4:%.*]] = bitcast <4 x double> [[RES]] to <4 x i64>
1004
+ ; CHECK-NEXT: [[RES1:%.*]] = call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> [[A1:%.*]], <4 x i64> <i64 2, i64 0, i64 0, i64 2>)
1005
+ ; CHECK-NEXT: store <4 x i64> [[TMP4]], ptr @__msan_retval_tls, align 8
1006
+ ; CHECK-NEXT: ret <4 x double> [[RES1]]
1017
1007
;
1018
1008
%res = call <4 x double > @llvm.x86.avx.vpermilvar.pd.256 (<4 x double > %a0 , <4 x i64 > <i64 2 , i64 0 , i64 0 , i64 2 >) ; <<4 x double>> [#uses=1]
1019
1009
ret <4 x double > %res
@@ -1024,19 +1014,19 @@ define <4 x float> @test_x86_avx_vpermilvar_ps(<4 x float> %a0, <4 x i32> %a1) #
1024
1014
; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8
1025
1015
; 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
1026
1016
; CHECK-NEXT: call void @llvm.donothing()
1027
- ; CHECK-NEXT: [[TMP3 :%.*]] = bitcast <4 x i32> [[TMP1]] to i128
1028
- ; CHECK-NEXT: [[_MSCMP :%.*]] = icmp ne i128 [[TMP3 ]], 0
1029
- ; CHECK-NEXT: [[TMP4:%.*]] = bitcast <4 x i32 > [[TMP2 ]] to i128
1030
- ; CHECK-NEXT: [[_MSCMP1 :%.*]] = icmp ne i128 [[TMP4]], 0
1031
- ; CHECK-NEXT: [[_MSOR :%.*]] = or i1 [[_MSCMP ]], [[_MSCMP1]]
1032
- ; CHECK-NEXT: br i1 [[_MSOR ]], label [[TMP5 :%.*]], label [[TMP6 :%.*]], !prof [[PROF1]]
1033
- ; CHECK: 5 :
1017
+ ; CHECK-NEXT: [[A0 :%.*]] = bitcast <4 x i32> [[TMP1]] to <4 x float>
1018
+ ; CHECK-NEXT: [[RES :%.*]] = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> [[A0 ]], <4 x i32> [[A1:%.*]])
1019
+ ; CHECK-NEXT: [[TMP4:%.*]] = bitcast <4 x float > [[RES ]] to <4 x i32>
1020
+ ; CHECK-NEXT: [[TMP6 :%.*]] = bitcast <4 x i32> [[TMP2]] to i128
1021
+ ; CHECK-NEXT: [[_MSCMP :%.*]] = icmp ne i128 [[TMP6 ]], 0
1022
+ ; CHECK-NEXT: br i1 [[_MSCMP ]], label [[TMP7 :%.*]], label [[TMP8 :%.*]], !prof [[PROF1]]
1023
+ ; CHECK: 7 :
1034
1024
; CHECK-NEXT: call void @__msan_warning_noreturn()
1035
1025
; CHECK-NEXT: unreachable
1036
- ; CHECK: 6 :
1037
- ; CHECK-NEXT: [[RES :%.*]] = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> [[A0 :%.*]], <4 x i32> [[A1:%.* ]])
1038
- ; CHECK-NEXT: store <4 x i32> zeroinitializer , ptr @__msan_retval_tls, align 8
1039
- ; CHECK-NEXT: ret <4 x float> [[RES ]]
1026
+ ; CHECK: 8 :
1027
+ ; CHECK-NEXT: [[RES1 :%.*]] = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> [[A2 :%.*]], <4 x i32> [[A1]])
1028
+ ; CHECK-NEXT: store <4 x i32> [[TMP4]] , ptr @__msan_retval_tls, align 8
1029
+ ; CHECK-NEXT: ret <4 x float> [[RES1 ]]
1040
1030
;
1041
1031
%res = call <4 x float > @llvm.x86.avx.vpermilvar.ps (<4 x float > %a0 , <4 x i32 > %a1 ) ; <<4 x float>> [#uses=1]
1042
1032
ret <4 x float > %res
@@ -1057,19 +1047,19 @@ define <4 x float> @test_x86_avx_vpermilvar_ps_load(<4 x float> %a0, ptr %a1) #0
1057
1047
; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 87960930222080
1058
1048
; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
1059
1049
; CHECK-NEXT: [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP7]], align 16
1060
- ; CHECK-NEXT: [[TMP8 :%.*]] = bitcast <4 x i32> [[TMP2]] to i128
1061
- ; CHECK-NEXT: [[_MSCMP1 :%.*]] = icmp ne i128 [[TMP8 ]], 0
1062
- ; CHECK-NEXT: [[TMP9 :%.*]] = bitcast <4 x i32 > [[_MSLD ]] to i128
1063
- ; CHECK-NEXT: [[_MSCMP2 :%.*]] = icmp ne i128 [[TMP9]], 0
1064
- ; CHECK-NEXT: [[_MSOR :%.*]] = or i1 [[_MSCMP1 ]], [[_MSCMP2]]
1065
- ; CHECK-NEXT: br i1 [[_MSOR ]], label [[TMP10 :%.*]], label [[TMP11 :%.*]], !prof [[PROF1]]
1066
- ; CHECK: 10 :
1050
+ ; CHECK-NEXT: [[A0 :%.*]] = bitcast <4 x i32> [[TMP2]] to <4 x float>
1051
+ ; CHECK-NEXT: [[RES :%.*]] = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> [[A0 ]], <4 x i32> [[A2]])
1052
+ ; CHECK-NEXT: [[TMP10 :%.*]] = bitcast <4 x float > [[RES ]] to <4 x i32>
1053
+ ; CHECK-NEXT: [[TMP11 :%.*]] = bitcast <4 x i32> [[_MSLD]] to i128
1054
+ ; CHECK-NEXT: [[_MSCMP1 :%.*]] = icmp ne i128 [[TMP11 ]], 0
1055
+ ; CHECK-NEXT: br i1 [[_MSCMP1 ]], label [[TMP12 :%.*]], label [[TMP13 :%.*]], !prof [[PROF1]]
1056
+ ; CHECK: 12 :
1067
1057
; CHECK-NEXT: call void @__msan_warning_noreturn()
1068
1058
; CHECK-NEXT: unreachable
1069
- ; CHECK: 11 :
1070
- ; CHECK-NEXT: [[RES :%.*]] = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> [[A0 :%.*]], <4 x i32> [[A2]])
1071
- ; CHECK-NEXT: store <4 x i32> zeroinitializer , ptr @__msan_retval_tls, align 8
1072
- ; CHECK-NEXT: ret <4 x float> [[RES ]]
1059
+ ; CHECK: 13 :
1060
+ ; CHECK-NEXT: [[RES1 :%.*]] = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> [[A3 :%.*]], <4 x i32> [[A2]])
1061
+ ; CHECK-NEXT: store <4 x i32> [[TMP10]] , ptr @__msan_retval_tls, align 8
1062
+ ; CHECK-NEXT: ret <4 x float> [[RES1 ]]
1073
1063
;
1074
1064
%a2 = load <4 x i32 >, ptr %a1
1075
1065
%res = call <4 x float > @llvm.x86.avx.vpermilvar.ps (<4 x float > %a0 , <4 x i32 > %a2 ) ; <<4 x float>> [#uses=1]
@@ -1083,19 +1073,19 @@ define <8 x float> @test_x86_avx_vpermilvar_ps_256(<8 x float> %a0, <8 x i32> %a
1083
1073
; CHECK-NEXT: [[TMP1:%.*]] = load <8 x i32>, ptr @__msan_param_tls, align 8
1084
1074
; 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
1085
1075
; CHECK-NEXT: call void @llvm.donothing()
1086
- ; CHECK-NEXT: [[TMP3 :%.*]] = bitcast <8 x i32> [[TMP1]] to i256
1087
- ; CHECK-NEXT: [[_MSCMP :%.*]] = icmp ne i256 [[TMP3 ]], 0
1088
- ; CHECK-NEXT: [[TMP4:%.*]] = bitcast <8 x i32 > [[TMP2 ]] to i256
1089
- ; CHECK-NEXT: [[_MSCMP1 :%.*]] = icmp ne i256 [[TMP4]], 0
1090
- ; CHECK-NEXT: [[_MSOR :%.*]] = or i1 [[_MSCMP ]], [[_MSCMP1]]
1091
- ; CHECK-NEXT: br i1 [[_MSOR ]], label [[TMP5 :%.*]], label [[TMP6 :%.*]], !prof [[PROF1]]
1092
- ; CHECK: 5 :
1076
+ ; CHECK-NEXT: [[A0 :%.*]] = bitcast <8 x i32> [[TMP1]] to <8 x float>
1077
+ ; CHECK-NEXT: [[RES :%.*]] = call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> [[A0 ]], <8 x i32> [[A1:%.*]])
1078
+ ; CHECK-NEXT: [[TMP4:%.*]] = bitcast <8 x float > [[RES ]] to <8 x i32>
1079
+ ; CHECK-NEXT: [[TMP6 :%.*]] = bitcast <8 x i32> [[TMP2]] to i256
1080
+ ; CHECK-NEXT: [[_MSCMP :%.*]] = icmp ne i256 [[TMP6 ]], 0
1081
+ ; CHECK-NEXT: br i1 [[_MSCMP ]], label [[TMP7 :%.*]], label [[TMP8 :%.*]], !prof [[PROF1]]
1082
+ ; CHECK: 7 :
1093
1083
; CHECK-NEXT: call void @__msan_warning_noreturn()
1094
1084
; CHECK-NEXT: unreachable
1095
- ; CHECK: 6 :
1096
- ; CHECK-NEXT: [[RES :%.*]] = call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> [[A0 :%.*]], <8 x i32> [[A1:%.* ]])
1097
- ; CHECK-NEXT: store <8 x i32> zeroinitializer , ptr @__msan_retval_tls, align 8
1098
- ; CHECK-NEXT: ret <8 x float> [[RES ]]
1085
+ ; CHECK: 8 :
1086
+ ; CHECK-NEXT: [[RES1 :%.*]] = call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> [[A2 :%.*]], <8 x i32> [[A1]])
1087
+ ; CHECK-NEXT: store <8 x i32> [[TMP4]] , ptr @__msan_retval_tls, align 8
1088
+ ; CHECK-NEXT: ret <8 x float> [[RES1 ]]
1099
1089
;
1100
1090
%res = call <8 x float > @llvm.x86.avx.vpermilvar.ps.256 (<8 x float > %a0 , <8 x i32 > %a1 ) ; <<8 x float>> [#uses=1]
1101
1091
ret <8 x float > %res
0 commit comments