brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.9 KiB · 2fa6b0d Raw
277 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s3 4;;; Test atomicrmw operations5 6@c = common global i8 0, align 47@s = common global i16 0, align 48@i = common global i32 0, align 49@l = common global i64 0, align 410 11; Function Attrs: norecurse nounwind12define signext i8 @test_atomic_fetch_add_1() {13; CHECK-LABEL: test_atomic_fetch_add_1:14; CHECK:       # %bb.0: # %entry15; CHECK-NEXT:    fencem 316; CHECK-NEXT:    lea %s0, c@lo17; CHECK-NEXT:    and %s0, %s0, (32)018; CHECK-NEXT:    lea.sl %s0, c@hi(, %s0)19; CHECK-NEXT:    and %s0, -4, %s020; CHECK-NEXT:    ldl.sx %s2, (, %s0)21; CHECK-NEXT:    lea %s1, -25622; CHECK-NEXT:    and %s1, %s1, (32)023; CHECK-NEXT:  .LBB0_1: # %atomicrmw.start24; CHECK-NEXT:    # =>This Inner Loop Header: Depth=125; CHECK-NEXT:    or %s3, 0, %s226; CHECK-NEXT:    adds.w.sx %s2, 1, %s227; CHECK-NEXT:    and %s2, %s2, (56)028; CHECK-NEXT:    and %s4, %s3, %s129; CHECK-NEXT:    or %s2, %s4, %s230; CHECK-NEXT:    cas.w %s2, (%s0), %s331; CHECK-NEXT:    brne.w %s2, %s3, .LBB0_132; CHECK-NEXT:  # %bb.2: # %atomicrmw.end33; CHECK-NEXT:    sll %s0, %s2, 5634; CHECK-NEXT:    sra.l %s0, %s0, 5635; CHECK-NEXT:    fencem 336; CHECK-NEXT:    b.l.t (, %s10)37entry:38  %0 = atomicrmw add ptr @c, i8 1 seq_cst39  ret i8 %040}41 42; Function Attrs: norecurse nounwind43define signext i16 @test_atomic_fetch_sub_2() {44; CHECK-LABEL: test_atomic_fetch_sub_2:45; CHECK:       # %bb.0: # %entry46; CHECK-NEXT:    fencem 347; CHECK-NEXT:    lea %s0, s@lo48; CHECK-NEXT:    and %s0, %s0, (32)049; CHECK-NEXT:    lea.sl %s0, s@hi(, %s0)50; CHECK-NEXT:    and %s0, -4, %s051; CHECK-NEXT:    ldl.sx %s2, (, %s0)52; CHECK-NEXT:    lea %s1, -6553653; CHECK-NEXT:    and %s1, %s1, (32)054; CHECK-NEXT:  .LBB1_1: # %atomicrmw.start55; CHECK-NEXT:    # =>This Inner Loop Header: Depth=156; CHECK-NEXT:    or %s3, 0, %s257; CHECK-NEXT:    adds.w.sx %s2, -1, %s258; CHECK-NEXT:    and %s2, %s2, (48)059; CHECK-NEXT:    and %s4, %s3, %s160; CHECK-NEXT:    or %s2, %s4, %s261; CHECK-NEXT:    cas.w %s2, (%s0), %s362; CHECK-NEXT:    brne.w %s2, %s3, .LBB1_163; CHECK-NEXT:  # %bb.2: # %atomicrmw.end64; CHECK-NEXT:    sll %s0, %s2, 4865; CHECK-NEXT:    sra.l %s0, %s0, 4866; CHECK-NEXT:    fencem 367; CHECK-NEXT:    b.l.t (, %s10)68entry:69  %0 = atomicrmw sub ptr @s, i16 1 seq_cst70  ret i16 %071}72 73; Function Attrs: norecurse nounwind74define signext i32 @test_atomic_fetch_and_4() {75; CHECK-LABEL: test_atomic_fetch_and_4:76; CHECK:       # %bb.0: # %entry77; CHECK-NEXT:    fencem 378; CHECK-NEXT:    lea %s0, i@lo79; CHECK-NEXT:    and %s0, %s0, (32)080; CHECK-NEXT:    lea.sl %s0, i@hi(, %s0)81; CHECK-NEXT:    ldl.sx %s1, (, %s0)82; CHECK-NEXT:  .LBB2_1: # %atomicrmw.start83; CHECK-NEXT:    # =>This Inner Loop Header: Depth=184; CHECK-NEXT:    or %s2, 0, %s185; CHECK-NEXT:    and %s1, 1, %s286; CHECK-NEXT:    cas.w %s1, (%s0), %s287; CHECK-NEXT:    brne.w %s1, %s2, .LBB2_188; CHECK-NEXT:  # %bb.2: # %atomicrmw.end89; CHECK-NEXT:    adds.w.sx %s0, %s1, (0)190; CHECK-NEXT:    fencem 391; CHECK-NEXT:    b.l.t (, %s10)92entry:93  %0 = atomicrmw and ptr @i, i32 1 seq_cst94  ret i32 %095}96; Function Attrs: norecurse nounwind97define i64 @test_atomic_fetch_or_8() {98; CHECK-LABEL: test_atomic_fetch_or_8:99; CHECK:       # %bb.0: # %entry100; CHECK-NEXT:    fencem 3101; CHECK-NEXT:    lea %s0, l@lo102; CHECK-NEXT:    and %s0, %s0, (32)0103; CHECK-NEXT:    lea.sl %s1, l@hi(, %s0)104; CHECK-NEXT:    ld %s0, (, %s1)105; CHECK-NEXT:  .LBB3_1: # %atomicrmw.start106; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1107; CHECK-NEXT:    or %s2, 0, %s0108; CHECK-NEXT:    or %s0, 1, %s0109; CHECK-NEXT:    cas.l %s0, (%s1), %s2110; CHECK-NEXT:    brne.l %s0, %s2, .LBB3_1111; CHECK-NEXT:  # %bb.2: # %atomicrmw.end112; CHECK-NEXT:    fencem 3113; CHECK-NEXT:    b.l.t (, %s10)114entry:115  %0 = atomicrmw or ptr @l, i64 1 seq_cst116  ret i64 %0117}118 119; Function Attrs: norecurse nounwind120define signext i8 @test_atomic_fetch_xor_1() {121; CHECK-LABEL: test_atomic_fetch_xor_1:122; CHECK:       # %bb.0: # %entry123; CHECK-NEXT:    fencem 3124; CHECK-NEXT:    lea %s0, c@lo125; CHECK-NEXT:    and %s0, %s0, (32)0126; CHECK-NEXT:    lea.sl %s0, c@hi(, %s0)127; CHECK-NEXT:    and %s1, -4, %s0128; CHECK-NEXT:    ldl.sx %s0, (, %s1)129; CHECK-NEXT:  .LBB4_1: # %atomicrmw.start130; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1131; CHECK-NEXT:    or %s2, 0, %s0132; CHECK-NEXT:    xor %s0, 1, %s2133; CHECK-NEXT:    cas.w %s0, (%s1), %s2134; CHECK-NEXT:    brne.w %s0, %s2, .LBB4_1135; CHECK-NEXT:  # %bb.2: # %atomicrmw.end136; CHECK-NEXT:    sll %s0, %s0, 56137; CHECK-NEXT:    sra.l %s0, %s0, 56138; CHECK-NEXT:    fencem 3139; CHECK-NEXT:    b.l.t (, %s10)140entry:141  %0 = atomicrmw xor ptr @c, i8 1 seq_cst142  ret i8 %0143}144 145; Function Attrs: norecurse nounwind146define signext i16 @test_atomic_fetch_nand_2() {147; CHECK-LABEL: test_atomic_fetch_nand_2:148; CHECK:       # %bb.0: # %entry149; CHECK-NEXT:    fencem 3150; CHECK-NEXT:    lea %s0, s@lo151; CHECK-NEXT:    and %s0, %s0, (32)0152; CHECK-NEXT:    lea.sl %s0, s@hi(, %s0)153; CHECK-NEXT:    and %s0, -4, %s0154; CHECK-NEXT:    ldl.sx %s2, (, %s0)155; CHECK-NEXT:    lea %s1, 65534156; CHECK-NEXT:    lea %s3, -65536157; CHECK-NEXT:    and %s3, %s3, (32)0158; CHECK-NEXT:  .LBB5_1: # %atomicrmw.start159; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1160; CHECK-NEXT:    or %s4, 0, %s2161; CHECK-NEXT:    xor %s2, -1, %s4162; CHECK-NEXT:    or %s2, %s2, %s1163; CHECK-NEXT:    and %s2, %s2, (48)0164; CHECK-NEXT:    and %s5, %s4, %s3165; CHECK-NEXT:    or %s2, %s5, %s2166; CHECK-NEXT:    cas.w %s2, (%s0), %s4167; CHECK-NEXT:    brne.w %s2, %s4, .LBB5_1168; CHECK-NEXT:  # %bb.2: # %atomicrmw.end169; CHECK-NEXT:    sll %s0, %s2, 48170; CHECK-NEXT:    sra.l %s0, %s0, 48171; CHECK-NEXT:    fencem 3172; CHECK-NEXT:    b.l.t (, %s10)173entry:174  %0 = atomicrmw nand ptr @s, i16 1 seq_cst175  ret i16 %0176}177 178; Function Attrs: norecurse nounwind179define signext i32 @test_atomic_fetch_max_4() {180; CHECK-LABEL: test_atomic_fetch_max_4:181; CHECK:       # %bb.0: # %entry182; CHECK-NEXT:    fencem 3183; CHECK-NEXT:    lea %s0, i@lo184; CHECK-NEXT:    and %s0, %s0, (32)0185; CHECK-NEXT:    lea.sl %s1, i@hi(, %s0)186; CHECK-NEXT:    ldl.sx %s0, (, %s1)187; CHECK-NEXT:  .LBB6_1: # %atomicrmw.start188; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1189; CHECK-NEXT:    or %s2, 0, %s0190; CHECK-NEXT:    maxs.w.sx %s0, 1, %s0191; CHECK-NEXT:    cas.w %s0, (%s1), %s2192; CHECK-NEXT:    brne.w %s0, %s2, .LBB6_1193; CHECK-NEXT:  # %bb.2: # %atomicrmw.end194; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1195; CHECK-NEXT:    fencem 3196; CHECK-NEXT:    b.l.t (, %s10)197entry:198  %0 = atomicrmw max ptr @i, i32 1 seq_cst199  ret i32 %0200}201 202; Function Attrs: norecurse nounwind203define signext i32 @test_atomic_fetch_min_4() {204; CHECK-LABEL: test_atomic_fetch_min_4:205; CHECK:       # %bb.0: # %entry206; CHECK-NEXT:    fencem 3207; CHECK-NEXT:    lea %s0, i@lo208; CHECK-NEXT:    and %s0, %s0, (32)0209; CHECK-NEXT:    lea.sl %s1, i@hi(, %s0)210; CHECK-NEXT:    ldl.sx %s0, (, %s1)211; CHECK-NEXT:  .LBB7_1: # %atomicrmw.start212; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1213; CHECK-NEXT:    or %s2, 0, %s0214; CHECK-NEXT:    mins.w.sx %s0, 1, %s0215; CHECK-NEXT:    cas.w %s0, (%s1), %s2216; CHECK-NEXT:    brne.w %s0, %s2, .LBB7_1217; CHECK-NEXT:  # %bb.2: # %atomicrmw.end218; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1219; CHECK-NEXT:    fencem 3220; CHECK-NEXT:    b.l.t (, %s10)221entry:222  %0 = atomicrmw min ptr @i, i32 1 seq_cst223  ret i32 %0224}225 226; Function Attrs: norecurse nounwind227define signext i32 @test_atomic_fetch_umax_4() {228; CHECK-LABEL: test_atomic_fetch_umax_4:229; CHECK:       # %bb.0: # %entry230; CHECK-NEXT:    fencem 3231; CHECK-NEXT:    lea %s0, i@lo232; CHECK-NEXT:    and %s0, %s0, (32)0233; CHECK-NEXT:    lea.sl %s0, i@hi(, %s0)234; CHECK-NEXT:    ldl.sx %s1, (, %s0)235; CHECK-NEXT:  .LBB8_1: # %atomicrmw.start236; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1237; CHECK-NEXT:    or %s2, 0, %s1238; CHECK-NEXT:    cmpu.w %s3, %s1, (63)0239; CHECK-NEXT:    or %s1, 0, %s2240; CHECK-NEXT:    cmov.w.le %s1, (63)0, %s3241; CHECK-NEXT:    cas.w %s1, (%s0), %s2242; CHECK-NEXT:    brne.w %s1, %s2, .LBB8_1243; CHECK-NEXT:  # %bb.2: # %atomicrmw.end244; CHECK-NEXT:    adds.w.sx %s0, %s1, (0)1245; CHECK-NEXT:    fencem 3246; CHECK-NEXT:    b.l.t (, %s10)247entry:248  %0 = atomicrmw umax ptr @i, i32 1 seq_cst249  ret i32 %0250}251 252; Function Attrs: norecurse nounwind253define signext i32 @test_atomic_fetch_umin_4() {254; CHECK-LABEL: test_atomic_fetch_umin_4:255; CHECK:       # %bb.0: # %entry256; CHECK-NEXT:    fencem 3257; CHECK-NEXT:    lea %s0, i@lo258; CHECK-NEXT:    and %s0, %s0, (32)0259; CHECK-NEXT:    lea.sl %s0, i@hi(, %s0)260; CHECK-NEXT:    ldl.sx %s1, (, %s0)261; CHECK-NEXT:  .LBB9_1: # %atomicrmw.start262; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1263; CHECK-NEXT:    or %s2, 0, %s1264; CHECK-NEXT:    cmpu.w %s3, 2, %s1265; CHECK-NEXT:    or %s1, 0, %s2266; CHECK-NEXT:    cmov.w.le %s1, (63)0, %s3267; CHECK-NEXT:    cas.w %s1, (%s0), %s2268; CHECK-NEXT:    brne.w %s1, %s2, .LBB9_1269; CHECK-NEXT:  # %bb.2: # %atomicrmw.end270; CHECK-NEXT:    adds.w.sx %s0, %s1, (0)1271; CHECK-NEXT:    fencem 3272; CHECK-NEXT:    b.l.t (, %s10)273entry:274  %0 = atomicrmw umin ptr @i, i32 1 seq_cst275  ret i32 %0276}277