brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.4 KiB · 7c13ac2 Raw
447 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=sparc -verify-machineinstrs | FileCheck %s --check-prefixes=SPARC323; RUN: llc < %s -mtriple=sparc -mcpu=leon4 -verify-machineinstrs | FileCheck %s --check-prefixes=SPARC32-LEON44; RUN: llc < %s -mtriple=sparc -mcpu=v9 -verify-machineinstrs | FileCheck %s --check-prefixes=SPARC32-V95; RUN: llc < %s -mtriple=sparcv9 -verify-machineinstrs | FileCheck %s --check-prefixes=SPARC646 7define i32 @load_acq(ptr %0) nounwind {8; SPARC32-LABEL: load_acq:9; SPARC32:       ! %bb.0:10; SPARC32-NEXT:    save %sp, -96, %sp11; SPARC32-NEXT:    mov %i0, %o012; SPARC32-NEXT:    call __atomic_load_413; SPARC32-NEXT:    mov 2, %o114; SPARC32-NEXT:    ret15; SPARC32-NEXT:    restore %g0, %o0, %o016;17; SPARC32-LEON4-LABEL: load_acq:18; SPARC32-LEON4:       ! %bb.0:19; SPARC32-LEON4-NEXT:    retl20; SPARC32-LEON4-NEXT:    ld [%o0], %o021;22; SPARC32-V9-LABEL: load_acq:23; SPARC32-V9:       ! %bb.0:24; SPARC32-V9-NEXT:    ld [%o0], %o025; SPARC32-V9-NEXT:    membar #LoadLoad | #LoadStore26; SPARC32-V9-NEXT:    retl27; SPARC32-V9-NEXT:    nop28;29; SPARC64-LABEL: load_acq:30; SPARC64:       ! %bb.0:31; SPARC64-NEXT:    ld [%o0], %o032; SPARC64-NEXT:    membar #LoadLoad | #LoadStore33; SPARC64-NEXT:    retl34; SPARC64-NEXT:    nop35  %2 = load atomic i32, ptr %0 acquire, align 436  ret i32 %237}38 39define i32 @load_sc(ptr %0) nounwind {40; SPARC32-LABEL: load_sc:41; SPARC32:       ! %bb.0:42; SPARC32-NEXT:    save %sp, -96, %sp43; SPARC32-NEXT:    mov %i0, %o044; SPARC32-NEXT:    call __atomic_load_445; SPARC32-NEXT:    mov 5, %o146; SPARC32-NEXT:    ret47; SPARC32-NEXT:    restore %g0, %o0, %o048;49; SPARC32-LEON4-LABEL: load_sc:50; SPARC32-LEON4:       ! %bb.0:51; SPARC32-LEON4-NEXT:    retl52; SPARC32-LEON4-NEXT:    ld [%o0], %o053;54; SPARC32-V9-LABEL: load_sc:55; SPARC32-V9:       ! %bb.0:56; SPARC32-V9-NEXT:    ld [%o0], %o057; SPARC32-V9-NEXT:    membar #LoadLoad | #LoadStore58; SPARC32-V9-NEXT:    retl59; SPARC32-V9-NEXT:    nop60;61; SPARC64-LABEL: load_sc:62; SPARC64:       ! %bb.0:63; SPARC64-NEXT:    ld [%o0], %o064; SPARC64-NEXT:    membar #LoadLoad | #LoadStore65; SPARC64-NEXT:    retl66; SPARC64-NEXT:    nop67  %2 = load atomic i32, ptr %0 seq_cst, align 468  ret i32 %269}70 71define void @store_rel(ptr %0, i32 %1) nounwind {72; SPARC32-LABEL: store_rel:73; SPARC32:       ! %bb.0:74; SPARC32-NEXT:    save %sp, -96, %sp75; SPARC32-NEXT:    mov %i1, %o176; SPARC32-NEXT:    mov %i0, %o077; SPARC32-NEXT:    call __atomic_store_478; SPARC32-NEXT:    mov 3, %o279; SPARC32-NEXT:    ret80; SPARC32-NEXT:    restore81;82; SPARC32-LEON4-LABEL: store_rel:83; SPARC32-LEON4:       ! %bb.0:84; SPARC32-LEON4-NEXT:    stbar85; SPARC32-LEON4-NEXT:    retl86; SPARC32-LEON4-NEXT:    st %o1, [%o0]87;88; SPARC32-V9-LABEL: store_rel:89; SPARC32-V9:       ! %bb.0:90; SPARC32-V9-NEXT:    membar #LoadStore | #StoreStore91; SPARC32-V9-NEXT:    retl92; SPARC32-V9-NEXT:    st %o1, [%o0]93;94; SPARC64-LABEL: store_rel:95; SPARC64:       ! %bb.0:96; SPARC64-NEXT:    membar #LoadStore | #StoreStore97; SPARC64-NEXT:    retl98; SPARC64-NEXT:    st %o1, [%o0]99  store atomic i32 %1, ptr %0 release, align 4100  ret void101}102 103define void @store_sc(ptr %0, i32 %1) nounwind {104; SPARC32-LABEL: store_sc:105; SPARC32:       ! %bb.0:106; SPARC32-NEXT:    save %sp, -96, %sp107; SPARC32-NEXT:    mov %i1, %o1108; SPARC32-NEXT:    mov %i0, %o0109; SPARC32-NEXT:    call __atomic_store_4110; SPARC32-NEXT:    mov 5, %o2111; SPARC32-NEXT:    ret112; SPARC32-NEXT:    restore113;114; SPARC32-LEON4-LABEL: store_sc:115; SPARC32-LEON4:       ! %bb.0:116; SPARC32-LEON4-NEXT:    stbar117; SPARC32-LEON4-NEXT:    st %o1, [%o0]118; SPARC32-LEON4-NEXT:    stbar119; SPARC32-LEON4-NEXT:    ldstub [%sp+-1], %g0120; SPARC32-LEON4-NEXT:    retl121; SPARC32-LEON4-NEXT:    nop122;123; SPARC32-V9-LABEL: store_sc:124; SPARC32-V9:       ! %bb.0:125; SPARC32-V9-NEXT:    membar #LoadStore | #StoreStore126; SPARC32-V9-NEXT:    st %o1, [%o0]127; SPARC32-V9-NEXT:    membar #LoadLoad | #StoreLoad | #LoadStore | #StoreStore128; SPARC32-V9-NEXT:    retl129; SPARC32-V9-NEXT:    nop130;131; SPARC64-LABEL: store_sc:132; SPARC64:       ! %bb.0:133; SPARC64-NEXT:    membar #LoadStore | #StoreStore134; SPARC64-NEXT:    st %o1, [%o0]135; SPARC64-NEXT:    membar #LoadLoad | #StoreLoad | #LoadStore | #StoreStore136; SPARC64-NEXT:    retl137; SPARC64-NEXT:    nop138  store atomic i32 %1, ptr %0 seq_cst, align 4139  ret void140}141 142define i32 @rmw_acq(ptr %0, i32 %1) nounwind {143; SPARC32-LABEL: rmw_acq:144; SPARC32:       ! %bb.0:145; SPARC32-NEXT:    save %sp, -96, %sp146; SPARC32-NEXT:    mov %i1, %o1147; SPARC32-NEXT:    mov %i0, %o0148; SPARC32-NEXT:    call __atomic_exchange_4149; SPARC32-NEXT:    mov 2, %o2150; SPARC32-NEXT:    ret151; SPARC32-NEXT:    restore %g0, %o0, %o0152;153; SPARC32-LEON4-LABEL: rmw_acq:154; SPARC32-LEON4:       ! %bb.0:155; SPARC32-LEON4-NEXT:    swap [%o0], %o1156; SPARC32-LEON4-NEXT:    retl157; SPARC32-LEON4-NEXT:    mov %o1, %o0158;159; SPARC32-V9-LABEL: rmw_acq:160; SPARC32-V9:       ! %bb.0:161; SPARC32-V9-NEXT:    swap [%o0], %o1162; SPARC32-V9-NEXT:    membar #LoadLoad | #LoadStore163; SPARC32-V9-NEXT:    retl164; SPARC32-V9-NEXT:    mov %o1, %o0165;166; SPARC64-LABEL: rmw_acq:167; SPARC64:       ! %bb.0:168; SPARC64-NEXT:    swap [%o0], %o1169; SPARC64-NEXT:    membar #LoadLoad | #LoadStore170; SPARC64-NEXT:    retl171; SPARC64-NEXT:    mov %o1, %o0172  %3 = atomicrmw xchg ptr %0, i32 %1 acquire, align 4173  ret i32 %3174}175 176define i32 @rmw_rel(ptr %0, i32 %1) nounwind {177; SPARC32-LABEL: rmw_rel:178; SPARC32:       ! %bb.0:179; SPARC32-NEXT:    save %sp, -96, %sp180; SPARC32-NEXT:    mov %i1, %o1181; SPARC32-NEXT:    mov %i0, %o0182; SPARC32-NEXT:    call __atomic_exchange_4183; SPARC32-NEXT:    mov 3, %o2184; SPARC32-NEXT:    ret185; SPARC32-NEXT:    restore %g0, %o0, %o0186;187; SPARC32-LEON4-LABEL: rmw_rel:188; SPARC32-LEON4:       ! %bb.0:189; SPARC32-LEON4-NEXT:    stbar190; SPARC32-LEON4-NEXT:    swap [%o0], %o1191; SPARC32-LEON4-NEXT:    retl192; SPARC32-LEON4-NEXT:    mov %o1, %o0193;194; SPARC32-V9-LABEL: rmw_rel:195; SPARC32-V9:       ! %bb.0:196; SPARC32-V9-NEXT:    membar #LoadStore | #StoreStore197; SPARC32-V9-NEXT:    swap [%o0], %o1198; SPARC32-V9-NEXT:    retl199; SPARC32-V9-NEXT:    mov %o1, %o0200;201; SPARC64-LABEL: rmw_rel:202; SPARC64:       ! %bb.0:203; SPARC64-NEXT:    membar #LoadStore | #StoreStore204; SPARC64-NEXT:    swap [%o0], %o1205; SPARC64-NEXT:    retl206; SPARC64-NEXT:    mov %o1, %o0207  %3 = atomicrmw xchg ptr %0, i32 %1 release, align 4208  ret i32 %3209}210 211define i32 @rmw_acq_rel(ptr %0, i32 %1) nounwind {212; SPARC32-LABEL: rmw_acq_rel:213; SPARC32:       ! %bb.0:214; SPARC32-NEXT:    save %sp, -96, %sp215; SPARC32-NEXT:    mov %i1, %o1216; SPARC32-NEXT:    mov %i0, %o0217; SPARC32-NEXT:    call __atomic_exchange_4218; SPARC32-NEXT:    mov 4, %o2219; SPARC32-NEXT:    ret220; SPARC32-NEXT:    restore %g0, %o0, %o0221;222; SPARC32-LEON4-LABEL: rmw_acq_rel:223; SPARC32-LEON4:       ! %bb.0:224; SPARC32-LEON4-NEXT:    stbar225; SPARC32-LEON4-NEXT:    swap [%o0], %o1226; SPARC32-LEON4-NEXT:    retl227; SPARC32-LEON4-NEXT:    mov %o1, %o0228;229; SPARC32-V9-LABEL: rmw_acq_rel:230; SPARC32-V9:       ! %bb.0:231; SPARC32-V9-NEXT:    membar #LoadStore | #StoreStore232; SPARC32-V9-NEXT:    swap [%o0], %o1233; SPARC32-V9-NEXT:    membar #LoadLoad | #LoadStore234; SPARC32-V9-NEXT:    retl235; SPARC32-V9-NEXT:    mov %o1, %o0236;237; SPARC64-LABEL: rmw_acq_rel:238; SPARC64:       ! %bb.0:239; SPARC64-NEXT:    membar #LoadStore | #StoreStore240; SPARC64-NEXT:    swap [%o0], %o1241; SPARC64-NEXT:    membar #LoadLoad | #LoadStore242; SPARC64-NEXT:    retl243; SPARC64-NEXT:    mov %o1, %o0244  %3 = atomicrmw xchg ptr %0, i32 %1 acq_rel, align 4245  ret i32 %3246}247 248define i32 @rmw_sc(ptr %0, i32 %1) nounwind {249; SPARC32-LABEL: rmw_sc:250; SPARC32:       ! %bb.0:251; SPARC32-NEXT:    save %sp, -96, %sp252; SPARC32-NEXT:    mov %i1, %o1253; SPARC32-NEXT:    mov %i0, %o0254; SPARC32-NEXT:    call __atomic_exchange_4255; SPARC32-NEXT:    mov 5, %o2256; SPARC32-NEXT:    ret257; SPARC32-NEXT:    restore %g0, %o0, %o0258;259; SPARC32-LEON4-LABEL: rmw_sc:260; SPARC32-LEON4:       ! %bb.0:261; SPARC32-LEON4-NEXT:    stbar262; SPARC32-LEON4-NEXT:    swap [%o0], %o1263; SPARC32-LEON4-NEXT:    retl264; SPARC32-LEON4-NEXT:    mov %o1, %o0265;266; SPARC32-V9-LABEL: rmw_sc:267; SPARC32-V9:       ! %bb.0:268; SPARC32-V9-NEXT:    membar #LoadStore | #StoreStore269; SPARC32-V9-NEXT:    swap [%o0], %o1270; SPARC32-V9-NEXT:    membar #LoadLoad | #LoadStore271; SPARC32-V9-NEXT:    retl272; SPARC32-V9-NEXT:    mov %o1, %o0273;274; SPARC64-LABEL: rmw_sc:275; SPARC64:       ! %bb.0:276; SPARC64-NEXT:    membar #LoadStore | #StoreStore277; SPARC64-NEXT:    swap [%o0], %o1278; SPARC64-NEXT:    membar #LoadLoad | #LoadStore279; SPARC64-NEXT:    retl280; SPARC64-NEXT:    mov %o1, %o0281  %3 = atomicrmw xchg ptr %0, i32 %1 seq_cst, align 4282  ret i32 %3283}284 285define i32 @cas_acq(ptr %0, i32 %1, i32 %2) nounwind {286; SPARC32-LABEL: cas_acq:287; SPARC32:       ! %bb.0:288; SPARC32-NEXT:    save %sp, -96, %sp289; SPARC32-NEXT:    mov %i2, %o2290; SPARC32-NEXT:    mov %i0, %o0291; SPARC32-NEXT:    st %i1, [%fp+-4]292; SPARC32-NEXT:    add %fp, -4, %o1293; SPARC32-NEXT:    mov 2, %o3294; SPARC32-NEXT:    call __atomic_compare_exchange_4295; SPARC32-NEXT:    mov %o3, %o4296; SPARC32-NEXT:    ld [%fp+-4], %i0297; SPARC32-NEXT:    ret298; SPARC32-NEXT:    restore299;300; SPARC32-LEON4-LABEL: cas_acq:301; SPARC32-LEON4:       ! %bb.0:302; SPARC32-LEON4-NEXT:    casa [%o0] 10, %o1, %o2303; SPARC32-LEON4-NEXT:    retl304; SPARC32-LEON4-NEXT:    mov %o2, %o0305;306; SPARC32-V9-LABEL: cas_acq:307; SPARC32-V9:       ! %bb.0:308; SPARC32-V9-NEXT:    cas [%o0], %o1, %o2309; SPARC32-V9-NEXT:    membar #LoadLoad | #LoadStore310; SPARC32-V9-NEXT:    retl311; SPARC32-V9-NEXT:    mov %o2, %o0312;313; SPARC64-LABEL: cas_acq:314; SPARC64:       ! %bb.0:315; SPARC64-NEXT:    cas [%o0], %o1, %o2316; SPARC64-NEXT:    membar #LoadLoad | #LoadStore317; SPARC64-NEXT:    retl318; SPARC64-NEXT:    mov %o2, %o0319  %4 = cmpxchg ptr %0, i32 %1, i32 %2 acquire acquire, align 4320  %5 = extractvalue { i32, i1 } %4, 0321  ret i32 %5322}323 324define i32 @cas_rel(ptr %0, i32 %1, i32 %2) nounwind {325; SPARC32-LABEL: cas_rel:326; SPARC32:       ! %bb.0:327; SPARC32-NEXT:    save %sp, -96, %sp328; SPARC32-NEXT:    mov %i2, %o2329; SPARC32-NEXT:    mov %i0, %o0330; SPARC32-NEXT:    st %i1, [%fp+-4]331; SPARC32-NEXT:    add %fp, -4, %o1332; SPARC32-NEXT:    mov 3, %o3333; SPARC32-NEXT:    call __atomic_compare_exchange_4334; SPARC32-NEXT:    mov %g0, %o4335; SPARC32-NEXT:    ld [%fp+-4], %i0336; SPARC32-NEXT:    ret337; SPARC32-NEXT:    restore338;339; SPARC32-LEON4-LABEL: cas_rel:340; SPARC32-LEON4:       ! %bb.0:341; SPARC32-LEON4-NEXT:    stbar342; SPARC32-LEON4-NEXT:    casa [%o0] 10, %o1, %o2343; SPARC32-LEON4-NEXT:    retl344; SPARC32-LEON4-NEXT:    mov %o2, %o0345;346; SPARC32-V9-LABEL: cas_rel:347; SPARC32-V9:       ! %bb.0:348; SPARC32-V9-NEXT:    membar #LoadStore | #StoreStore349; SPARC32-V9-NEXT:    cas [%o0], %o1, %o2350; SPARC32-V9-NEXT:    retl351; SPARC32-V9-NEXT:    mov %o2, %o0352;353; SPARC64-LABEL: cas_rel:354; SPARC64:       ! %bb.0:355; SPARC64-NEXT:    membar #LoadStore | #StoreStore356; SPARC64-NEXT:    cas [%o0], %o1, %o2357; SPARC64-NEXT:    retl358; SPARC64-NEXT:    mov %o2, %o0359  %4 = cmpxchg ptr %0, i32 %1, i32 %2 release monotonic, align 4360  %5 = extractvalue { i32, i1 } %4, 0361  ret i32 %5362}363 364define i32 @cas_acq_rel(ptr %0, i32 %1, i32 %2) nounwind {365; SPARC32-LABEL: cas_acq_rel:366; SPARC32:       ! %bb.0:367; SPARC32-NEXT:    save %sp, -96, %sp368; SPARC32-NEXT:    mov %i2, %o2369; SPARC32-NEXT:    mov %i0, %o0370; SPARC32-NEXT:    st %i1, [%fp+-4]371; SPARC32-NEXT:    add %fp, -4, %o1372; SPARC32-NEXT:    mov 4, %o3373; SPARC32-NEXT:    call __atomic_compare_exchange_4374; SPARC32-NEXT:    mov 2, %o4375; SPARC32-NEXT:    ld [%fp+-4], %i0376; SPARC32-NEXT:    ret377; SPARC32-NEXT:    restore378;379; SPARC32-LEON4-LABEL: cas_acq_rel:380; SPARC32-LEON4:       ! %bb.0:381; SPARC32-LEON4-NEXT:    stbar382; SPARC32-LEON4-NEXT:    casa [%o0] 10, %o1, %o2383; SPARC32-LEON4-NEXT:    retl384; SPARC32-LEON4-NEXT:    mov %o2, %o0385;386; SPARC32-V9-LABEL: cas_acq_rel:387; SPARC32-V9:       ! %bb.0:388; SPARC32-V9-NEXT:    membar #LoadStore | #StoreStore389; SPARC32-V9-NEXT:    cas [%o0], %o1, %o2390; SPARC32-V9-NEXT:    membar #LoadLoad | #LoadStore391; SPARC32-V9-NEXT:    retl392; SPARC32-V9-NEXT:    mov %o2, %o0393;394; SPARC64-LABEL: cas_acq_rel:395; SPARC64:       ! %bb.0:396; SPARC64-NEXT:    membar #LoadStore | #StoreStore397; SPARC64-NEXT:    cas [%o0], %o1, %o2398; SPARC64-NEXT:    membar #LoadLoad | #LoadStore399; SPARC64-NEXT:    retl400; SPARC64-NEXT:    mov %o2, %o0401  %4 = cmpxchg ptr %0, i32 %1, i32 %2 acq_rel acquire, align 4402  %5 = extractvalue { i32, i1 } %4, 0403  ret i32 %5404}405 406define i32 @cas_sc(ptr %0, i32 %1, i32 %2) nounwind {407; SPARC32-LABEL: cas_sc:408; SPARC32:       ! %bb.0:409; SPARC32-NEXT:    save %sp, -96, %sp410; SPARC32-NEXT:    mov %i2, %o2411; SPARC32-NEXT:    mov %i0, %o0412; SPARC32-NEXT:    st %i1, [%fp+-4]413; SPARC32-NEXT:    add %fp, -4, %o1414; SPARC32-NEXT:    mov 5, %o3415; SPARC32-NEXT:    call __atomic_compare_exchange_4416; SPARC32-NEXT:    mov %o3, %o4417; SPARC32-NEXT:    ld [%fp+-4], %i0418; SPARC32-NEXT:    ret419; SPARC32-NEXT:    restore420;421; SPARC32-LEON4-LABEL: cas_sc:422; SPARC32-LEON4:       ! %bb.0:423; SPARC32-LEON4-NEXT:    stbar424; SPARC32-LEON4-NEXT:    casa [%o0] 10, %o1, %o2425; SPARC32-LEON4-NEXT:    retl426; SPARC32-LEON4-NEXT:    mov %o2, %o0427;428; SPARC32-V9-LABEL: cas_sc:429; SPARC32-V9:       ! %bb.0:430; SPARC32-V9-NEXT:    membar #LoadStore | #StoreStore431; SPARC32-V9-NEXT:    cas [%o0], %o1, %o2432; SPARC32-V9-NEXT:    membar #LoadLoad | #LoadStore433; SPARC32-V9-NEXT:    retl434; SPARC32-V9-NEXT:    mov %o2, %o0435;436; SPARC64-LABEL: cas_sc:437; SPARC64:       ! %bb.0:438; SPARC64-NEXT:    membar #LoadStore | #StoreStore439; SPARC64-NEXT:    cas [%o0], %o1, %o2440; SPARC64-NEXT:    membar #LoadLoad | #LoadStore441; SPARC64-NEXT:    retl442; SPARC64-NEXT:    mov %o2, %o0443  %4 = cmpxchg ptr %0, i32 %1, i32 %2 seq_cst seq_cst, align 4444  %5 = extractvalue { i32, i1 } %4, 0445  ret i32 %5446}447