brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.3 KiB · c9e4a05 Raw
375 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck --check-prefix=LA64 %s3 4define i8 @atomicrmw_uinc_wrap_i8(ptr %ptr, i8 %val) {5; LA64-LABEL: atomicrmw_uinc_wrap_i8:6; LA64:       # %bb.0:7; LA64-NEXT:    slli.d $a3, $a0, 38; LA64-NEXT:    bstrins.d $a0, $zero, 1, 09; LA64-NEXT:    andi $a2, $a3, 2410; LA64-NEXT:    ori $a5, $zero, 25511; LA64-NEXT:    ld.w $a4, $a0, 012; LA64-NEXT:    sll.w $a3, $a5, $a313; LA64-NEXT:    nor $a3, $a3, $zero14; LA64-NEXT:    andi $a1, $a1, 25515; LA64-NEXT:    .p2align 4, , 1616; LA64-NEXT:  .LBB0_1: # %atomicrmw.start17; LA64-NEXT:    # =>This Loop Header: Depth=118; LA64-NEXT:    # Child Loop BB0_3 Depth 219; LA64-NEXT:    move $a5, $a420; LA64-NEXT:    srl.w $a4, $a4, $a221; LA64-NEXT:    andi $a6, $a4, 25522; LA64-NEXT:    addi.d $a4, $a4, 123; LA64-NEXT:    sltu $a6, $a6, $a124; LA64-NEXT:    xori $a6, $a6, 125; LA64-NEXT:    masknez $a4, $a4, $a626; LA64-NEXT:    andi $a4, $a4, 25527; LA64-NEXT:    sll.w $a4, $a4, $a228; LA64-NEXT:    and $a6, $a5, $a329; LA64-NEXT:    or $a6, $a6, $a430; LA64-NEXT:  .LBB0_3: # %atomicrmw.start31; LA64-NEXT:    # Parent Loop BB0_1 Depth=132; LA64-NEXT:    # => This Inner Loop Header: Depth=233; LA64-NEXT:    ll.w $a4, $a0, 034; LA64-NEXT:    bne $a4, $a5, .LBB0_535; LA64-NEXT:  # %bb.4: # %atomicrmw.start36; LA64-NEXT:    # in Loop: Header=BB0_3 Depth=237; LA64-NEXT:    move $a7, $a638; LA64-NEXT:    sc.w $a7, $a0, 039; LA64-NEXT:    beq $a7, $zero, .LBB0_340; LA64-NEXT:    b .LBB0_641; LA64-NEXT:  .LBB0_5: # %atomicrmw.start42; LA64-NEXT:    # in Loop: Header=BB0_1 Depth=143; LA64-NEXT:    dbar 2044; LA64-NEXT:  .LBB0_6: # %atomicrmw.start45; LA64-NEXT:    # in Loop: Header=BB0_1 Depth=146; LA64-NEXT:    bne $a4, $a5, .LBB0_147; LA64-NEXT:  # %bb.2: # %atomicrmw.end48; LA64-NEXT:    srl.w $a0, $a4, $a249; LA64-NEXT:    ret50  %result = atomicrmw uinc_wrap ptr %ptr, i8 %val seq_cst51  ret i8 %result52}53 54define i16 @atomicrmw_uinc_wrap_i16(ptr %ptr, i16 %val) {55; LA64-LABEL: atomicrmw_uinc_wrap_i16:56; LA64:       # %bb.0:57; LA64-NEXT:    slli.d $a3, $a0, 358; LA64-NEXT:    bstrins.d $a0, $zero, 1, 059; LA64-NEXT:    andi $a2, $a3, 2460; LA64-NEXT:    lu12i.w $a4, 1561; LA64-NEXT:    ori $a5, $a4, 409562; LA64-NEXT:    ld.w $a4, $a0, 063; LA64-NEXT:    sll.w $a3, $a5, $a364; LA64-NEXT:    nor $a3, $a3, $zero65; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 066; LA64-NEXT:    .p2align 4, , 1667; LA64-NEXT:  .LBB1_1: # %atomicrmw.start68; LA64-NEXT:    # =>This Loop Header: Depth=169; LA64-NEXT:    # Child Loop BB1_3 Depth 270; LA64-NEXT:    move $a5, $a471; LA64-NEXT:    srl.w $a4, $a4, $a272; LA64-NEXT:    bstrpick.d $a6, $a4, 15, 073; LA64-NEXT:    addi.d $a4, $a4, 174; LA64-NEXT:    sltu $a6, $a6, $a175; LA64-NEXT:    xori $a6, $a6, 176; LA64-NEXT:    masknez $a4, $a4, $a677; LA64-NEXT:    bstrpick.d $a4, $a4, 15, 078; LA64-NEXT:    sll.w $a4, $a4, $a279; LA64-NEXT:    and $a6, $a5, $a380; LA64-NEXT:    or $a6, $a6, $a481; LA64-NEXT:  .LBB1_3: # %atomicrmw.start82; LA64-NEXT:    # Parent Loop BB1_1 Depth=183; LA64-NEXT:    # => This Inner Loop Header: Depth=284; LA64-NEXT:    ll.w $a4, $a0, 085; LA64-NEXT:    bne $a4, $a5, .LBB1_586; LA64-NEXT:  # %bb.4: # %atomicrmw.start87; LA64-NEXT:    # in Loop: Header=BB1_3 Depth=288; LA64-NEXT:    move $a7, $a689; LA64-NEXT:    sc.w $a7, $a0, 090; LA64-NEXT:    beq $a7, $zero, .LBB1_391; LA64-NEXT:    b .LBB1_692; LA64-NEXT:  .LBB1_5: # %atomicrmw.start93; LA64-NEXT:    # in Loop: Header=BB1_1 Depth=194; LA64-NEXT:    dbar 2095; LA64-NEXT:  .LBB1_6: # %atomicrmw.start96; LA64-NEXT:    # in Loop: Header=BB1_1 Depth=197; LA64-NEXT:    bne $a4, $a5, .LBB1_198; LA64-NEXT:  # %bb.2: # %atomicrmw.end99; LA64-NEXT:    srl.w $a0, $a4, $a2100; LA64-NEXT:    ret101  %result = atomicrmw uinc_wrap ptr %ptr, i16 %val seq_cst102  ret i16 %result103}104 105define i32 @atomicrmw_uinc_wrap_i32(ptr %ptr, i32 %val) {106; LA64-LABEL: atomicrmw_uinc_wrap_i32:107; LA64:       # %bb.0:108; LA64-NEXT:    ld.w $a2, $a0, 0109; LA64-NEXT:    addi.w $a1, $a1, 0110; LA64-NEXT:    .p2align 4, , 16111; LA64-NEXT:  .LBB2_1: # %atomicrmw.start112; LA64-NEXT:    # =>This Loop Header: Depth=1113; LA64-NEXT:    # Child Loop BB2_3 Depth 2114; LA64-NEXT:    move $a3, $a2115; LA64-NEXT:    addi.w $a2, $a2, 1116; LA64-NEXT:    sltu $a4, $a3, $a1117; LA64-NEXT:    xori $a4, $a4, 1118; LA64-NEXT:    masknez $a4, $a2, $a4119; LA64-NEXT:  .LBB2_3: # %atomicrmw.start120; LA64-NEXT:    # Parent Loop BB2_1 Depth=1121; LA64-NEXT:    # => This Inner Loop Header: Depth=2122; LA64-NEXT:    ll.w $a2, $a0, 0123; LA64-NEXT:    bne $a2, $a3, .LBB2_5124; LA64-NEXT:  # %bb.4: # %atomicrmw.start125; LA64-NEXT:    # in Loop: Header=BB2_3 Depth=2126; LA64-NEXT:    move $a5, $a4127; LA64-NEXT:    sc.w $a5, $a0, 0128; LA64-NEXT:    beq $a5, $zero, .LBB2_3129; LA64-NEXT:    b .LBB2_6130; LA64-NEXT:  .LBB2_5: # %atomicrmw.start131; LA64-NEXT:    # in Loop: Header=BB2_1 Depth=1132; LA64-NEXT:    dbar 20133; LA64-NEXT:  .LBB2_6: # %atomicrmw.start134; LA64-NEXT:    # in Loop: Header=BB2_1 Depth=1135; LA64-NEXT:    bne $a2, $a3, .LBB2_1136; LA64-NEXT:  # %bb.2: # %atomicrmw.end137; LA64-NEXT:    move $a0, $a2138; LA64-NEXT:    ret139  %result = atomicrmw uinc_wrap ptr %ptr, i32 %val seq_cst140  ret i32 %result141}142 143define i64 @atomicrmw_uinc_wrap_i64(ptr %ptr, i64 %val) {144; LA64-LABEL: atomicrmw_uinc_wrap_i64:145; LA64:       # %bb.0:146; LA64-NEXT:    ld.d $a2, $a0, 0147; LA64-NEXT:    .p2align 4, , 16148; LA64-NEXT:  .LBB3_1: # %atomicrmw.start149; LA64-NEXT:    # =>This Loop Header: Depth=1150; LA64-NEXT:    # Child Loop BB3_3 Depth 2151; LA64-NEXT:    move $a3, $a2152; LA64-NEXT:    addi.d $a2, $a2, 1153; LA64-NEXT:    sltu $a4, $a3, $a1154; LA64-NEXT:    xori $a4, $a4, 1155; LA64-NEXT:    masknez $a4, $a2, $a4156; LA64-NEXT:  .LBB3_3: # %atomicrmw.start157; LA64-NEXT:    # Parent Loop BB3_1 Depth=1158; LA64-NEXT:    # => This Inner Loop Header: Depth=2159; LA64-NEXT:    ll.d $a2, $a0, 0160; LA64-NEXT:    bne $a2, $a3, .LBB3_5161; LA64-NEXT:  # %bb.4: # %atomicrmw.start162; LA64-NEXT:    # in Loop: Header=BB3_3 Depth=2163; LA64-NEXT:    move $a5, $a4164; LA64-NEXT:    sc.d $a5, $a0, 0165; LA64-NEXT:    beq $a5, $zero, .LBB3_3166; LA64-NEXT:    b .LBB3_6167; LA64-NEXT:  .LBB3_5: # %atomicrmw.start168; LA64-NEXT:    # in Loop: Header=BB3_1 Depth=1169; LA64-NEXT:    dbar 20170; LA64-NEXT:  .LBB3_6: # %atomicrmw.start171; LA64-NEXT:    # in Loop: Header=BB3_1 Depth=1172; LA64-NEXT:    bne $a2, $a3, .LBB3_1173; LA64-NEXT:  # %bb.2: # %atomicrmw.end174; LA64-NEXT:    move $a0, $a2175; LA64-NEXT:    ret176  %result = atomicrmw uinc_wrap ptr %ptr, i64 %val seq_cst177  ret i64 %result178}179 180define i8 @atomicrmw_udec_wrap_i8(ptr %ptr, i8 %val) {181; LA64-LABEL: atomicrmw_udec_wrap_i8:182; LA64:       # %bb.0:183; LA64-NEXT:    slli.d $a3, $a0, 3184; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0185; LA64-NEXT:    andi $a2, $a3, 24186; LA64-NEXT:    ori $a4, $zero, 255187; LA64-NEXT:    ld.w $a5, $a0, 0188; LA64-NEXT:    sll.w $a3, $a4, $a3189; LA64-NEXT:    nor $a3, $a3, $zero190; LA64-NEXT:    andi $a4, $a1, 255191; LA64-NEXT:    .p2align 4, , 16192; LA64-NEXT:  .LBB4_1: # %atomicrmw.start193; LA64-NEXT:    # =>This Loop Header: Depth=1194; LA64-NEXT:    # Child Loop BB4_3 Depth 2195; LA64-NEXT:    move $a6, $a5196; LA64-NEXT:    srl.w $a5, $a5, $a2197; LA64-NEXT:    andi $a7, $a5, 255198; LA64-NEXT:    addi.d $a5, $a5, -1199; LA64-NEXT:    sltui $t0, $a7, 1200; LA64-NEXT:    sltu $a7, $a4, $a7201; LA64-NEXT:    masknez $a5, $a5, $a7202; LA64-NEXT:    maskeqz $a7, $a1, $a7203; LA64-NEXT:    or $a5, $a7, $a5204; LA64-NEXT:    masknez $a5, $a5, $t0205; LA64-NEXT:    maskeqz $a7, $a1, $t0206; LA64-NEXT:    or $a5, $a7, $a5207; LA64-NEXT:    andi $a5, $a5, 255208; LA64-NEXT:    sll.w $a5, $a5, $a2209; LA64-NEXT:    and $a7, $a6, $a3210; LA64-NEXT:    or $a7, $a7, $a5211; LA64-NEXT:  .LBB4_3: # %atomicrmw.start212; LA64-NEXT:    # Parent Loop BB4_1 Depth=1213; LA64-NEXT:    # => This Inner Loop Header: Depth=2214; LA64-NEXT:    ll.w $a5, $a0, 0215; LA64-NEXT:    bne $a5, $a6, .LBB4_5216; LA64-NEXT:  # %bb.4: # %atomicrmw.start217; LA64-NEXT:    # in Loop: Header=BB4_3 Depth=2218; LA64-NEXT:    move $t0, $a7219; LA64-NEXT:    sc.w $t0, $a0, 0220; LA64-NEXT:    beq $t0, $zero, .LBB4_3221; LA64-NEXT:    b .LBB4_6222; LA64-NEXT:  .LBB4_5: # %atomicrmw.start223; LA64-NEXT:    # in Loop: Header=BB4_1 Depth=1224; LA64-NEXT:    dbar 20225; LA64-NEXT:  .LBB4_6: # %atomicrmw.start226; LA64-NEXT:    # in Loop: Header=BB4_1 Depth=1227; LA64-NEXT:    bne $a5, $a6, .LBB4_1228; LA64-NEXT:  # %bb.2: # %atomicrmw.end229; LA64-NEXT:    srl.w $a0, $a5, $a2230; LA64-NEXT:    ret231  %result = atomicrmw udec_wrap ptr %ptr, i8 %val seq_cst232  ret i8 %result233}234 235define i16 @atomicrmw_udec_wrap_i16(ptr %ptr, i16 %val) {236; LA64-LABEL: atomicrmw_udec_wrap_i16:237; LA64:       # %bb.0:238; LA64-NEXT:    slli.d $a3, $a0, 3239; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0240; LA64-NEXT:    andi $a2, $a3, 24241; LA64-NEXT:    lu12i.w $a4, 15242; LA64-NEXT:    ori $a4, $a4, 4095243; LA64-NEXT:    ld.w $a5, $a0, 0244; LA64-NEXT:    sll.w $a3, $a4, $a3245; LA64-NEXT:    nor $a3, $a3, $zero246; LA64-NEXT:    bstrpick.d $a4, $a1, 15, 0247; LA64-NEXT:    .p2align 4, , 16248; LA64-NEXT:  .LBB5_1: # %atomicrmw.start249; LA64-NEXT:    # =>This Loop Header: Depth=1250; LA64-NEXT:    # Child Loop BB5_3 Depth 2251; LA64-NEXT:    move $a6, $a5252; LA64-NEXT:    srl.w $a5, $a5, $a2253; LA64-NEXT:    bstrpick.d $a7, $a5, 15, 0254; LA64-NEXT:    addi.d $a5, $a5, -1255; LA64-NEXT:    sltui $t0, $a7, 1256; LA64-NEXT:    sltu $a7, $a4, $a7257; LA64-NEXT:    masknez $a5, $a5, $a7258; LA64-NEXT:    maskeqz $a7, $a1, $a7259; LA64-NEXT:    or $a5, $a7, $a5260; LA64-NEXT:    masknez $a5, $a5, $t0261; LA64-NEXT:    maskeqz $a7, $a1, $t0262; LA64-NEXT:    or $a5, $a7, $a5263; LA64-NEXT:    bstrpick.d $a5, $a5, 15, 0264; LA64-NEXT:    sll.w $a5, $a5, $a2265; LA64-NEXT:    and $a7, $a6, $a3266; LA64-NEXT:    or $a7, $a7, $a5267; LA64-NEXT:  .LBB5_3: # %atomicrmw.start268; LA64-NEXT:    # Parent Loop BB5_1 Depth=1269; LA64-NEXT:    # => This Inner Loop Header: Depth=2270; LA64-NEXT:    ll.w $a5, $a0, 0271; LA64-NEXT:    bne $a5, $a6, .LBB5_5272; LA64-NEXT:  # %bb.4: # %atomicrmw.start273; LA64-NEXT:    # in Loop: Header=BB5_3 Depth=2274; LA64-NEXT:    move $t0, $a7275; LA64-NEXT:    sc.w $t0, $a0, 0276; LA64-NEXT:    beq $t0, $zero, .LBB5_3277; LA64-NEXT:    b .LBB5_6278; LA64-NEXT:  .LBB5_5: # %atomicrmw.start279; LA64-NEXT:    # in Loop: Header=BB5_1 Depth=1280; LA64-NEXT:    dbar 20281; LA64-NEXT:  .LBB5_6: # %atomicrmw.start282; LA64-NEXT:    # in Loop: Header=BB5_1 Depth=1283; LA64-NEXT:    bne $a5, $a6, .LBB5_1284; LA64-NEXT:  # %bb.2: # %atomicrmw.end285; LA64-NEXT:    srl.w $a0, $a5, $a2286; LA64-NEXT:    ret287  %result = atomicrmw udec_wrap ptr %ptr, i16 %val seq_cst288  ret i16 %result289}290 291define i32 @atomicrmw_udec_wrap_i32(ptr %ptr, i32 %val) {292; LA64-LABEL: atomicrmw_udec_wrap_i32:293; LA64:       # %bb.0:294; LA64-NEXT:    ld.w $a2, $a0, 0295; LA64-NEXT:    addi.w $a3, $a1, 0296; LA64-NEXT:    .p2align 4, , 16297; LA64-NEXT:  .LBB6_1: # %atomicrmw.start298; LA64-NEXT:    # =>This Loop Header: Depth=1299; LA64-NEXT:    # Child Loop BB6_3 Depth 2300; LA64-NEXT:    move $a4, $a2301; LA64-NEXT:    addi.w $a2, $a2, -1302; LA64-NEXT:    sltui $a5, $a4, 1303; LA64-NEXT:    sltu $a6, $a3, $a4304; LA64-NEXT:    masknez $a2, $a2, $a6305; LA64-NEXT:    maskeqz $a6, $a1, $a6306; LA64-NEXT:    or $a2, $a6, $a2307; LA64-NEXT:    masknez $a2, $a2, $a5308; LA64-NEXT:    maskeqz $a5, $a1, $a5309; LA64-NEXT:    or $a5, $a5, $a2310; LA64-NEXT:  .LBB6_3: # %atomicrmw.start311; LA64-NEXT:    # Parent Loop BB6_1 Depth=1312; LA64-NEXT:    # => This Inner Loop Header: Depth=2313; LA64-NEXT:    ll.w $a2, $a0, 0314; LA64-NEXT:    bne $a2, $a4, .LBB6_5315; LA64-NEXT:  # %bb.4: # %atomicrmw.start316; LA64-NEXT:    # in Loop: Header=BB6_3 Depth=2317; LA64-NEXT:    move $a6, $a5318; LA64-NEXT:    sc.w $a6, $a0, 0319; LA64-NEXT:    beq $a6, $zero, .LBB6_3320; LA64-NEXT:    b .LBB6_6321; LA64-NEXT:  .LBB6_5: # %atomicrmw.start322; LA64-NEXT:    # in Loop: Header=BB6_1 Depth=1323; LA64-NEXT:    dbar 20324; LA64-NEXT:  .LBB6_6: # %atomicrmw.start325; LA64-NEXT:    # in Loop: Header=BB6_1 Depth=1326; LA64-NEXT:    bne $a2, $a4, .LBB6_1327; LA64-NEXT:  # %bb.2: # %atomicrmw.end328; LA64-NEXT:    move $a0, $a2329; LA64-NEXT:    ret330  %result = atomicrmw udec_wrap ptr %ptr, i32 %val seq_cst331  ret i32 %result332}333 334define i64 @atomicrmw_udec_wrap_i64(ptr %ptr, i64 %val) {335; LA64-LABEL: atomicrmw_udec_wrap_i64:336; LA64:       # %bb.0:337; LA64-NEXT:    ld.d $a2, $a0, 0338; LA64-NEXT:    .p2align 4, , 16339; LA64-NEXT:  .LBB7_1: # %atomicrmw.start340; LA64-NEXT:    # =>This Loop Header: Depth=1341; LA64-NEXT:    # Child Loop BB7_3 Depth 2342; LA64-NEXT:    move $a3, $a2343; LA64-NEXT:    addi.d $a2, $a2, -1344; LA64-NEXT:    sltui $a4, $a3, 1345; LA64-NEXT:    sltu $a5, $a1, $a3346; LA64-NEXT:    masknez $a2, $a2, $a5347; LA64-NEXT:    maskeqz $a5, $a1, $a5348; LA64-NEXT:    or $a2, $a5, $a2349; LA64-NEXT:    masknez $a2, $a2, $a4350; LA64-NEXT:    maskeqz $a4, $a1, $a4351; LA64-NEXT:    or $a4, $a4, $a2352; LA64-NEXT:  .LBB7_3: # %atomicrmw.start353; LA64-NEXT:    # Parent Loop BB7_1 Depth=1354; LA64-NEXT:    # => This Inner Loop Header: Depth=2355; LA64-NEXT:    ll.d $a2, $a0, 0356; LA64-NEXT:    bne $a2, $a3, .LBB7_5357; LA64-NEXT:  # %bb.4: # %atomicrmw.start358; LA64-NEXT:    # in Loop: Header=BB7_3 Depth=2359; LA64-NEXT:    move $a5, $a4360; LA64-NEXT:    sc.d $a5, $a0, 0361; LA64-NEXT:    beq $a5, $zero, .LBB7_3362; LA64-NEXT:    b .LBB7_6363; LA64-NEXT:  .LBB7_5: # %atomicrmw.start364; LA64-NEXT:    # in Loop: Header=BB7_1 Depth=1365; LA64-NEXT:    dbar 20366; LA64-NEXT:  .LBB7_6: # %atomicrmw.start367; LA64-NEXT:    # in Loop: Header=BB7_1 Depth=1368; LA64-NEXT:    bne $a2, $a3, .LBB7_1369; LA64-NEXT:  # %bb.2: # %atomicrmw.end370; LA64-NEXT:    move $a0, $a2371; LA64-NEXT:    ret372  %result = atomicrmw udec_wrap ptr %ptr, i64 %val seq_cst373  ret i64 %result374}375