brintos

brintos / llvm-project-archived public Read only

0
0
Text · 24.0 KiB · 91cd3dd Raw
606 lines · plain
1; RUN: opt -mattr=+simd128 -passes=loop-vectorize %s | llc -mtriple=wasm32 -mattr=+simd128 -verify-machineinstrs -o - | FileCheck %s2; RUN: opt -mattr=+simd128 -passes=loop-vectorize -vectorizer-maximize-bandwidth %s | llc -mtriple=wasm32 -mattr=+simd128 -verify-machineinstrs -o - | FileCheck %s --check-prefix=MAX-BANDWIDTH3; RUN: opt -mattr=+simd128,+relaxed-simd -passes=loop-vectorize -vectorizer-maximize-bandwidth %s | llc -mtriple=wasm32 -mattr=+simd128,+relaxed-simd -verify-machineinstrs -o - | FileCheck %s --check-prefix=RELAXED-MAX-BANDWIDTH4 5target triple = "wasm32"6 7define hidden i32 @i32_mac_s8(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b, i32 noundef %N) {8; CHECK-LABEL: i32_mac_s8:9; CHECK:    v128.load32_zero 0:p2align=010; CHECK:    i16x8.extend_low_i8x16_s11; CHECK:    v128.load32_zero 0:p2align=012; CHECK:    i16x8.extend_low_i8x16_s13; CHECK:    i32x4.extmul_low_i16x8_s14; CHECK:    i32x4.add15 16; MAX-BANDWIDTH: v128.load17; MAX-BANDWIDTH: v128.load18; MAX-BANDWIDTH: i16x8.extmul_low_i8x16_s19; MAX-BANDWIDTH: i32x4.extadd_pairwise_i16x8_s20; MAX-BANDWIDTH: i16x8.extmul_high_i8x16_s21; MAX-BANDWIDTH: i32x4.extadd_pairwise_i16x8_s22; MAX-BANDWIDTH: i32x4.add23; MAX-BANDWIDTH: i32x4.add24 25; RELAXED-MAX-BANDWIDTH: v128.load26; RELAXED-MAX-BANDWIDTH: v128.load27; RELAXED-MAX-BANDWIDTH: i32x4.relaxed_dot_i8x16_i7x16_add_s28 29entry:30  %cmp7.not = icmp eq i32 %N, 031  br i1 %cmp7.not, label %for.cond.cleanup, label %for.body32 33for.cond.cleanup:                                 ; preds = %for.body, %entry34  %res.0.lcssa = phi i32 [ 0, %entry ], [ %add, %for.body ]35  ret i32 %res.0.lcssa36 37for.body:                                         ; preds = %entry, %for.body38  %i.09 = phi i32 [ %inc, %for.body ], [ 0, %entry ]39  %res.08 = phi i32 [ %add, %for.body ], [ 0, %entry ]40  %arrayidx = getelementptr inbounds i8, ptr %a, i32 %i.0941  %0 = load i8, ptr %arrayidx, align 142  %conv = sext i8 %0 to i3243  %arrayidx1 = getelementptr inbounds i8, ptr %b, i32 %i.0944  %1 = load i8, ptr %arrayidx1, align 145  %conv2 = sext i8 %1 to i3246  %mul = mul nsw i32 %conv2, %conv47  %add = add nsw i32 %mul, %res.0848  %inc = add nuw i32 %i.09, 149  %exitcond.not = icmp eq i32 %inc, %N50  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body51}52 53define hidden i32 @i32_mac_u8_s8(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b, i32 noundef %N) {54; CHECK-LABEL: i32_mac_u8_s8:55; CHECK: loop56; CHECK: v128.load32_zero57; CHECK: i16x8.extend_low_i8x16_u58; CHECK: i32x4.extend_low_i16x8_u59; CHECK: v128.load32_zero60; CHECK: i16x8.extend_low_i8x16_s61; CHECK: i32x4.extend_low_i16x8_s62; CHECK: i32x4.mul63; CHECK: i32x4.add64 65; MAX-BANDWIDTH: loop66; MAX-BANDWIDTH: v128.load67; MAX-BANDWIDTH: i8x16.shuffle   12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 068; MAX-BANDWIDTH: i16x8.extend_low_i8x16_u69; MAX-BANDWIDTH: i32x4.extend_low_i16x8_u70; MAX-BANDWIDTH: v128.load71; MAX-BANDWIDTH: i8x16.shuffle   12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 072; MAX-BANDWIDTH: i16x8.extend_low_i8x16_s73; MAX-BANDWIDTH: i32x4.extend_low_i16x8_s74; MAX-BANDWIDTH: i32x4.mul75; MAX-BANDWIDTH: i32x4.add76; MAX-BANDWIDTH: i8x16.shuffle   8, 9, 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 077; MAX-BANDWIDTH: i16x8.extend_low_i8x16_u78; MAX-BANDWIDTH: i32x4.extend_low_i16x8_u79; MAX-BANDWIDTH: i8x16.shuffle   8, 9, 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 080; MAX-BANDWIDTH: i16x8.extend_low_i8x16_s81; MAX-BANDWIDTH: i32x4.extend_low_i16x8_s82; MAX-BANDWIDTH: i32x4.mul83; MAX-BANDWIDTH: i32x4.add84; MAX-BANDWIDTH: i8x16.shuffle   4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 085; MAX-BANDWIDTH: i16x8.extend_low_i8x16_u86; MAX-BANDWIDTH: i32x4.extend_low_i16x8_u87; MAX-BANDWIDTH: i8x16.shuffle   4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 088; MAX-BANDWIDTH: i16x8.extend_low_i8x16_s89; MAX-BANDWIDTH: i32x4.extend_low_i16x8_s90; MAX-BANDWIDTH: i32x4.mul91; MAX-BANDWIDTH: i32x4.add92; MAX-BANDWIDTH: i16x8.extend_low_i8x16_u93; MAX-BANDWIDTH: i32x4.extend_low_i16x8_u94; MAX-BANDWIDTH: i16x8.extend_low_i8x16_s95; MAX-BANDWIDTH: i32x4.extend_low_i16x8_s96; MAX-BANDWIDTH: i32x4.mul97; MAX-BANDWIDTH: i32x4.add98 99; RELAXED-MAX-BANDWIDTH: loop100; RELAXED-MAX-BANDWIDTH: v128.load101; RELAXED-MAX-BANDWIDTH: i8x16.shuffle   12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0102; RELAXED-MAX-BANDWIDTH: i16x8.extend_low_i8x16_u103; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_u104; RELAXED-MAX-BANDWIDTH: v128.load105; RELAXED-MAX-BANDWIDTH: i8x16.shuffle   12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0106; RELAXED-MAX-BANDWIDTH: i16x8.extend_low_i8x16_s107; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_s108; RELAXED-MAX-BANDWIDTH: i32x4.mul109; RELAXED-MAX-BANDWIDTH: i32x4.add110; RELAXED-MAX-BANDWIDTH: i8x16.shuffle   8, 9, 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0111; RELAXED-MAX-BANDWIDTH: i16x8.extend_low_i8x16_u112; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_u113; RELAXED-MAX-BANDWIDTH: i8x16.shuffle   8, 9, 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0114; RELAXED-MAX-BANDWIDTH: i16x8.extend_low_i8x16_s115; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_s116; RELAXED-MAX-BANDWIDTH: i32x4.mul117; RELAXED-MAX-BANDWIDTH: i32x4.add118; RELAXED-MAX-BANDWIDTH: i8x16.shuffle   4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0119; RELAXED-MAX-BANDWIDTH: i16x8.extend_low_i8x16_u120; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_u121; RELAXED-MAX-BANDWIDTH: i8x16.shuffle   4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0122; RELAXED-MAX-BANDWIDTH: i16x8.extend_low_i8x16_s123; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_s124; RELAXED-MAX-BANDWIDTH: i32x4.mul125; RELAXED-MAX-BANDWIDTH: i32x4.add126; RELAXED-MAX-BANDWIDTH: i16x8.extend_low_i8x16_u127; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_u128; RELAXED-MAX-BANDWIDTH: i16x8.extend_low_i8x16_s129; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_s130; RELAXED-MAX-BANDWIDTH: i32x4.mul131; RELAXED-MAX-BANDWIDTH: i32x4.add132entry:133  %cmp7.not = icmp eq i32 %N, 0134  br i1 %cmp7.not, label %for.cond.cleanup, label %for.body135 136for.cond.cleanup:                                 ; preds = %for.body, %entry137  %res.0.lcssa = phi i32 [ 0, %entry ], [ %add, %for.body ]138  ret i32 %res.0.lcssa139 140for.body:                                         ; preds = %entry, %for.body141  %i.09 = phi i32 [ %inc, %for.body ], [ 0, %entry ]142  %res.08 = phi i32 [ %add, %for.body ], [ 0, %entry ]143  %arrayidx = getelementptr inbounds i8, ptr %a, i32 %i.09144  %0 = load i8, ptr %arrayidx, align 1145  %conv = sext i8 %0 to i32146  %arrayidx1 = getelementptr inbounds i8, ptr %b, i32 %i.09147  %1 = load i8, ptr %arrayidx1, align 1148  %conv2 = zext i8 %1 to i32149  %mul = mul nsw i32 %conv2, %conv150  %add = add nsw i32 %mul, %res.08151  %inc = add nuw i32 %i.09, 1152  %exitcond.not = icmp eq i32 %inc, %N153  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body154}155 156define hidden i32 @i32_mac_s16(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b, i32 noundef %N) {157; CHECK-LABEL: i32_mac_s16:158; CHECK:    i32x4.load16x4_s 0:p2align=1159; CHECK:    i32x4.load16x4_s 0:p2align=1160; CHECK:    i32x4.mul161; CHECK:    i32x4.add162 163; MAX-BANDWIDTH: v128.load164; MAX-BANDWIDTH: v128.load165; MAX-BANDWIDTH: i32x4.dot_i16x8_s166; MAX-BANDWIDTH: i32x4.add167 168; RELAXED-MAX-BANDWIDTH: v128.load169; RELAXED-MAX-BANDWIDTH: v128.load170; RELAXED-MAX-BANDWIDTH: i32x4.dot_i16x8_s171; RELAXED-MAX-BANDWIDTH: i32x4.add172 173entry:174  %cmp7.not = icmp eq i32 %N, 0175  br i1 %cmp7.not, label %for.cond.cleanup, label %for.body176 177for.cond.cleanup:                                 ; preds = %for.body, %entry178  %res.0.lcssa = phi i32 [ 0, %entry ], [ %add, %for.body ]179  ret i32 %res.0.lcssa180 181for.body:                                         ; preds = %entry, %for.body182  %i.09 = phi i32 [ %inc, %for.body ], [ 0, %entry ]183  %res.08 = phi i32 [ %add, %for.body ], [ 0, %entry ]184  %arrayidx = getelementptr inbounds i16, ptr %a, i32 %i.09185  %0 = load i16, ptr %arrayidx, align 2186  %conv = sext i16 %0 to i32187  %arrayidx1 = getelementptr inbounds i16, ptr %b, i32 %i.09188  %1 = load i16, ptr %arrayidx1, align 2189  %conv2 = sext i16 %1 to i32190  %mul = mul nsw i32 %conv2, %conv191  %add = add nsw i32 %mul, %res.08192  %inc = add nuw i32 %i.09, 1193  %exitcond.not = icmp eq i32 %inc, %N194  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body195}196 197define hidden i64 @i64_mac_s16(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b, i32 noundef %N) {198; CHECK-LABEL: i64_mac_s16:199; CHECK:    v128.load32_zero 0:p2align=1200; CHECK:    i32x4.extend_low_i16x8_s201; CHECK:    v128.load32_zero 0:p2align=1202; CHECK:    i32x4.extend_low_i16x8_s203; CHECK:    i64x2.extmul_low_i32x4_s204; CHECK:    i64x2.add205 206; MAX-BANDWIDTH: v128.load207; MAX-BANDWIDTH: i8x16.shuffle	12, 13, 14, 15, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1208; MAX-BANDWIDTH: i32x4.extend_low_i16x8_s209; MAX-BANDWIDTH: v128.load210; MAX-BANDWIDTH: i8x16.shuffle	12, 13, 14, 15, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1211; MAX-BANDWIDTH: i32x4.extend_low_i16x8_s212; MAX-BANDWIDTH: i64x2.extmul_low_i32x4_s213; MAX-BANDWIDTH: i64x2.add214; MAX-BANDWIDTH: i8x16.shuffle	8, 9, 10, 11, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1215; MAX-BANDWIDTH: i32x4.extend_low_i16x8_s216; MAX-BANDWIDTH: i8x16.shuffle	8, 9, 10, 11, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1217; MAX-BANDWIDTH: i32x4.extend_low_i16x8_s218; MAX-BANDWIDTH: i64x2.extmul_low_i32x4_s219; MAX-BANDWIDTH: i64x2.add220; MAX-BANDWIDTH: i8x16.shuffle	4, 5, 6, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1221; MAX-BANDWIDTH: i32x4.extend_low_i16x8_s222; MAX-BANDWIDTH: i8x16.shuffle	4, 5, 6, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1223; MAX-BANDWIDTH: i32x4.extend_low_i16x8_s224; MAX-BANDWIDTH: i64x2.extmul_low_i32x4_s225; MAX-BANDWIDTH: i64x2.add226; MAX-BANDWIDTH: i32x4.extend_low_i16x8_s227; MAX-BANDWIDTH: i32x4.extend_low_i16x8_s228; MAX-BANDWIDTH: i64x2.extmul_low_i32x4_s229; MAX-BANDWIDTH: i64x2.add230 231; RELAXED-MAX-BANDWIDTH: v128.load232; RELAXED-MAX-BANDWIDTH: i8x16.shuffle	12, 13, 14, 15, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1233; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_s234; RELAXED-MAX-BANDWIDTH: v128.load235; RELAXED-MAX-BANDWIDTH: i8x16.shuffle	12, 13, 14, 15, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1236; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_s237; RELAXED-MAX-BANDWIDTH: i64x2.extmul_low_i32x4_s238; RELAXED-MAX-BANDWIDTH: i64x2.add239; RELAXED-MAX-BANDWIDTH: i8x16.shuffle	8, 9, 10, 11, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1240; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_s241; RELAXED-MAX-BANDWIDTH: i8x16.shuffle	8, 9, 10, 11, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1242; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_s243; RELAXED-MAX-BANDWIDTH: i64x2.extmul_low_i32x4_s244; RELAXED-MAX-BANDWIDTH: i64x2.add245; RELAXED-MAX-BANDWIDTH: i8x16.shuffle	4, 5, 6, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1246; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_s247; RELAXED-MAX-BANDWIDTH: i8x16.shuffle	4, 5, 6, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1248; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_s249; RELAXED-MAX-BANDWIDTH: i64x2.extmul_low_i32x4_s250; RELAXED-MAX-BANDWIDTH: i64x2.add251; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_s252; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_s253; RELAXED-MAX-BANDWIDTH: i64x2.extmul_low_i32x4_s254; RELAXED-MAX-BANDWIDTH: i64x2.add255 256entry:257  %cmp7.not = icmp eq i32 %N, 0258  br i1 %cmp7.not, label %for.cond.cleanup, label %for.body259 260for.cond.cleanup:                                 ; preds = %for.body, %entry261  %res.0.lcssa = phi i64 [ 0, %entry ], [ %add, %for.body ]262  ret i64 %res.0.lcssa263 264for.body:                                         ; preds = %entry, %for.body265  %i.09 = phi i32 [ %inc, %for.body ], [ 0, %entry ]266  %res.08 = phi i64 [ %add, %for.body ], [ 0, %entry ]267  %arrayidx = getelementptr inbounds i16, ptr %a, i32 %i.09268  %0 = load i16, ptr %arrayidx, align 2269  %conv = sext i16 %0 to i64270  %arrayidx1 = getelementptr inbounds i16, ptr %b, i32 %i.09271  %1 = load i16, ptr %arrayidx1, align 2272  %conv2 = sext i16 %1 to i64273  %mul = mul nsw i64 %conv2, %conv274  %add = add nsw i64 %mul, %res.08275  %inc = add nuw i32 %i.09, 1276  %exitcond.not = icmp eq i32 %inc, %N277  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body278}279 280define hidden i64 @i64_mac_s32(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b, i32 noundef %N) {281; CHECK-LABEL: i64_mac_s32:282; CHECK:    v128.load64_zero 0:p2align=2283; CHECK:    v128.load64_zero 0:p2align=2284; CHECK:    i32x4.mul285; CHECK:    i64x2.extend_low_i32x4_s286; CHECK:    i64x2.add287 288; MAX-BANDWIDTH: v128.load289; MAX-BANDWIDTH: v128.load290; MAX-BANDWIDTH: i32x4.mul291; MAX-BANDWIDTH: i64x2.extend_high_i32x4_s292; MAX-BANDWIDTH: i64x2.add293; MAX-BANDWIDTH: i64x2.extend_low_i32x4_s294; MAX-BANDWIDTH: i64x2.add295 296; RELAXED-MAX-BANDWIDTH: v128.load297; RELAXED-MAX-BANDWIDTH: v128.load298; RELAXED-MAX-BANDWIDTH: i32x4.mul299; RELAXED-MAX-BANDWIDTH: i64x2.extend_high_i32x4_s300; RELAXED-MAX-BANDWIDTH: i64x2.add301; RELAXED-MAX-BANDWIDTH: i64x2.extend_low_i32x4_s302; RELAXED-MAX-BANDWIDTH: i64x2.add303 304entry:305  %cmp6.not = icmp eq i32 %N, 0306  br i1 %cmp6.not, label %for.cond.cleanup, label %for.body307 308for.cond.cleanup:                                 ; preds = %for.body, %entry309  %res.0.lcssa = phi i64 [ 0, %entry ], [ %add, %for.body ]310  ret i64 %res.0.lcssa311 312for.body:                                         ; preds = %entry, %for.body313  %i.08 = phi i32 [ %inc, %for.body ], [ 0, %entry ]314  %res.07 = phi i64 [ %add, %for.body ], [ 0, %entry ]315  %arrayidx = getelementptr inbounds i32, ptr %a, i32 %i.08316  %0 = load i32, ptr %arrayidx, align 4317  %arrayidx1 = getelementptr inbounds i32, ptr %b, i32 %i.08318  %1 = load i32, ptr %arrayidx1, align 4319  %mul = mul i32 %1, %0320  %conv = sext i32 %mul to i64321  %add = add i64 %res.07, %conv322  %inc = add nuw i32 %i.08, 1323  %exitcond.not = icmp eq i32 %inc, %N324  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body325}326 327define hidden i32 @i32_mac_u8(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b, i32 noundef %N) {328; CHECK-LABEL: i32_mac_u8:329; CHECK:    v128.load32_zero 0:p2align=0330; CHECK:    i16x8.extend_low_i8x16_u331; CHECK:    v128.load32_zero 0:p2align=0332; CHECK:    i16x8.extend_low_i8x16_u333; CHECK:    i32x4.extmul_low_i16x8_u334; CHECK:    i32x4.add335 336; MAX-BANDWIDTH: v128.load337; MAX-BANDWIDTH: v128.load338; MAX-BANDWIDTH: i16x8.extmul_low_i8x16_u339; MAX-BANDWIDTH: i32x4.extadd_pairwise_i16x8_u340; MAX-BANDWIDTH: i16x8.extmul_high_i8x16_u341; MAX-BANDWIDTH: i32x4.extadd_pairwise_i16x8_u342; MAX-BANDWIDTH: i32x4.add343; MAX-BANDWIDTH: i32x4.add344 345; RELAXED-MAX-BANDWIDTH: v128.load346; RELAXED-MAX-BANDWIDTH: v128.load347; RELAXED-MAX-BANDWIDTH: i16x8.extmul_low_i8x16_u348; RELAXED-MAX-BANDWIDTH: i32x4.extadd_pairwise_i16x8_u349; RELAXED-MAX-BANDWIDTH: i16x8.extmul_high_i8x16_u350; RELAXED-MAX-BANDWIDTH: i32x4.extadd_pairwise_i16x8_u351; RELAXED-MAX-BANDWIDTH: i32x4.add352; RELAXED-MAX-BANDWIDTH: i32x4.add353 354entry:355  %cmp7.not = icmp eq i32 %N, 0356  br i1 %cmp7.not, label %for.cond.cleanup, label %for.body357 358for.cond.cleanup:                                 ; preds = %for.body, %entry359  %res.0.lcssa = phi i32 [ 0, %entry ], [ %add, %for.body ]360  ret i32 %res.0.lcssa361 362for.body:                                         ; preds = %entry, %for.body363  %i.09 = phi i32 [ %inc, %for.body ], [ 0, %entry ]364  %res.08 = phi i32 [ %add, %for.body ], [ 0, %entry ]365  %arrayidx = getelementptr inbounds i8, ptr %a, i32 %i.09366  %0 = load i8, ptr %arrayidx, align 1367  %conv = zext i8 %0 to i32368  %arrayidx1 = getelementptr inbounds i8, ptr %b, i32 %i.09369  %1 = load i8, ptr %arrayidx1, align 1370  %conv2 = zext i8 %1 to i32371  %mul = mul nuw nsw i32 %conv2, %conv372  %add = add i32 %mul, %res.08373  %inc = add nuw i32 %i.09, 1374  %exitcond.not = icmp eq i32 %inc, %N375  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body376}377 378define hidden i32 @i32_mac_u16(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b, i32 noundef %N) {379; CHECK-LABEL: i32_mac_u16:380; CHECK:    i32x4.load16x4_u 0:p2align=1381; CHECK:    i32x4.load16x4_u 0:p2align=1382; CHECK:    i32x4.mul383; CHECK:    i32x4.add384 385; MAX-BANDWIDTH: v128.load386; MAX-BANDWIDTH: v128.load387; MAX-BANDWIDTH: i32x4.extmul_low_i16x8_u388; MAX-BANDWIDTH: i32x4.extmul_high_i16x8_u389; MAX-BANDWIDTH: i32x4.add390; MAX-BANDWIDTH: i32x4.add391 392; RELAXED-MAX-BANDWIDTH: v128.load393; RELAXED-MAX-BANDWIDTH: v128.load394; RELAXED-MAX-BANDWIDTH: i32x4.extmul_low_i16x8_u395; RELAXED-MAX-BANDWIDTH: i32x4.extmul_high_i16x8_u396; RELAXED-MAX-BANDWIDTH: i32x4.add397; RELAXED-MAX-BANDWIDTH: i32x4.add398 399entry:400  %cmp7.not = icmp eq i32 %N, 0401  br i1 %cmp7.not, label %for.cond.cleanup, label %for.body402 403for.cond.cleanup:                                 ; preds = %for.body, %entry404  %res.0.lcssa = phi i32 [ 0, %entry ], [ %add, %for.body ]405  ret i32 %res.0.lcssa406 407for.body:                                         ; preds = %entry, %for.body408  %i.09 = phi i32 [ %inc, %for.body ], [ 0, %entry ]409  %res.08 = phi i32 [ %add, %for.body ], [ 0, %entry ]410  %arrayidx = getelementptr inbounds i16, ptr %a, i32 %i.09411  %0 = load i16, ptr %arrayidx, align 2412  %conv = zext i16 %0 to i32413  %arrayidx1 = getelementptr inbounds i16, ptr %b, i32 %i.09414  %1 = load i16, ptr %arrayidx1, align 2415  %conv2 = zext i16 %1 to i32416  %mul = mul nuw nsw i32 %conv2, %conv417  %add = add i32 %mul, %res.08418  %inc = add nuw i32 %i.09, 1419  %exitcond.not = icmp eq i32 %inc, %N420  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body421}422 423define hidden i32 @i32_mac_u16_s16(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b, i32 noundef %N) {424; CHECK-LABEL: i32_mac_u16_s16:425; CHECK:    i32x4.load16x4_s 0:p2align=1426; CHECK:    i32x4.load16x4_u 0:p2align=1427; CHECK:    i32x4.mul428; CHECK:    i32x4.add429 430; MAX-BANDWIDTH: v128.load431; MAX-BANDWIDTH: i32x4.extend_high_i16x8_s432; MAX-BANDWIDTH: v128.load433; MAX-BANDWIDTH: i32x4.extend_high_i16x8_u434; MAX-BANDWIDTH: i32x4.mul435; MAX-BANDWIDTH: i32x4.extend_low_i16x8_s436; MAX-BANDWIDTH: i32x4.extend_low_i16x8_u437; MAX-BANDWIDTH: i32x4.mul438; MAX-BANDWIDTH: i32x4.add439; MAX-BANDWIDTH: i32x4.add440 441; RELAXED-MAX-BANDWIDTH: v128.load442; RELAXED-MAX-BANDWIDTH: i32x4.extend_high_i16x8_s443; RELAXED-MAX-BANDWIDTH: v128.load444; RELAXED-MAX-BANDWIDTH: i32x4.extend_high_i16x8_u445; RELAXED-MAX-BANDWIDTH: i32x4.mul446; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_s447; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_u448; RELAXED-MAX-BANDWIDTH: i32x4.mul449; RELAXED-MAX-BANDWIDTH: i32x4.add450; RELAXED-MAX-BANDWIDTH: i32x4.add451 452entry:453  %cmp7.not = icmp eq i32 %N, 0454  br i1 %cmp7.not, label %for.cond.cleanup, label %for.body455 456for.cond.cleanup:                                 ; preds = %for.body, %entry457  %res.0.lcssa = phi i32 [ 0, %entry ], [ %add, %for.body ]458  ret i32 %res.0.lcssa459 460for.body:                                         ; preds = %entry, %for.body461  %i.09 = phi i32 [ %inc, %for.body ], [ 0, %entry ]462  %res.08 = phi i32 [ %add, %for.body ], [ 0, %entry ]463  %arrayidx = getelementptr inbounds i16, ptr %a, i32 %i.09464  %0 = load i16, ptr %arrayidx, align 2465  %conv = zext i16 %0 to i32466  %arrayidx1 = getelementptr inbounds i16, ptr %b, i32 %i.09467  %1 = load i16, ptr %arrayidx1, align 2468  %conv2 = sext i16 %1 to i32469  %mul = mul nuw nsw i32 %conv2, %conv470  %add = add i32 %mul, %res.08471  %inc = add nuw i32 %i.09, 1472  %exitcond.not = icmp eq i32 %inc, %N473  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body474}475 476define hidden i64 @i64_mac_u16(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b, i32 noundef %N) {477; CHECK-LABEL: i64_mac_u16:478; CHECK:    v128.load32_zero 0:p2align=1479; CHECK:    i32x4.extend_low_i16x8_u480; CHECK:    v128.load32_zero 0:p2align=1481; CHECK:    i32x4.extend_low_i16x8_u482; CHECK:    i64x2.extmul_low_i32x4_u483; CHECK:    i64x2.add484 485; MAX-BANDWIDTH: v128.load486; MAX-BANDWIDTH: i8x16.shuffle	12, 13, 14, 15, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1487; MAX-BANDWIDTH: i32x4.extend_low_i16x8_u488; MAX-BANDWIDTH: v128.load489; MAX-BANDWIDTH: i8x16.shuffle	12, 13, 14, 15, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1490; MAX-BANDWIDTH: i32x4.extend_low_i16x8_u491; MAX-BANDWIDTH: i64x2.extmul_low_i32x4_u492; MAX-BANDWIDTH: i64x2.add493; MAX-BANDWIDTH: i8x16.shuffle	8, 9, 10, 11, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1494; MAX-BANDWIDTH: i32x4.extend_low_i16x8_u495; MAX-BANDWIDTH: i8x16.shuffle	8, 9, 10, 11, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1496; MAX-BANDWIDTH: i32x4.extend_low_i16x8_u497; MAX-BANDWIDTH: i64x2.extmul_low_i32x4_u498; MAX-BANDWIDTH: i64x2.add499; MAX-BANDWIDTH: i8x16.shuffle	4, 5, 6, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1500; MAX-BANDWIDTH: i32x4.extend_low_i16x8_u501; MAX-BANDWIDTH: i8x16.shuffle	4, 5, 6, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1502; MAX-BANDWIDTH: i32x4.extend_low_i16x8_u503; MAX-BANDWIDTH: i64x2.extmul_low_i32x4_u504; MAX-BANDWIDTH: i64x2.add505; MAX-BANDWIDTH: i32x4.extend_low_i16x8_u506; MAX-BANDWIDTH: i32x4.extend_low_i16x8_u507; MAX-BANDWIDTH: i64x2.extmul_low_i32x4_u508; MAX-BANDWIDTH: i64x2.add509 510; RELAXED-MAX-BANDWIDTH: v128.load511; RELAXED-MAX-BANDWIDTH: i8x16.shuffle	12, 13, 14, 15, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1512; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_u513; RELAXED-MAX-BANDWIDTH: v128.load514; RELAXED-MAX-BANDWIDTH: i8x16.shuffle	12, 13, 14, 15, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1515; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_u516; RELAXED-MAX-BANDWIDTH: i64x2.extmul_low_i32x4_u517; RELAXED-MAX-BANDWIDTH: i64x2.add518; RELAXED-MAX-BANDWIDTH: i8x16.shuffle	8, 9, 10, 11, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1519; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_u520; RELAXED-MAX-BANDWIDTH: i8x16.shuffle	8, 9, 10, 11, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1521; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_u522; RELAXED-MAX-BANDWIDTH: i64x2.extmul_low_i32x4_u523; RELAXED-MAX-BANDWIDTH: i64x2.add524; RELAXED-MAX-BANDWIDTH: i8x16.shuffle	4, 5, 6, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1525; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_u526; RELAXED-MAX-BANDWIDTH: i8x16.shuffle	4, 5, 6, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1527; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_u528; RELAXED-MAX-BANDWIDTH: i64x2.extmul_low_i32x4_u529; RELAXED-MAX-BANDWIDTH: i64x2.add530; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_u531; RELAXED-MAX-BANDWIDTH: i32x4.extend_low_i16x8_u532; RELAXED-MAX-BANDWIDTH: i64x2.extmul_low_i32x4_u533; RELAXED-MAX-BANDWIDTH: i64x2.add534 535 536entry:537  %cmp8.not = icmp eq i32 %N, 0538  br i1 %cmp8.not, label %for.cond.cleanup, label %for.body539 540for.cond.cleanup:                                 ; preds = %for.body, %entry541  %res.0.lcssa = phi i64 [ 0, %entry ], [ %add, %for.body ]542  ret i64 %res.0.lcssa543 544for.body:                                         ; preds = %entry, %for.body545  %i.010 = phi i32 [ %inc, %for.body ], [ 0, %entry ]546  %res.09 = phi i64 [ %add, %for.body ], [ 0, %entry ]547  %arrayidx = getelementptr inbounds i16, ptr %a, i32 %i.010548  %0 = load i16, ptr %arrayidx, align 2549  %conv = zext i16 %0 to i64550  %arrayidx1 = getelementptr inbounds i16, ptr %b, i32 %i.010551  %1 = load i16, ptr %arrayidx1, align 2552  %conv2 = zext i16 %1 to i64553  %mul = mul nuw nsw i64 %conv2, %conv554  %add = add i64 %mul, %res.09555  %inc = add nuw i32 %i.010, 1556  %exitcond.not = icmp eq i32 %inc, %N557  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body558}559 560define hidden i64 @i64_mac_u32(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b, i32 noundef %N) {561; CHECK-LABEL: i64_mac_u32:562; CHECK:    v128.load64_zero 0:p2align=2563; CHECK:    v128.load64_zero 0:p2align=2564; CHECK:    i32x4.mul565; CHECK:    i64x2.extend_low_i32x4_u566; CHECK:    i64x2.add567 568; MAX-BANDWIDTH: v128.load569; MAX-BANDWIDTH: v128.load570; MAX-BANDWIDTH: i32x4.mul571; MAX-BANDWIDTH: i64x2.extend_high_i32x4_u572; MAX-BANDWIDTH: i64x2.add573; MAX-BANDWIDTH: i64x2.extend_low_i32x4_u574; MAX-BANDWIDTH: i64x2.add575 576; RELAXED-MAX-BANDWIDTH: v128.load577; RELAXED-MAX-BANDWIDTH: v128.load578; RELAXED-MAX-BANDWIDTH: i32x4.mul579; RELAXED-MAX-BANDWIDTH: i64x2.extend_high_i32x4_u580; RELAXED-MAX-BANDWIDTH: i64x2.add581; RELAXED-MAX-BANDWIDTH: i64x2.extend_low_i32x4_u582; RELAXED-MAX-BANDWIDTH: i64x2.add583 584entry:585  %cmp6.not = icmp eq i32 %N, 0586  br i1 %cmp6.not, label %for.cond.cleanup, label %for.body587 588for.cond.cleanup:                                 ; preds = %for.body, %entry589  %res.0.lcssa = phi i64 [ 0, %entry ], [ %add, %for.body ]590  ret i64 %res.0.lcssa591 592for.body:                                         ; preds = %entry, %for.body593  %i.08 = phi i32 [ %inc, %for.body ], [ 0, %entry ]594  %res.07 = phi i64 [ %add, %for.body ], [ 0, %entry ]595  %arrayidx = getelementptr inbounds i32, ptr %a, i32 %i.08596  %0 = load i32, ptr %arrayidx, align 4597  %arrayidx1 = getelementptr inbounds i32, ptr %b, i32 %i.08598  %1 = load i32, ptr %arrayidx1, align 4599  %mul = mul i32 %1, %0600  %conv = zext i32 %mul to i64601  %add = add i64 %res.07, %conv602  %inc = add nuw i32 %i.08, 1603  %exitcond.not = icmp eq i32 %inc, %N604  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body605}606