brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.5 KiB · ca74b4e Raw
469 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc -mtriple=aarch64 -verify-machineinstrs < %s -o - | FileCheck %s3 4;; This test exercises the default lowering of the histogram to scalarized code.5 6define void @histogram_i64(<2 x ptr> %buckets, i64 %inc, <2 x i1> %mask) {7; CHECK-LABEL: histogram_i64:8; CHECK:       // %bb.0:9; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q110; CHECK-NEXT:    fmov w8, s111; CHECK-NEXT:    tbnz w8, #0, .LBB0_312; CHECK-NEXT:  // %bb.1: // %else13; CHECK-NEXT:    mov w8, v1.s[1]14; CHECK-NEXT:    tbnz w8, #0, .LBB0_415; CHECK-NEXT:  .LBB0_2: // %else216; CHECK-NEXT:    ret17; CHECK-NEXT:  .LBB0_3: // %cond.histogram.update18; CHECK-NEXT:    fmov x8, d019; CHECK-NEXT:    ldr x9, [x8]20; CHECK-NEXT:    add x9, x9, x021; CHECK-NEXT:    str x9, [x8]22; CHECK-NEXT:    mov w8, v1.s[1]23; CHECK-NEXT:    tbz w8, #0, .LBB0_224; CHECK-NEXT:  .LBB0_4: // %cond.histogram.update125; CHECK-NEXT:    mov x8, v0.d[1]26; CHECK-NEXT:    ldr x9, [x8]27; CHECK-NEXT:    add x9, x9, x028; CHECK-NEXT:    str x9, [x8]29; CHECK-NEXT:    ret30  call void @llvm.experimental.vector.histogram.add.nxv2p0.i64(<2 x ptr> %buckets, i64 %inc, <2 x i1> %mask)31  ret void32}33 34define void @histogram_i32_literal(ptr %base, <4 x i32> %indices, <4 x i1> %mask) {35; CHECK-LABEL: histogram_i32_literal:36; CHECK:       // %bb.0:37; CHECK-NEXT:    dup v2.2d, x038; CHECK-NEXT:    sshll v3.2d, v0.2s, #239; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q140; CHECK-NEXT:    umov w8, v1.h[0]41; CHECK-NEXT:    add v3.2d, v2.2d, v3.2d42; CHECK-NEXT:    tbz w8, #0, .LBB1_243; CHECK-NEXT:  // %bb.1: // %cond.histogram.update44; CHECK-NEXT:    fmov x8, d345; CHECK-NEXT:    ldr w9, [x8]46; CHECK-NEXT:    add w9, w9, #147; CHECK-NEXT:    str w9, [x8]48; CHECK-NEXT:  .LBB1_2: // %else49; CHECK-NEXT:    umov w8, v1.h[1]50; CHECK-NEXT:    sshll2 v0.2d, v0.4s, #251; CHECK-NEXT:    tbz w8, #0, .LBB1_452; CHECK-NEXT:  // %bb.3: // %cond.histogram.update153; CHECK-NEXT:    mov x8, v3.d[1]54; CHECK-NEXT:    ldr w9, [x8]55; CHECK-NEXT:    add w9, w9, #156; CHECK-NEXT:    str w9, [x8]57; CHECK-NEXT:  .LBB1_4: // %else258; CHECK-NEXT:    umov w8, v1.h[2]59; CHECK-NEXT:    add v0.2d, v2.2d, v0.2d60; CHECK-NEXT:    tbnz w8, #0, .LBB1_761; CHECK-NEXT:  // %bb.5: // %else462; CHECK-NEXT:    umov w8, v1.h[3]63; CHECK-NEXT:    tbnz w8, #0, .LBB1_864; CHECK-NEXT:  .LBB1_6: // %else665; CHECK-NEXT:    ret66; CHECK-NEXT:  .LBB1_7: // %cond.histogram.update367; CHECK-NEXT:    fmov x8, d068; CHECK-NEXT:    ldr w9, [x8]69; CHECK-NEXT:    add w9, w9, #170; CHECK-NEXT:    str w9, [x8]71; CHECK-NEXT:    umov w8, v1.h[3]72; CHECK-NEXT:    tbz w8, #0, .LBB1_673; CHECK-NEXT:  .LBB1_8: // %cond.histogram.update574; CHECK-NEXT:    mov x8, v0.d[1]75; CHECK-NEXT:    ldr w9, [x8]76; CHECK-NEXT:    add w9, w9, #177; CHECK-NEXT:    str w9, [x8]78; CHECK-NEXT:    ret79 80  %buckets = getelementptr i32, ptr %base, <4 x i32> %indices81  call void @llvm.experimental.vector.histogram.add.nxv4p0.i32(<4 x ptr> %buckets, i32 1, <4 x i1> %mask)82  ret void83}84 85define void @histogram_i32_literal_alltruemask(ptr %base, <4 x i32> %indices) {86; CHECK-LABEL: histogram_i32_literal_alltruemask:87; CHECK:       // %bb.0:88; CHECK-NEXT:    dup v1.2d, x089; CHECK-NEXT:    sshll v2.2d, v0.2s, #290; CHECK-NEXT:    sshll2 v0.2d, v0.4s, #291; CHECK-NEXT:    add v2.2d, v1.2d, v2.2d92; CHECK-NEXT:    add v0.2d, v1.2d, v0.2d93; CHECK-NEXT:    fmov x8, d294; CHECK-NEXT:    mov x9, v2.d[1]95; CHECK-NEXT:    ldr w10, [x8]96; CHECK-NEXT:    add w10, w10, #197; CHECK-NEXT:    str w10, [x8]98; CHECK-NEXT:    ldr w8, [x9]99; CHECK-NEXT:    add w8, w8, #1100; CHECK-NEXT:    str w8, [x9]101; CHECK-NEXT:    fmov x8, d0102; CHECK-NEXT:    mov x9, v0.d[1]103; CHECK-NEXT:    ldr w10, [x8]104; CHECK-NEXT:    add w10, w10, #1105; CHECK-NEXT:    str w10, [x8]106; CHECK-NEXT:    ldr w8, [x9]107; CHECK-NEXT:    add w8, w8, #1108; CHECK-NEXT:    str w8, [x9]109; CHECK-NEXT:    ret110 111  %buckets = getelementptr i32, ptr %base, <4 x i32> %indices112  call void @llvm.experimental.vector.histogram.add.nxv4p0.i32(<4 x ptr> %buckets, i32 1, <4 x i1> <i1 true, i1 true, i1 true, i1 true>)113  ret void114}115 116define void @histogram_uadd_sat_i64(<2 x ptr> %buckets, i64 %inc, <2 x i1> %mask) {117; CHECK-LABEL: histogram_uadd_sat_i64:118; CHECK:       // %bb.0:119; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q1120; CHECK-NEXT:    fmov w8, s1121; CHECK-NEXT:    tbnz w8, #0, .LBB3_3122; CHECK-NEXT:  // %bb.1: // %else123; CHECK-NEXT:    mov w8, v1.s[1]124; CHECK-NEXT:    tbnz w8, #0, .LBB3_4125; CHECK-NEXT:  .LBB3_2: // %else2126; CHECK-NEXT:    ret127; CHECK-NEXT:  .LBB3_3: // %cond.histogram.update128; CHECK-NEXT:    fmov x8, d0129; CHECK-NEXT:    ldr x9, [x8]130; CHECK-NEXT:    adds x9, x9, x0131; CHECK-NEXT:    csinv x9, x9, xzr, lo132; CHECK-NEXT:    str x9, [x8]133; CHECK-NEXT:    mov w8, v1.s[1]134; CHECK-NEXT:    tbz w8, #0, .LBB3_2135; CHECK-NEXT:  .LBB3_4: // %cond.histogram.update1136; CHECK-NEXT:    mov x8, v0.d[1]137; CHECK-NEXT:    ldr x9, [x8]138; CHECK-NEXT:    adds x9, x9, x0139; CHECK-NEXT:    csinv x9, x9, xzr, lo140; CHECK-NEXT:    str x9, [x8]141; CHECK-NEXT:    ret142  call void @llvm.experimental.vector.histogram.uadd.sat.nxv2p0.i64(<2 x ptr> %buckets, i64 %inc, <2 x i1> %mask)143  ret void144}145 146define void @histogram_uadd_sat_i32_literal(ptr %base, <4 x i32> %indices, <4 x i1> %mask) {147; CHECK-LABEL: histogram_uadd_sat_i32_literal:148; CHECK:       // %bb.0:149; CHECK-NEXT:    dup v2.2d, x0150; CHECK-NEXT:    sshll v3.2d, v0.2s, #2151; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q1152; CHECK-NEXT:    umov w8, v1.h[0]153; CHECK-NEXT:    add v3.2d, v2.2d, v3.2d154; CHECK-NEXT:    tbz w8, #0, .LBB4_2155; CHECK-NEXT:  // %bb.1: // %cond.histogram.update156; CHECK-NEXT:    fmov x8, d3157; CHECK-NEXT:    ldr w9, [x8]158; CHECK-NEXT:    adds w9, w9, #1159; CHECK-NEXT:    csinv w9, w9, wzr, lo160; CHECK-NEXT:    str w9, [x8]161; CHECK-NEXT:  .LBB4_2: // %else162; CHECK-NEXT:    umov w8, v1.h[1]163; CHECK-NEXT:    sshll2 v0.2d, v0.4s, #2164; CHECK-NEXT:    tbz w8, #0, .LBB4_4165; CHECK-NEXT:  // %bb.3: // %cond.histogram.update1166; CHECK-NEXT:    mov x8, v3.d[1]167; CHECK-NEXT:    ldr w9, [x8]168; CHECK-NEXT:    adds w9, w9, #1169; CHECK-NEXT:    csinv w9, w9, wzr, lo170; CHECK-NEXT:    str w9, [x8]171; CHECK-NEXT:  .LBB4_4: // %else2172; CHECK-NEXT:    umov w8, v1.h[2]173; CHECK-NEXT:    add v0.2d, v2.2d, v0.2d174; CHECK-NEXT:    tbnz w8, #0, .LBB4_7175; CHECK-NEXT:  // %bb.5: // %else4176; CHECK-NEXT:    umov w8, v1.h[3]177; CHECK-NEXT:    tbnz w8, #0, .LBB4_8178; CHECK-NEXT:  .LBB4_6: // %else6179; CHECK-NEXT:    ret180; CHECK-NEXT:  .LBB4_7: // %cond.histogram.update3181; CHECK-NEXT:    fmov x8, d0182; CHECK-NEXT:    ldr w9, [x8]183; CHECK-NEXT:    adds w9, w9, #1184; CHECK-NEXT:    csinv w9, w9, wzr, lo185; CHECK-NEXT:    str w9, [x8]186; CHECK-NEXT:    umov w8, v1.h[3]187; CHECK-NEXT:    tbz w8, #0, .LBB4_6188; CHECK-NEXT:  .LBB4_8: // %cond.histogram.update5189; CHECK-NEXT:    mov x8, v0.d[1]190; CHECK-NEXT:    ldr w9, [x8]191; CHECK-NEXT:    adds w9, w9, #1192; CHECK-NEXT:    csinv w9, w9, wzr, lo193; CHECK-NEXT:    str w9, [x8]194; CHECK-NEXT:    ret195  %buckets = getelementptr i32, ptr %base, <4 x i32> %indices196  call void @llvm.experimental.vector.histogram.uadd.sat.nxv4p0.i32(<4 x ptr> %buckets, i32 1, <4 x i1> %mask)197  ret void198}199 200define void @histogram_uadd_sat_i32_literal_alltruemask(ptr %base, <4 x i32> %indices) {201; CHECK-LABEL: histogram_uadd_sat_i32_literal_alltruemask:202; CHECK:       // %bb.0:203; CHECK-NEXT:    dup v1.2d, x0204; CHECK-NEXT:    sshll v2.2d, v0.2s, #2205; CHECK-NEXT:    sshll2 v0.2d, v0.4s, #2206; CHECK-NEXT:    add v2.2d, v1.2d, v2.2d207; CHECK-NEXT:    add v0.2d, v1.2d, v0.2d208; CHECK-NEXT:    fmov x8, d2209; CHECK-NEXT:    mov x10, v2.d[1]210; CHECK-NEXT:    ldr w9, [x8]211; CHECK-NEXT:    adds w9, w9, #1212; CHECK-NEXT:    csinv w9, w9, wzr, lo213; CHECK-NEXT:    str w9, [x8]214; CHECK-NEXT:    ldr w8, [x10]215; CHECK-NEXT:    adds w8, w8, #1216; CHECK-NEXT:    csinv w8, w8, wzr, lo217; CHECK-NEXT:    str w8, [x10]218; CHECK-NEXT:    fmov x8, d0219; CHECK-NEXT:    mov x10, v0.d[1]220; CHECK-NEXT:    ldr w9, [x8]221; CHECK-NEXT:    adds w9, w9, #1222; CHECK-NEXT:    csinv w9, w9, wzr, lo223; CHECK-NEXT:    str w9, [x8]224; CHECK-NEXT:    ldr w8, [x10]225; CHECK-NEXT:    adds w8, w8, #1226; CHECK-NEXT:    csinv w8, w8, wzr, lo227; CHECK-NEXT:    str w8, [x10]228; CHECK-NEXT:    ret229  %buckets = getelementptr i32, ptr %base, <4 x i32> %indices230  call void @llvm.experimental.vector.histogram.uadd.sat.nxv4p0.i32(<4 x ptr> %buckets, i32 1, <4 x i1> <i1 true, i1 true, i1 true, i1 true>)231  ret void232}233 234define void @histogram_umax_i64(<2 x ptr> %buckets, i64 %inc, <2 x i1> %mask) {235; CHECK-LABEL: histogram_umax_i64:236; CHECK:       // %bb.0:237; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q1238; CHECK-NEXT:    fmov w8, s1239; CHECK-NEXT:    tbnz w8, #0, .LBB6_3240; CHECK-NEXT:  // %bb.1: // %else241; CHECK-NEXT:    mov w8, v1.s[1]242; CHECK-NEXT:    tbnz w8, #0, .LBB6_4243; CHECK-NEXT:  .LBB6_2: // %else2244; CHECK-NEXT:    ret245; CHECK-NEXT:  .LBB6_3: // %cond.histogram.update246; CHECK-NEXT:    fmov x8, d0247; CHECK-NEXT:    ldr x9, [x8]248; CHECK-NEXT:    cmp x9, x0249; CHECK-NEXT:    csel x9, x9, x0, hi250; CHECK-NEXT:    str x9, [x8]251; CHECK-NEXT:    mov w8, v1.s[1]252; CHECK-NEXT:    tbz w8, #0, .LBB6_2253; CHECK-NEXT:  .LBB6_4: // %cond.histogram.update1254; CHECK-NEXT:    mov x8, v0.d[1]255; CHECK-NEXT:    ldr x9, [x8]256; CHECK-NEXT:    cmp x9, x0257; CHECK-NEXT:    csel x9, x9, x0, hi258; CHECK-NEXT:    str x9, [x8]259; CHECK-NEXT:    ret260  call void @llvm.experimental.vector.histogram.umax.nxv2p0.i64(<2 x ptr> %buckets, i64 %inc, <2 x i1> %mask)261  ret void262}263 264define void @histogram_umax_i32_literal(ptr %base, <4 x i32> %indices, <4 x i1> %mask) {265; CHECK-LABEL: histogram_umax_i32_literal:266; CHECK:       // %bb.0:267; CHECK-NEXT:    dup v2.2d, x0268; CHECK-NEXT:    sshll v3.2d, v0.2s, #2269; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q1270; CHECK-NEXT:    umov w8, v1.h[0]271; CHECK-NEXT:    add v3.2d, v2.2d, v3.2d272; CHECK-NEXT:    tbz w8, #0, .LBB7_2273; CHECK-NEXT:  // %bb.1: // %cond.histogram.update274; CHECK-NEXT:    fmov x8, d3275; CHECK-NEXT:    ldr w9, [x8]276; CHECK-NEXT:    cmp w9, #1277; CHECK-NEXT:    csinc w9, w9, wzr, hi278; CHECK-NEXT:    str w9, [x8]279; CHECK-NEXT:  .LBB7_2: // %else280; CHECK-NEXT:    umov w8, v1.h[1]281; CHECK-NEXT:    sshll2 v0.2d, v0.4s, #2282; CHECK-NEXT:    tbz w8, #0, .LBB7_4283; CHECK-NEXT:  // %bb.3: // %cond.histogram.update1284; CHECK-NEXT:    mov x8, v3.d[1]285; CHECK-NEXT:    ldr w9, [x8]286; CHECK-NEXT:    cmp w9, #1287; CHECK-NEXT:    csinc w9, w9, wzr, hi288; CHECK-NEXT:    str w9, [x8]289; CHECK-NEXT:  .LBB7_4: // %else2290; CHECK-NEXT:    umov w8, v1.h[2]291; CHECK-NEXT:    add v0.2d, v2.2d, v0.2d292; CHECK-NEXT:    tbnz w8, #0, .LBB7_7293; CHECK-NEXT:  // %bb.5: // %else4294; CHECK-NEXT:    umov w8, v1.h[3]295; CHECK-NEXT:    tbnz w8, #0, .LBB7_8296; CHECK-NEXT:  .LBB7_6: // %else6297; CHECK-NEXT:    ret298; CHECK-NEXT:  .LBB7_7: // %cond.histogram.update3299; CHECK-NEXT:    fmov x8, d0300; CHECK-NEXT:    ldr w9, [x8]301; CHECK-NEXT:    cmp w9, #1302; CHECK-NEXT:    csinc w9, w9, wzr, hi303; CHECK-NEXT:    str w9, [x8]304; CHECK-NEXT:    umov w8, v1.h[3]305; CHECK-NEXT:    tbz w8, #0, .LBB7_6306; CHECK-NEXT:  .LBB7_8: // %cond.histogram.update5307; CHECK-NEXT:    mov x8, v0.d[1]308; CHECK-NEXT:    ldr w9, [x8]309; CHECK-NEXT:    cmp w9, #1310; CHECK-NEXT:    csinc w9, w9, wzr, hi311; CHECK-NEXT:    str w9, [x8]312; CHECK-NEXT:    ret313  %buckets = getelementptr i32, ptr %base, <4 x i32> %indices314  call void @llvm.experimental.vector.histogram.umax.nxv4p0.i32(<4 x ptr> %buckets, i32 1, <4 x i1> %mask)315  ret void316}317 318define void @histogram_umax_i32_literal_alltruemask(ptr %base, <4 x i32> %indices) {319; CHECK-LABEL: histogram_umax_i32_literal_alltruemask:320; CHECK:       // %bb.0:321; CHECK-NEXT:    dup v1.2d, x0322; CHECK-NEXT:    sshll v2.2d, v0.2s, #2323; CHECK-NEXT:    sshll2 v0.2d, v0.4s, #2324; CHECK-NEXT:    add v2.2d, v1.2d, v2.2d325; CHECK-NEXT:    add v0.2d, v1.2d, v0.2d326; CHECK-NEXT:    fmov x8, d2327; CHECK-NEXT:    mov x10, v2.d[1]328; CHECK-NEXT:    ldr w9, [x8]329; CHECK-NEXT:    cmp w9, #1330; CHECK-NEXT:    csinc w9, w9, wzr, hi331; CHECK-NEXT:    str w9, [x8]332; CHECK-NEXT:    ldr w8, [x10]333; CHECK-NEXT:    cmp w8, #1334; CHECK-NEXT:    csinc w8, w8, wzr, hi335; CHECK-NEXT:    str w8, [x10]336; CHECK-NEXT:    fmov x8, d0337; CHECK-NEXT:    mov x10, v0.d[1]338; CHECK-NEXT:    ldr w9, [x8]339; CHECK-NEXT:    cmp w9, #1340; CHECK-NEXT:    csinc w9, w9, wzr, hi341; CHECK-NEXT:    str w9, [x8]342; CHECK-NEXT:    ldr w8, [x10]343; CHECK-NEXT:    cmp w8, #1344; CHECK-NEXT:    csinc w8, w8, wzr, hi345; CHECK-NEXT:    str w8, [x10]346; CHECK-NEXT:    ret347  %buckets = getelementptr i32, ptr %base, <4 x i32> %indices348  call void @llvm.experimental.vector.histogram.umax.nxv4p0.i32(<4 x ptr> %buckets, i32 1, <4 x i1> <i1 true, i1 true, i1 true, i1 true>)349  ret void350}351 352define void @histogram_umin_i64(<2 x ptr> %buckets, i64 %inc, <2 x i1> %mask) {353; CHECK-LABEL: histogram_umin_i64:354; CHECK:       // %bb.0:355; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q1356; CHECK-NEXT:    fmov w8, s1357; CHECK-NEXT:    tbnz w8, #0, .LBB9_3358; CHECK-NEXT:  // %bb.1: // %else359; CHECK-NEXT:    mov w8, v1.s[1]360; CHECK-NEXT:    tbnz w8, #0, .LBB9_4361; CHECK-NEXT:  .LBB9_2: // %else2362; CHECK-NEXT:    ret363; CHECK-NEXT:  .LBB9_3: // %cond.histogram.update364; CHECK-NEXT:    fmov x8, d0365; CHECK-NEXT:    ldr x9, [x8]366; CHECK-NEXT:    cmp x9, x0367; CHECK-NEXT:    csel x9, x9, x0, lo368; CHECK-NEXT:    str x9, [x8]369; CHECK-NEXT:    mov w8, v1.s[1]370; CHECK-NEXT:    tbz w8, #0, .LBB9_2371; CHECK-NEXT:  .LBB9_4: // %cond.histogram.update1372; CHECK-NEXT:    mov x8, v0.d[1]373; CHECK-NEXT:    ldr x9, [x8]374; CHECK-NEXT:    cmp x9, x0375; CHECK-NEXT:    csel x9, x9, x0, lo376; CHECK-NEXT:    str x9, [x8]377; CHECK-NEXT:    ret378  call void @llvm.experimental.vector.histogram.umin.nxv2p0.i64(<2 x ptr> %buckets, i64 %inc, <2 x i1> %mask)379  ret void380}381 382define void @histogram_umin_i32_literal(ptr %base, <4 x i32> %indices, <4 x i1> %mask) {383; CHECK-LABEL: histogram_umin_i32_literal:384; CHECK:       // %bb.0:385; CHECK-NEXT:    dup v2.2d, x0386; CHECK-NEXT:    sshll v3.2d, v0.2s, #2387; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q1388; CHECK-NEXT:    umov w8, v1.h[0]389; CHECK-NEXT:    add v3.2d, v2.2d, v3.2d390; CHECK-NEXT:    tbz w8, #0, .LBB10_2391; CHECK-NEXT:  // %bb.1: // %cond.histogram.update392; CHECK-NEXT:    fmov x8, d3393; CHECK-NEXT:    ldr w9, [x8]394; CHECK-NEXT:    cmp w9, #1395; CHECK-NEXT:    csinc w9, w9, wzr, lo396; CHECK-NEXT:    str w9, [x8]397; CHECK-NEXT:  .LBB10_2: // %else398; CHECK-NEXT:    umov w8, v1.h[1]399; CHECK-NEXT:    sshll2 v0.2d, v0.4s, #2400; CHECK-NEXT:    tbz w8, #0, .LBB10_4401; CHECK-NEXT:  // %bb.3: // %cond.histogram.update1402; CHECK-NEXT:    mov x8, v3.d[1]403; CHECK-NEXT:    ldr w9, [x8]404; CHECK-NEXT:    cmp w9, #1405; CHECK-NEXT:    csinc w9, w9, wzr, lo406; CHECK-NEXT:    str w9, [x8]407; CHECK-NEXT:  .LBB10_4: // %else2408; CHECK-NEXT:    umov w8, v1.h[2]409; CHECK-NEXT:    add v0.2d, v2.2d, v0.2d410; CHECK-NEXT:    tbnz w8, #0, .LBB10_7411; CHECK-NEXT:  // %bb.5: // %else4412; CHECK-NEXT:    umov w8, v1.h[3]413; CHECK-NEXT:    tbnz w8, #0, .LBB10_8414; CHECK-NEXT:  .LBB10_6: // %else6415; CHECK-NEXT:    ret416; CHECK-NEXT:  .LBB10_7: // %cond.histogram.update3417; CHECK-NEXT:    fmov x8, d0418; CHECK-NEXT:    ldr w9, [x8]419; CHECK-NEXT:    cmp w9, #1420; CHECK-NEXT:    csinc w9, w9, wzr, lo421; CHECK-NEXT:    str w9, [x8]422; CHECK-NEXT:    umov w8, v1.h[3]423; CHECK-NEXT:    tbz w8, #0, .LBB10_6424; CHECK-NEXT:  .LBB10_8: // %cond.histogram.update5425; CHECK-NEXT:    mov x8, v0.d[1]426; CHECK-NEXT:    ldr w9, [x8]427; CHECK-NEXT:    cmp w9, #1428; CHECK-NEXT:    csinc w9, w9, wzr, lo429; CHECK-NEXT:    str w9, [x8]430; CHECK-NEXT:    ret431  %buckets = getelementptr i32, ptr %base, <4 x i32> %indices432  call void @llvm.experimental.vector.histogram.umin.nxv4p0.i32(<4 x ptr> %buckets, i32 1, <4 x i1> %mask)433  ret void434}435 436define void @histogram_umin_i32_literal_alltruemask(ptr %base, <4 x i32> %indices) {437; CHECK-LABEL: histogram_umin_i32_literal_alltruemask:438; CHECK:       // %bb.0:439; CHECK-NEXT:    dup v1.2d, x0440; CHECK-NEXT:    sshll v2.2d, v0.2s, #2441; CHECK-NEXT:    sshll2 v0.2d, v0.4s, #2442; CHECK-NEXT:    add v2.2d, v1.2d, v2.2d443; CHECK-NEXT:    add v0.2d, v1.2d, v0.2d444; CHECK-NEXT:    fmov x8, d2445; CHECK-NEXT:    mov x10, v2.d[1]446; CHECK-NEXT:    ldr w9, [x8]447; CHECK-NEXT:    cmp w9, #1448; CHECK-NEXT:    csinc w9, w9, wzr, lo449; CHECK-NEXT:    str w9, [x8]450; CHECK-NEXT:    ldr w8, [x10]451; CHECK-NEXT:    cmp w8, #1452; CHECK-NEXT:    csinc w8, w8, wzr, lo453; CHECK-NEXT:    str w8, [x10]454; CHECK-NEXT:    fmov x8, d0455; CHECK-NEXT:    mov x10, v0.d[1]456; CHECK-NEXT:    ldr w9, [x8]457; CHECK-NEXT:    cmp w9, #1458; CHECK-NEXT:    csinc w9, w9, wzr, lo459; CHECK-NEXT:    str w9, [x8]460; CHECK-NEXT:    ldr w8, [x10]461; CHECK-NEXT:    cmp w8, #1462; CHECK-NEXT:    csinc w8, w8, wzr, lo463; CHECK-NEXT:    str w8, [x10]464; CHECK-NEXT:    ret465  %buckets = getelementptr i32, ptr %base, <4 x i32> %indices466  call void @llvm.experimental.vector.histogram.umin.nxv4p0.i32(<4 x ptr> %buckets, i32 1, <4 x i1> <i1 true, i1 true, i1 true, i1 true>)467  ret void468}469