@@ -324,6 +324,56 @@ for.end: ; preds = %for.body, %entry
324
324
325
325
declare double @llvm.exp2.f64 (double )
326
326
327
+ define void @ldexp_f32i32 (i32 %n , ptr %y , ptr %x , i32 %exp ) {
328
+ ; CHECK-LABEL: @ldexp_f32i32(
329
+ ; CHECK: llvm.ldexp.v4f32.v4i32
330
+ ; CHECK: ret void
331
+ ;
332
+ entry:
333
+ br label %for.body
334
+
335
+ for.body: ; preds = %entry, %for.body
336
+ %iv = phi i32 [ 0 , %entry ], [ %iv.next , %for.body ]
337
+ %arrayidx = getelementptr inbounds float , ptr %y , i32 %iv
338
+ %0 = load float , ptr %arrayidx , align 4
339
+ %call = tail call float @llvm.ldexp.f32.i32 (float %0 , i32 %exp )
340
+ %arrayidx2 = getelementptr inbounds float , ptr %x , i32 %iv
341
+ store float %call , ptr %arrayidx2 , align 4
342
+ %iv.next = add i32 %iv , 1
343
+ %exitcond = icmp eq i32 %iv.next , %n
344
+ br i1 %exitcond , label %for.end , label %for.body
345
+
346
+ for.end: ; preds = %for.body, %entry
347
+ ret void
348
+ }
349
+
350
+ declare float @llvm.ldexp.f32.i32 (float , i32 )
351
+
352
+ define void @ldexp_f64i32 (i32 %n , ptr %y , ptr %x , i32 %exp ) {
353
+ ; CHECK-LABEL: @ldexp_f64i32(
354
+ ; CHECK: llvm.ldexp.v4f64.v4i32
355
+ ; CHECK: ret void
356
+ ;
357
+ entry:
358
+ br label %for.body
359
+
360
+ for.body: ; preds = %entry, %for.body
361
+ %iv = phi i32 [ 0 , %entry ], [ %iv.next , %for.body ]
362
+ %arrayidx = getelementptr inbounds double , ptr %y , i32 %iv
363
+ %0 = load double , ptr %arrayidx , align 8
364
+ %call = tail call double @llvm.ldexp.f64.i32 (double %0 , i32 %exp )
365
+ %arrayidx2 = getelementptr inbounds double , ptr %x , i32 %iv
366
+ store double %call , ptr %arrayidx2 , align 8
367
+ %iv.next = add i32 %iv , 1
368
+ %exitcond = icmp eq i32 %iv.next , %n
369
+ br i1 %exitcond , label %for.end , label %for.body
370
+
371
+ for.end: ; preds = %for.body, %entry
372
+ ret void
373
+ }
374
+
375
+ declare double @llvm.ldexp.f64.i32 (double , i32 )
376
+
327
377
define void @log_f32 (i32 %n , ptr %y , ptr %x ) {
328
378
; CHECK-LABEL: @log_f32(
329
379
; CHECK: llvm.log.v4f32
@@ -976,6 +1026,157 @@ for.end: ; preds = %for.body, %entry
976
1026
977
1027
declare double @llvm.roundeven.f64 (double )
978
1028
1029
+
1030
+ define void @lround_i32f32 (i32 %n , ptr %y , ptr %x ) {
1031
+ ; CHECK-LABEL: @lround_i32f32(
1032
+ ; CHECK: llvm.lround.v4i32.v4f32
1033
+ ; CHECK: ret void
1034
+ ;
1035
+ entry:
1036
+ br label %for.body
1037
+
1038
+ for.body: ; preds = %entry, %for.body
1039
+ %iv = phi i32 [ 0 , %entry ], [ %iv.next , %for.body ]
1040
+ %arrayidx = getelementptr inbounds float , ptr %y , i32 %iv
1041
+ %0 = load float , ptr %arrayidx , align 4
1042
+ %call = tail call i32 @llvm.lround.i32.f32 (float %0 )
1043
+ %arrayidx2 = getelementptr inbounds i32 , ptr %x , i32 %iv
1044
+ store i32 %call , ptr %arrayidx2 , align 4
1045
+ %iv.next = add i32 %iv , 1
1046
+ %exitcond = icmp eq i32 %iv.next , %n
1047
+ br i1 %exitcond , label %for.end , label %for.body
1048
+
1049
+ for.end: ; preds = %for.body, %entry
1050
+ ret void
1051
+ }
1052
+
1053
+ declare i32 @llvm.lround.i32.f32 (float )
1054
+
1055
+ define void @lround_i32f64 (i32 %n , ptr %y , ptr %x ) {
1056
+ ; CHECK-LABEL: @lround_i32f64(
1057
+ ; CHECK: llvm.lround.v4i32.v4f64
1058
+ ; CHECK: ret void
1059
+ ;
1060
+ entry:
1061
+ br label %for.body
1062
+
1063
+ for.body: ; preds = %entry, %for.body
1064
+ %iv = phi i32 [ 0 , %entry ], [ %iv.next , %for.body ]
1065
+ %arrayidx = getelementptr inbounds double , ptr %y , i32 %iv
1066
+ %0 = load double , ptr %arrayidx , align 8
1067
+ %call = tail call i32 @llvm.lround.i32.f64 (double %0 )
1068
+ %arrayidx2 = getelementptr inbounds i32 , ptr %x , i32 %iv
1069
+ store i32 %call , ptr %arrayidx2 , align 8
1070
+ %iv.next = add i32 %iv , 1
1071
+ %exitcond = icmp eq i32 %iv.next , %n
1072
+ br i1 %exitcond , label %for.end , label %for.body
1073
+
1074
+ for.end: ; preds = %for.body, %entry
1075
+ ret void
1076
+ }
1077
+
1078
+ declare i32 @llvm.lround.i32.f64 (double )
1079
+
1080
+ define void @lround_i64f32 (i32 %n , ptr %y , ptr %x ) {
1081
+ ; CHECK-LABEL: @lround_i64f32(
1082
+ ; CHECK: llvm.lround.v4i64.v4f32
1083
+ ; CHECK: ret void
1084
+ ;
1085
+ entry:
1086
+ br label %for.body
1087
+
1088
+ for.body: ; preds = %entry, %for.body
1089
+ %iv = phi i32 [ 0 , %entry ], [ %iv.next , %for.body ]
1090
+ %arrayidx = getelementptr inbounds float , ptr %y , i32 %iv
1091
+ %0 = load float , ptr %arrayidx , align 4
1092
+ %call = tail call i64 @llvm.lround.i64.f32 (float %0 )
1093
+ %arrayidx2 = getelementptr inbounds i64 , ptr %x , i32 %iv
1094
+ store i64 %call , ptr %arrayidx2 , align 4
1095
+ %iv.next = add i32 %iv , 1
1096
+ %exitcond = icmp eq i32 %iv.next , %n
1097
+ br i1 %exitcond , label %for.end , label %for.body
1098
+
1099
+ for.end: ; preds = %for.body, %entry
1100
+ ret void
1101
+ }
1102
+
1103
+ declare i64 @llvm.lround.i64.f32 (float )
1104
+
1105
+ define void @lround_i64f64 (i32 %n , ptr %y , ptr %x ) {
1106
+ ; CHECK-LABEL: @lround_i64f64(
1107
+ ; CHECK: llvm.lround.v4i64.v4f64
1108
+ ; CHECK: ret void
1109
+ ;
1110
+ entry:
1111
+ br label %for.body
1112
+
1113
+ for.body: ; preds = %entry, %for.body
1114
+ %iv = phi i32 [ 0 , %entry ], [ %iv.next , %for.body ]
1115
+ %arrayidx = getelementptr inbounds double , ptr %y , i32 %iv
1116
+ %0 = load double , ptr %arrayidx , align 8
1117
+ %call = tail call i64 @llvm.lround.i64.f64 (double %0 )
1118
+ %arrayidx2 = getelementptr inbounds i64 , ptr %x , i32 %iv
1119
+ store i64 %call , ptr %arrayidx2 , align 8
1120
+ %iv.next = add i32 %iv , 1
1121
+ %exitcond = icmp eq i32 %iv.next , %n
1122
+ br i1 %exitcond , label %for.end , label %for.body
1123
+
1124
+ for.end: ; preds = %for.body, %entry
1125
+ ret void
1126
+ }
1127
+
1128
+ declare i64 @llvm.lround.i64.f64 (double )
1129
+
1130
+ define void @llround_i64f32 (i32 %n , ptr %y , ptr %x ) {
1131
+ ; CHECK-LABEL: @llround_i64f32(
1132
+ ; CHECK: llvm.llround.v4i64.v4f32
1133
+ ; CHECK: ret void
1134
+ ;
1135
+ entry:
1136
+ br label %for.body
1137
+
1138
+ for.body: ; preds = %entry, %for.body
1139
+ %iv = phi i32 [ 0 , %entry ], [ %iv.next , %for.body ]
1140
+ %arrayidx = getelementptr inbounds float , ptr %y , i32 %iv
1141
+ %0 = load float , ptr %arrayidx , align 4
1142
+ %call = tail call i64 @llvm.llround.i64.f32 (float %0 )
1143
+ %arrayidx2 = getelementptr inbounds i64 , ptr %x , i32 %iv
1144
+ store i64 %call , ptr %arrayidx2 , align 4
1145
+ %iv.next = add i32 %iv , 1
1146
+ %exitcond = icmp eq i32 %iv.next , %n
1147
+ br i1 %exitcond , label %for.end , label %for.body
1148
+
1149
+ for.end: ; preds = %for.body, %entry
1150
+ ret void
1151
+ }
1152
+
1153
+ declare i64 @llvm.llround.i64.f32 (float )
1154
+
1155
+ define void @llround_i64f64 (i32 %n , ptr %y , ptr %x ) {
1156
+ ; CHECK-LABEL: @llround_i64f64(
1157
+ ; CHECK: llvm.llround.v4i64.v4f64
1158
+ ; CHECK: ret void
1159
+ ;
1160
+ entry:
1161
+ br label %for.body
1162
+
1163
+ for.body: ; preds = %entry, %for.body
1164
+ %iv = phi i32 [ 0 , %entry ], [ %iv.next , %for.body ]
1165
+ %arrayidx = getelementptr inbounds double , ptr %y , i32 %iv
1166
+ %0 = load double , ptr %arrayidx , align 8
1167
+ %call = tail call i64 @llvm.llround.i64.f64 (double %0 )
1168
+ %arrayidx2 = getelementptr inbounds i64 , ptr %x , i32 %iv
1169
+ store i64 %call , ptr %arrayidx2 , align 8
1170
+ %iv.next = add i32 %iv , 1
1171
+ %exitcond = icmp eq i32 %iv.next , %n
1172
+ br i1 %exitcond , label %for.end , label %for.body
1173
+
1174
+ for.end: ; preds = %for.body, %entry
1175
+ ret void
1176
+ }
1177
+
1178
+ declare i64 @llvm.llround.i64.f64 (double )
1179
+
979
1180
define void @fma_f32 (i32 %n , ptr %y , ptr %x , ptr %z , ptr %w ) {
980
1181
; CHECK-LABEL: @fma_f32(
981
1182
; CHECK: llvm.fma.v4f32
0 commit comments