brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.6 KiB · ab09cc9 Raw
357 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch64 < %s | FileCheck --check-prefix=LA64 %s3 4define i8 @atomicrmw_usub_cond_i8(ptr %ptr, i8 %val) {5; LA64-LABEL: atomicrmw_usub_cond_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 $a4, $zero, 25511; LA64-NEXT:    ld.w $a5, $a0, 012; LA64-NEXT:    sll.w $a3, $a4, $a313; LA64-NEXT:    nor $a3, $a3, $zero14; LA64-NEXT:    andi $a4, $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 $a6, $a520; LA64-NEXT:    srl.w $a5, $a5, $a221; LA64-NEXT:    andi $a7, $a5, 25522; LA64-NEXT:    sltu $a7, $a7, $a423; LA64-NEXT:    xori $a7, $a7, 124; LA64-NEXT:    sub.d $t0, $a5, $a125; LA64-NEXT:    masknez $a5, $a5, $a726; LA64-NEXT:    maskeqz $a7, $t0, $a727; LA64-NEXT:    or $a5, $a7, $a528; LA64-NEXT:    andi $a5, $a5, 25529; LA64-NEXT:    sll.w $a5, $a5, $a230; LA64-NEXT:    and $a7, $a6, $a331; LA64-NEXT:    or $a7, $a7, $a532; LA64-NEXT:  .LBB0_3: # %atomicrmw.start33; LA64-NEXT:    # Parent Loop BB0_1 Depth=134; LA64-NEXT:    # => This Inner Loop Header: Depth=235; LA64-NEXT:    ll.w $a5, $a0, 036; LA64-NEXT:    bne $a5, $a6, .LBB0_537; LA64-NEXT:  # %bb.4: # %atomicrmw.start38; LA64-NEXT:    # in Loop: Header=BB0_3 Depth=239; LA64-NEXT:    move $t0, $a740; LA64-NEXT:    sc.w $t0, $a0, 041; LA64-NEXT:    beq $t0, $zero, .LBB0_342; LA64-NEXT:    b .LBB0_643; LA64-NEXT:  .LBB0_5: # %atomicrmw.start44; LA64-NEXT:    # in Loop: Header=BB0_1 Depth=145; LA64-NEXT:    dbar 2046; LA64-NEXT:  .LBB0_6: # %atomicrmw.start47; LA64-NEXT:    # in Loop: Header=BB0_1 Depth=148; LA64-NEXT:    bne $a5, $a6, .LBB0_149; LA64-NEXT:  # %bb.2: # %atomicrmw.end50; LA64-NEXT:    srl.w $a0, $a5, $a251; LA64-NEXT:    ret52  %result = atomicrmw usub_cond ptr %ptr, i8 %val seq_cst53  ret i8 %result54}55 56define i16 @atomicrmw_usub_cond_i16(ptr %ptr, i16 %val) {57; LA64-LABEL: atomicrmw_usub_cond_i16:58; LA64:       # %bb.0:59; LA64-NEXT:    slli.d $a3, $a0, 360; LA64-NEXT:    bstrins.d $a0, $zero, 1, 061; LA64-NEXT:    andi $a2, $a3, 2462; LA64-NEXT:    lu12i.w $a4, 1563; LA64-NEXT:    ori $a4, $a4, 409564; LA64-NEXT:    ld.w $a5, $a0, 065; LA64-NEXT:    sll.w $a3, $a4, $a366; LA64-NEXT:    nor $a3, $a3, $zero67; LA64-NEXT:    bstrpick.d $a4, $a1, 15, 068; LA64-NEXT:    .p2align 4, , 1669; LA64-NEXT:  .LBB1_1: # %atomicrmw.start70; LA64-NEXT:    # =>This Loop Header: Depth=171; LA64-NEXT:    # Child Loop BB1_3 Depth 272; LA64-NEXT:    move $a6, $a573; LA64-NEXT:    srl.w $a5, $a5, $a274; LA64-NEXT:    bstrpick.d $a7, $a5, 15, 075; LA64-NEXT:    sltu $a7, $a7, $a476; LA64-NEXT:    xori $a7, $a7, 177; LA64-NEXT:    sub.d $t0, $a5, $a178; LA64-NEXT:    masknez $a5, $a5, $a779; LA64-NEXT:    maskeqz $a7, $t0, $a780; LA64-NEXT:    or $a5, $a7, $a581; LA64-NEXT:    bstrpick.d $a5, $a5, 15, 082; LA64-NEXT:    sll.w $a5, $a5, $a283; LA64-NEXT:    and $a7, $a6, $a384; LA64-NEXT:    or $a7, $a7, $a585; LA64-NEXT:  .LBB1_3: # %atomicrmw.start86; LA64-NEXT:    # Parent Loop BB1_1 Depth=187; LA64-NEXT:    # => This Inner Loop Header: Depth=288; LA64-NEXT:    ll.w $a5, $a0, 089; LA64-NEXT:    bne $a5, $a6, .LBB1_590; LA64-NEXT:  # %bb.4: # %atomicrmw.start91; LA64-NEXT:    # in Loop: Header=BB1_3 Depth=292; LA64-NEXT:    move $t0, $a793; LA64-NEXT:    sc.w $t0, $a0, 094; LA64-NEXT:    beq $t0, $zero, .LBB1_395; LA64-NEXT:    b .LBB1_696; LA64-NEXT:  .LBB1_5: # %atomicrmw.start97; LA64-NEXT:    # in Loop: Header=BB1_1 Depth=198; LA64-NEXT:    dbar 2099; LA64-NEXT:  .LBB1_6: # %atomicrmw.start100; LA64-NEXT:    # in Loop: Header=BB1_1 Depth=1101; LA64-NEXT:    bne $a5, $a6, .LBB1_1102; LA64-NEXT:  # %bb.2: # %atomicrmw.end103; LA64-NEXT:    srl.w $a0, $a5, $a2104; LA64-NEXT:    ret105  %result = atomicrmw usub_cond ptr %ptr, i16 %val seq_cst106  ret i16 %result107}108 109define i32 @atomicrmw_usub_cond_i32(ptr %ptr, i32 %val) {110; LA64-LABEL: atomicrmw_usub_cond_i32:111; LA64:       # %bb.0:112; LA64-NEXT:    ld.w $a2, $a0, 0113; LA64-NEXT:    addi.w $a3, $a1, 0114; LA64-NEXT:    .p2align 4, , 16115; LA64-NEXT:  .LBB2_1: # %atomicrmw.start116; LA64-NEXT:    # =>This Loop Header: Depth=1117; LA64-NEXT:    # Child Loop BB2_3 Depth 2118; LA64-NEXT:    move $a4, $a2119; LA64-NEXT:    sltu $a2, $a2, $a3120; LA64-NEXT:    xori $a2, $a2, 1121; LA64-NEXT:    sub.w $a5, $a4, $a1122; LA64-NEXT:    maskeqz $a5, $a5, $a2123; LA64-NEXT:    masknez $a2, $a4, $a2124; LA64-NEXT:    or $a5, $a5, $a2125; LA64-NEXT:  .LBB2_3: # %atomicrmw.start126; LA64-NEXT:    # Parent Loop BB2_1 Depth=1127; LA64-NEXT:    # => This Inner Loop Header: Depth=2128; LA64-NEXT:    ll.w $a2, $a0, 0129; LA64-NEXT:    bne $a2, $a4, .LBB2_5130; LA64-NEXT:  # %bb.4: # %atomicrmw.start131; LA64-NEXT:    # in Loop: Header=BB2_3 Depth=2132; LA64-NEXT:    move $a6, $a5133; LA64-NEXT:    sc.w $a6, $a0, 0134; LA64-NEXT:    beq $a6, $zero, .LBB2_3135; LA64-NEXT:    b .LBB2_6136; LA64-NEXT:  .LBB2_5: # %atomicrmw.start137; LA64-NEXT:    # in Loop: Header=BB2_1 Depth=1138; LA64-NEXT:    dbar 20139; LA64-NEXT:  .LBB2_6: # %atomicrmw.start140; LA64-NEXT:    # in Loop: Header=BB2_1 Depth=1141; LA64-NEXT:    bne $a2, $a4, .LBB2_1142; LA64-NEXT:  # %bb.2: # %atomicrmw.end143; LA64-NEXT:    move $a0, $a2144; LA64-NEXT:    ret145  %result = atomicrmw usub_cond ptr %ptr, i32 %val seq_cst146  ret i32 %result147}148 149define i64 @atomicrmw_usub_cond_i64(ptr %ptr, i64 %val) {150; LA64-LABEL: atomicrmw_usub_cond_i64:151; LA64:       # %bb.0:152; LA64-NEXT:    ld.d $a2, $a0, 0153; LA64-NEXT:    .p2align 4, , 16154; LA64-NEXT:  .LBB3_1: # %atomicrmw.start155; LA64-NEXT:    # =>This Loop Header: Depth=1156; LA64-NEXT:    # Child Loop BB3_3 Depth 2157; LA64-NEXT:    move $a3, $a2158; LA64-NEXT:    sltu $a2, $a2, $a1159; LA64-NEXT:    xori $a2, $a2, 1160; LA64-NEXT:    sub.d $a4, $a3, $a1161; LA64-NEXT:    maskeqz $a4, $a4, $a2162; LA64-NEXT:    masknez $a2, $a3, $a2163; LA64-NEXT:    or $a4, $a4, $a2164; LA64-NEXT:  .LBB3_3: # %atomicrmw.start165; LA64-NEXT:    # Parent Loop BB3_1 Depth=1166; LA64-NEXT:    # => This Inner Loop Header: Depth=2167; LA64-NEXT:    ll.d $a2, $a0, 0168; LA64-NEXT:    bne $a2, $a3, .LBB3_5169; LA64-NEXT:  # %bb.4: # %atomicrmw.start170; LA64-NEXT:    # in Loop: Header=BB3_3 Depth=2171; LA64-NEXT:    move $a5, $a4172; LA64-NEXT:    sc.d $a5, $a0, 0173; LA64-NEXT:    beq $a5, $zero, .LBB3_3174; LA64-NEXT:    b .LBB3_6175; LA64-NEXT:  .LBB3_5: # %atomicrmw.start176; LA64-NEXT:    # in Loop: Header=BB3_1 Depth=1177; LA64-NEXT:    dbar 20178; LA64-NEXT:  .LBB3_6: # %atomicrmw.start179; LA64-NEXT:    # in Loop: Header=BB3_1 Depth=1180; LA64-NEXT:    bne $a2, $a3, .LBB3_1181; LA64-NEXT:  # %bb.2: # %atomicrmw.end182; LA64-NEXT:    move $a0, $a2183; LA64-NEXT:    ret184  %result = atomicrmw usub_cond ptr %ptr, i64 %val seq_cst185  ret i64 %result186}187 188define i8 @atomicrmw_usub_sat_i8(ptr %ptr, i8 %val) {189; LA64-LABEL: atomicrmw_usub_sat_i8:190; LA64:       # %bb.0:191; LA64-NEXT:    slli.d $a3, $a0, 3192; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0193; LA64-NEXT:    andi $a2, $a3, 24194; LA64-NEXT:    ori $a5, $zero, 255195; LA64-NEXT:    ld.w $a4, $a0, 0196; LA64-NEXT:    sll.w $a3, $a5, $a3197; LA64-NEXT:    nor $a3, $a3, $zero198; LA64-NEXT:    andi $a1, $a1, 255199; LA64-NEXT:    .p2align 4, , 16200; LA64-NEXT:  .LBB4_1: # %atomicrmw.start201; LA64-NEXT:    # =>This Loop Header: Depth=1202; LA64-NEXT:    # Child Loop BB4_3 Depth 2203; LA64-NEXT:    move $a5, $a4204; LA64-NEXT:    srl.w $a4, $a4, $a2205; LA64-NEXT:    andi $a4, $a4, 255206; LA64-NEXT:    sub.d $a6, $a4, $a1207; LA64-NEXT:    sltu $a4, $a4, $a6208; LA64-NEXT:    masknez $a4, $a6, $a4209; LA64-NEXT:    sll.w $a4, $a4, $a2210; LA64-NEXT:    and $a6, $a5, $a3211; LA64-NEXT:    or $a6, $a6, $a4212; LA64-NEXT:  .LBB4_3: # %atomicrmw.start213; LA64-NEXT:    # Parent Loop BB4_1 Depth=1214; LA64-NEXT:    # => This Inner Loop Header: Depth=2215; LA64-NEXT:    ll.w $a4, $a0, 0216; LA64-NEXT:    bne $a4, $a5, .LBB4_5217; LA64-NEXT:  # %bb.4: # %atomicrmw.start218; LA64-NEXT:    # in Loop: Header=BB4_3 Depth=2219; LA64-NEXT:    move $a7, $a6220; LA64-NEXT:    sc.w $a7, $a0, 0221; LA64-NEXT:    beq $a7, $zero, .LBB4_3222; LA64-NEXT:    b .LBB4_6223; LA64-NEXT:  .LBB4_5: # %atomicrmw.start224; LA64-NEXT:    # in Loop: Header=BB4_1 Depth=1225; LA64-NEXT:    dbar 20226; LA64-NEXT:  .LBB4_6: # %atomicrmw.start227; LA64-NEXT:    # in Loop: Header=BB4_1 Depth=1228; LA64-NEXT:    bne $a4, $a5, .LBB4_1229; LA64-NEXT:  # %bb.2: # %atomicrmw.end230; LA64-NEXT:    srl.w $a0, $a4, $a2231; LA64-NEXT:    ret232  %result = atomicrmw usub_sat ptr %ptr, i8 %val seq_cst233  ret i8 %result234}235 236define i16 @atomicrmw_usub_sat_i16(ptr %ptr, i16 %val) {237; LA64-LABEL: atomicrmw_usub_sat_i16:238; LA64:       # %bb.0:239; LA64-NEXT:    slli.d $a3, $a0, 3240; LA64-NEXT:    bstrins.d $a0, $zero, 1, 0241; LA64-NEXT:    andi $a2, $a3, 24242; LA64-NEXT:    lu12i.w $a4, 15243; LA64-NEXT:    ori $a5, $a4, 4095244; LA64-NEXT:    ld.w $a4, $a0, 0245; LA64-NEXT:    sll.w $a3, $a5, $a3246; LA64-NEXT:    nor $a3, $a3, $zero247; LA64-NEXT:    bstrpick.d $a1, $a1, 15, 0248; LA64-NEXT:    .p2align 4, , 16249; LA64-NEXT:  .LBB5_1: # %atomicrmw.start250; LA64-NEXT:    # =>This Loop Header: Depth=1251; LA64-NEXT:    # Child Loop BB5_3 Depth 2252; LA64-NEXT:    move $a5, $a4253; LA64-NEXT:    srl.w $a4, $a4, $a2254; LA64-NEXT:    bstrpick.d $a4, $a4, 15, 0255; LA64-NEXT:    sub.d $a6, $a4, $a1256; LA64-NEXT:    sltu $a4, $a4, $a6257; LA64-NEXT:    masknez $a4, $a6, $a4258; LA64-NEXT:    sll.w $a4, $a4, $a2259; LA64-NEXT:    and $a6, $a5, $a3260; LA64-NEXT:    or $a6, $a6, $a4261; LA64-NEXT:  .LBB5_3: # %atomicrmw.start262; LA64-NEXT:    # Parent Loop BB5_1 Depth=1263; LA64-NEXT:    # => This Inner Loop Header: Depth=2264; LA64-NEXT:    ll.w $a4, $a0, 0265; LA64-NEXT:    bne $a4, $a5, .LBB5_5266; LA64-NEXT:  # %bb.4: # %atomicrmw.start267; LA64-NEXT:    # in Loop: Header=BB5_3 Depth=2268; LA64-NEXT:    move $a7, $a6269; LA64-NEXT:    sc.w $a7, $a0, 0270; LA64-NEXT:    beq $a7, $zero, .LBB5_3271; LA64-NEXT:    b .LBB5_6272; LA64-NEXT:  .LBB5_5: # %atomicrmw.start273; LA64-NEXT:    # in Loop: Header=BB5_1 Depth=1274; LA64-NEXT:    dbar 20275; LA64-NEXT:  .LBB5_6: # %atomicrmw.start276; LA64-NEXT:    # in Loop: Header=BB5_1 Depth=1277; LA64-NEXT:    bne $a4, $a5, .LBB5_1278; LA64-NEXT:  # %bb.2: # %atomicrmw.end279; LA64-NEXT:    srl.w $a0, $a4, $a2280; LA64-NEXT:    ret281  %result = atomicrmw usub_sat ptr %ptr, i16 %val seq_cst282  ret i16 %result283}284 285define i32 @atomicrmw_usub_sat_i32(ptr %ptr, i32 %val) {286; LA64-LABEL: atomicrmw_usub_sat_i32:287; LA64:       # %bb.0:288; LA64-NEXT:    ld.w $a2, $a0, 0289; LA64-NEXT:    addi.w $a1, $a1, 0290; LA64-NEXT:    .p2align 4, , 16291; LA64-NEXT:  .LBB6_1: # %atomicrmw.start292; LA64-NEXT:    # =>This Loop Header: Depth=1293; LA64-NEXT:    # Child Loop BB6_3 Depth 2294; LA64-NEXT:    move $a3, $a2295; LA64-NEXT:    sub.d $a2, $a2, $a1296; LA64-NEXT:    sltu $a4, $a3, $a2297; LA64-NEXT:    masknez $a4, $a2, $a4298; LA64-NEXT:  .LBB6_3: # %atomicrmw.start299; LA64-NEXT:    # Parent Loop BB6_1 Depth=1300; LA64-NEXT:    # => This Inner Loop Header: Depth=2301; LA64-NEXT:    ll.w $a2, $a0, 0302; LA64-NEXT:    bne $a2, $a3, .LBB6_5303; LA64-NEXT:  # %bb.4: # %atomicrmw.start304; LA64-NEXT:    # in Loop: Header=BB6_3 Depth=2305; LA64-NEXT:    move $a5, $a4306; LA64-NEXT:    sc.w $a5, $a0, 0307; LA64-NEXT:    beq $a5, $zero, .LBB6_3308; LA64-NEXT:    b .LBB6_6309; LA64-NEXT:  .LBB6_5: # %atomicrmw.start310; LA64-NEXT:    # in Loop: Header=BB6_1 Depth=1311; LA64-NEXT:    dbar 20312; LA64-NEXT:  .LBB6_6: # %atomicrmw.start313; LA64-NEXT:    # in Loop: Header=BB6_1 Depth=1314; LA64-NEXT:    bne $a2, $a3, .LBB6_1315; LA64-NEXT:  # %bb.2: # %atomicrmw.end316; LA64-NEXT:    move $a0, $a2317; LA64-NEXT:    ret318  %result = atomicrmw usub_sat ptr %ptr, i32 %val seq_cst319  ret i32 %result320}321 322define i64 @atomicrmw_usub_sat_i64(ptr %ptr, i64 %val) {323; LA64-LABEL: atomicrmw_usub_sat_i64:324; LA64:       # %bb.0:325; LA64-NEXT:    ld.d $a2, $a0, 0326; LA64-NEXT:    .p2align 4, , 16327; LA64-NEXT:  .LBB7_1: # %atomicrmw.start328; LA64-NEXT:    # =>This Loop Header: Depth=1329; LA64-NEXT:    # Child Loop BB7_3 Depth 2330; LA64-NEXT:    move $a3, $a2331; LA64-NEXT:    sub.d $a2, $a2, $a1332; LA64-NEXT:    sltu $a4, $a3, $a2333; LA64-NEXT:    masknez $a4, $a2, $a4334; LA64-NEXT:  .LBB7_3: # %atomicrmw.start335; LA64-NEXT:    # Parent Loop BB7_1 Depth=1336; LA64-NEXT:    # => This Inner Loop Header: Depth=2337; LA64-NEXT:    ll.d $a2, $a0, 0338; LA64-NEXT:    bne $a2, $a3, .LBB7_5339; LA64-NEXT:  # %bb.4: # %atomicrmw.start340; LA64-NEXT:    # in Loop: Header=BB7_3 Depth=2341; LA64-NEXT:    move $a5, $a4342; LA64-NEXT:    sc.d $a5, $a0, 0343; LA64-NEXT:    beq $a5, $zero, .LBB7_3344; LA64-NEXT:    b .LBB7_6345; LA64-NEXT:  .LBB7_5: # %atomicrmw.start346; LA64-NEXT:    # in Loop: Header=BB7_1 Depth=1347; LA64-NEXT:    dbar 20348; LA64-NEXT:  .LBB7_6: # %atomicrmw.start349; LA64-NEXT:    # in Loop: Header=BB7_1 Depth=1350; LA64-NEXT:    bne $a2, $a3, .LBB7_1351; LA64-NEXT:  # %bb.2: # %atomicrmw.end352; LA64-NEXT:    move $a0, $a2353; LA64-NEXT:    ret354  %result = atomicrmw usub_sat ptr %ptr, i64 %val seq_cst355  ret i64 %result356}357