brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.6 KiB · 8e673c1 Raw
376 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=hexagon < %s | FileCheck %s3 4define i8 @atomicrmw_uinc_wrap_i8(ptr %ptr, i8 %val) {5; CHECK-LABEL: atomicrmw_uinc_wrap_i8:6; CHECK:         .cfi_startproc7; CHECK-NEXT:  // %bb.0:8; CHECK-NEXT:    {9; CHECK-NEXT:     r0 = and(#24,asl(r0,#3))10; CHECK-NEXT:     r2 = and(r0,#-4)11; CHECK-NEXT:     r3 = #25512; CHECK-NEXT:    }13; CHECK-NEXT:    {14; CHECK-NEXT:     r4 = asl(r3,r0)15; CHECK-NEXT:     r3 = and(r1,#255)16; CHECK-NEXT:    }17; CHECK-NEXT:    {18; CHECK-NEXT:     r4 = sub(#-1,r4)19; CHECK-NEXT:    }20; CHECK-NEXT:    .p2align 421; CHECK-NEXT:  .LBB0_1: // %atomicrmw.start22; CHECK-NEXT:    // =>This Inner Loop Header: Depth=123; CHECK-NEXT:    {24; CHECK-NEXT:     r5 = memw_locked(r2)25; CHECK-NEXT:    }26; CHECK-NEXT:    {27; CHECK-NEXT:     r1 = lsr(r5,r0)28; CHECK-NEXT:     r5 = and(r5,r4)29; CHECK-NEXT:    }30; CHECK-NEXT:    {31; CHECK-NEXT:     r6 = and(r1,#255)32; CHECK-NEXT:    }33; CHECK-NEXT:    {34; CHECK-NEXT:     p0 = cmp.gtu(r3,r6)35; CHECK-NEXT:     if (p0.new) r6 = add(r1,#1)36; CHECK-NEXT:     if (!p0.new) r6 = #037; CHECK-NEXT:    }38; CHECK-NEXT:    {39; CHECK-NEXT:     r6 = and(r6,#255)40; CHECK-NEXT:    }41; CHECK-NEXT:    {42; CHECK-NEXT:     r5 |= asl(r6,r0)43; CHECK-NEXT:    }44; CHECK-NEXT:    {45; CHECK-NEXT:     memw_locked(r2,p0) = r546; CHECK-NEXT:    }47; CHECK-NEXT:    {48; CHECK-NEXT:     if (!p0) jump:nt .LBB0_149; CHECK-NEXT:    }50; CHECK-NEXT:  // %bb.2: // %atomicrmw.end51; CHECK-NEXT:    {52; CHECK-NEXT:     r0 = r153; CHECK-NEXT:     jumpr r3154; CHECK-NEXT:    }55  %result = atomicrmw uinc_wrap ptr %ptr, i8 %val seq_cst56  ret i8 %result57}58 59define i16 @atomicrmw_uinc_wrap_i16(ptr %ptr, i16 %val) {60; CHECK-LABEL: atomicrmw_uinc_wrap_i16:61; CHECK:         .cfi_startproc62; CHECK-NEXT:  // %bb.0:63; CHECK-NEXT:    {64; CHECK-NEXT:     r0 = and(#24,asl(r0,#3))65; CHECK-NEXT:     r2 = and(r0,#-4)66; CHECK-NEXT:     r3 = ##6553567; CHECK-NEXT:    }68; CHECK-NEXT:    {69; CHECK-NEXT:     r4 = asl(r3,r0)70; CHECK-NEXT:     r3 = zxth(r1)71; CHECK-NEXT:    }72; CHECK-NEXT:    {73; CHECK-NEXT:     r4 = sub(#-1,r4)74; CHECK-NEXT:    }75; CHECK-NEXT:    .p2align 476; CHECK-NEXT:  .LBB1_1: // %atomicrmw.start77; CHECK-NEXT:    // =>This Inner Loop Header: Depth=178; CHECK-NEXT:    {79; CHECK-NEXT:     r5 = memw_locked(r2)80; CHECK-NEXT:    }81; CHECK-NEXT:    {82; CHECK-NEXT:     r1 = lsr(r5,r0)83; CHECK-NEXT:     r5 = and(r5,r4)84; CHECK-NEXT:    }85; CHECK-NEXT:    {86; CHECK-NEXT:     r6 = zxth(r1)87; CHECK-NEXT:    }88; CHECK-NEXT:    {89; CHECK-NEXT:     p0 = cmp.gtu(r3,r6)90; CHECK-NEXT:     if (p0.new) r6 = add(r1,#1)91; CHECK-NEXT:     if (!p0.new) r6 = #092; CHECK-NEXT:    }93; CHECK-NEXT:    {94; CHECK-NEXT:     r6 = zxth(r6)95; CHECK-NEXT:    }96; CHECK-NEXT:    {97; CHECK-NEXT:     r5 |= asl(r6,r0)98; CHECK-NEXT:    }99; CHECK-NEXT:    {100; CHECK-NEXT:     memw_locked(r2,p0) = r5101; CHECK-NEXT:    }102; CHECK-NEXT:    {103; CHECK-NEXT:     if (!p0) jump:nt .LBB1_1104; CHECK-NEXT:    }105; CHECK-NEXT:  // %bb.2: // %atomicrmw.end106; CHECK-NEXT:    {107; CHECK-NEXT:     r0 = r1108; CHECK-NEXT:     jumpr r31109; CHECK-NEXT:    }110  %result = atomicrmw uinc_wrap ptr %ptr, i16 %val seq_cst111  ret i16 %result112}113 114define i32 @atomicrmw_uinc_wrap_i32(ptr %ptr, i32 %val) {115; CHECK-LABEL: atomicrmw_uinc_wrap_i32:116; CHECK:         .cfi_startproc117; CHECK-NEXT:  // %bb.0:118; CHECK-NEXT:    .p2align 4119; CHECK-NEXT:  .LBB2_1: // %atomicrmw.start120; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1121; CHECK-NEXT:    {122; CHECK-NEXT:     r2 = memw_locked(r0)123; CHECK-NEXT:    }124; CHECK-NEXT:    {125; CHECK-NEXT:     p0 = cmp.gtu(r1,r2)126; CHECK-NEXT:     if (p0.new) r3 = add(r2,#1)127; CHECK-NEXT:     if (!p0.new) r3 = #0128; CHECK-NEXT:    }129; CHECK-NEXT:    {130; CHECK-NEXT:     memw_locked(r0,p0) = r3131; CHECK-NEXT:    }132; CHECK-NEXT:    {133; CHECK-NEXT:     if (!p0) jump:nt .LBB2_1134; CHECK-NEXT:    }135; CHECK-NEXT:  // %bb.2: // %atomicrmw.end136; CHECK-NEXT:    {137; CHECK-NEXT:     r0 = r2138; CHECK-NEXT:     jumpr r31139; CHECK-NEXT:    }140  %result = atomicrmw uinc_wrap ptr %ptr, i32 %val seq_cst141  ret i32 %result142}143 144define i64 @atomicrmw_uinc_wrap_i64(ptr %ptr, i64 %val) {145; CHECK-LABEL: atomicrmw_uinc_wrap_i64:146; CHECK:         .cfi_startproc147; CHECK-NEXT:  // %bb.0:148; CHECK-NEXT:    {149; CHECK-NEXT:     r1 = #0150; CHECK-NEXT:     r7:6 = combine(#0,#1)151; CHECK-NEXT:    }152; CHECK-NEXT:    .p2align 4153; CHECK-NEXT:  .LBB3_1: // %atomicrmw.start154; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1155; CHECK-NEXT:    {156; CHECK-NEXT:     r5:4 = memd_locked(r0)157; CHECK-NEXT:    }158; CHECK-NEXT:    {159; CHECK-NEXT:     p0 = cmp.gtu(r3:2,r5:4)160; CHECK-NEXT:     r9:8 = add(r5:4,r7:6)161; CHECK-NEXT:    }162; CHECK-NEXT:    {163; CHECK-NEXT:     if (!p0) r8 = add(r1,#0)164; CHECK-NEXT:     if (!p0) r9 = add(r1,#0)165; CHECK-NEXT:    }166; CHECK-NEXT:    {167; CHECK-NEXT:     memd_locked(r0,p0) = r9:8168; CHECK-NEXT:    }169; CHECK-NEXT:    {170; CHECK-NEXT:     if (!p0) jump:nt .LBB3_1171; CHECK-NEXT:    }172; CHECK-NEXT:  // %bb.2: // %atomicrmw.end173; CHECK-NEXT:    {174; CHECK-NEXT:     r1:0 = combine(r5,r4)175; CHECK-NEXT:     jumpr r31176; CHECK-NEXT:    }177  %result = atomicrmw uinc_wrap ptr %ptr, i64 %val seq_cst178  ret i64 %result179}180 181define i8 @atomicrmw_udec_wrap_i8(ptr %ptr, i8 %val) {182; CHECK-LABEL: atomicrmw_udec_wrap_i8:183; CHECK:         .cfi_startproc184; CHECK-NEXT:  // %bb.0:185; CHECK-NEXT:    {186; CHECK-NEXT:     r0 = and(#24,asl(r0,#3))187; CHECK-NEXT:     r3 = and(r0,#-4)188; CHECK-NEXT:     r4 = #255189; CHECK-NEXT:     r5 = and(r1,#255)190; CHECK-NEXT:    }191; CHECK-NEXT:    {192; CHECK-NEXT:     r2 = asl(r4,r0)193; CHECK-NEXT:    }194; CHECK-NEXT:    {195; CHECK-NEXT:     r6 = sub(#-1,r2)196; CHECK-NEXT:    }197; CHECK-NEXT:    .p2align 4198; CHECK-NEXT:  .LBB4_1: // %atomicrmw.start199; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1200; CHECK-NEXT:    {201; CHECK-NEXT:     r7 = memw_locked(r3)202; CHECK-NEXT:    }203; CHECK-NEXT:    {204; CHECK-NEXT:     r2 = lsr(r7,r0)205; CHECK-NEXT:     r7 = and(r7,r6)206; CHECK-NEXT:    }207; CHECK-NEXT:    {208; CHECK-NEXT:     p0 = bitsclr(r2,r4)209; CHECK-NEXT:     r8 = and(r2,#255)210; CHECK-NEXT:    }211; CHECK-NEXT:    {212; CHECK-NEXT:     p1 = cmp.gtu(r8,r5)213; CHECK-NEXT:     if (p1.new) r8 = add(r1,#0)214; CHECK-NEXT:     if (!p1.new) r8 = add(r2,#-1)215; CHECK-NEXT:    }216; CHECK-NEXT:    {217; CHECK-NEXT:     if (p0) r8 = add(r1,#0)218; CHECK-NEXT:    }219; CHECK-NEXT:    {220; CHECK-NEXT:     r8 = and(r8,#255)221; CHECK-NEXT:    }222; CHECK-NEXT:    {223; CHECK-NEXT:     r7 |= asl(r8,r0)224; CHECK-NEXT:    }225; CHECK-NEXT:    {226; CHECK-NEXT:     memw_locked(r3,p0) = r7227; CHECK-NEXT:    }228; CHECK-NEXT:    {229; CHECK-NEXT:     if (!p0) jump:nt .LBB4_1230; CHECK-NEXT:    }231; CHECK-NEXT:  // %bb.2: // %atomicrmw.end232; CHECK-NEXT:    {233; CHECK-NEXT:     r0 = r2234; CHECK-NEXT:     jumpr r31235; CHECK-NEXT:    }236  %result = atomicrmw udec_wrap ptr %ptr, i8 %val seq_cst237  ret i8 %result238}239 240define i16 @atomicrmw_udec_wrap_i16(ptr %ptr, i16 %val) {241; CHECK-LABEL: atomicrmw_udec_wrap_i16:242; CHECK:         .cfi_startproc243; CHECK-NEXT:  // %bb.0:244; CHECK-NEXT:    {245; CHECK-NEXT:     r0 = and(#24,asl(r0,#3))246; CHECK-NEXT:     r3 = and(r0,#-4)247; CHECK-NEXT:     r4 = ##65535248; CHECK-NEXT:    }249; CHECK-NEXT:    {250; CHECK-NEXT:     r2 = asl(r4,r0)251; CHECK-NEXT:     r5 = zxth(r1)252; CHECK-NEXT:    }253; CHECK-NEXT:    {254; CHECK-NEXT:     r6 = sub(#-1,r2)255; CHECK-NEXT:    }256; CHECK-NEXT:    .p2align 4257; CHECK-NEXT:  .LBB5_1: // %atomicrmw.start258; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1259; CHECK-NEXT:    {260; CHECK-NEXT:     r7 = memw_locked(r3)261; CHECK-NEXT:    }262; CHECK-NEXT:    {263; CHECK-NEXT:     r2 = lsr(r7,r0)264; CHECK-NEXT:     r7 = and(r7,r6)265; CHECK-NEXT:    }266; CHECK-NEXT:    {267; CHECK-NEXT:     p0 = bitsclr(r2,r4)268; CHECK-NEXT:     r8 = zxth(r2)269; CHECK-NEXT:    }270; CHECK-NEXT:    {271; CHECK-NEXT:     p1 = cmp.gtu(r8,r5)272; CHECK-NEXT:     if (p1.new) r8 = add(r1,#0)273; CHECK-NEXT:     if (!p1.new) r8 = add(r2,#-1)274; CHECK-NEXT:    }275; CHECK-NEXT:    {276; CHECK-NEXT:     if (p0) r8 = add(r1,#0)277; CHECK-NEXT:    }278; CHECK-NEXT:    {279; CHECK-NEXT:     r8 = zxth(r8)280; CHECK-NEXT:    }281; CHECK-NEXT:    {282; CHECK-NEXT:     r7 |= asl(r8,r0)283; CHECK-NEXT:    }284; CHECK-NEXT:    {285; CHECK-NEXT:     memw_locked(r3,p0) = r7286; CHECK-NEXT:    }287; CHECK-NEXT:    {288; CHECK-NEXT:     if (!p0) jump:nt .LBB5_1289; CHECK-NEXT:    }290; CHECK-NEXT:  // %bb.2: // %atomicrmw.end291; CHECK-NEXT:    {292; CHECK-NEXT:     r0 = r2293; CHECK-NEXT:     jumpr r31294; CHECK-NEXT:    }295  %result = atomicrmw udec_wrap ptr %ptr, i16 %val seq_cst296  ret i16 %result297}298 299define i32 @atomicrmw_udec_wrap_i32(ptr %ptr, i32 %val) {300; CHECK-LABEL: atomicrmw_udec_wrap_i32:301; CHECK:         .cfi_startproc302; CHECK-NEXT:  // %bb.0:303; CHECK-NEXT:    .p2align 4304; CHECK-NEXT:  .LBB6_1: // %atomicrmw.start305; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1306; CHECK-NEXT:    {307; CHECK-NEXT:     r2 = memw_locked(r0)308; CHECK-NEXT:    }309; CHECK-NEXT:    {310; CHECK-NEXT:     p0 = cmp.gtu(r2,r1)311; CHECK-NEXT:     p1 = cmp.eq(r2,#0)312; CHECK-NEXT:     if (p0.new) r3 = add(r1,#0)313; CHECK-NEXT:     if (!p0.new) r3 = add(r2,#-1)314; CHECK-NEXT:    }315; CHECK-NEXT:    {316; CHECK-NEXT:     if (p1) r3 = add(r1,#0)317; CHECK-NEXT:    }318; CHECK-NEXT:    {319; CHECK-NEXT:     memw_locked(r0,p0) = r3320; CHECK-NEXT:    }321; CHECK-NEXT:    {322; CHECK-NEXT:     if (!p0) jump:nt .LBB6_1323; CHECK-NEXT:    }324; CHECK-NEXT:  // %bb.2: // %atomicrmw.end325; CHECK-NEXT:    {326; CHECK-NEXT:     r0 = r2327; CHECK-NEXT:     jumpr r31328; CHECK-NEXT:    }329  %result = atomicrmw udec_wrap ptr %ptr, i32 %val seq_cst330  ret i32 %result331}332 333define i64 @atomicrmw_udec_wrap_i64(ptr %ptr, i64 %val) {334; CHECK-LABEL: atomicrmw_udec_wrap_i64:335; CHECK:         .cfi_startproc336; CHECK-NEXT:  // %bb.0:337; CHECK-NEXT:    {338; CHECK-NEXT:     r7:6 = combine(#-1,#-1)339; CHECK-NEXT:     r9:8 = combine(#0,#0)340; CHECK-NEXT:    }341; CHECK-NEXT:    .p2align 4342; CHECK-NEXT:  .LBB7_1: // %atomicrmw.start343; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1344; CHECK-NEXT:    {345; CHECK-NEXT:     r5:4 = memd_locked(r0)346; CHECK-NEXT:    }347; CHECK-NEXT:    {348; CHECK-NEXT:     p1 = cmp.gtu(r5:4,r3:2)349; CHECK-NEXT:     p0 = cmp.eq(r5:4,r9:8)350; CHECK-NEXT:    }351; CHECK-NEXT:    {352; CHECK-NEXT:     r13:12 = add(r5:4,r7:6)353; CHECK-NEXT:    }354; CHECK-NEXT:    {355; CHECK-NEXT:     r1 = mux(p1,r2,r12)356; CHECK-NEXT:     r14 = mux(p1,r3,r13)357; CHECK-NEXT:    }358; CHECK-NEXT:    {359; CHECK-NEXT:     r10 = mux(p0,r2,r1)360; CHECK-NEXT:     r11 = mux(p0,r3,r14)361; CHECK-NEXT:    }362; CHECK-NEXT:    {363; CHECK-NEXT:     memd_locked(r0,p0) = r11:10364; CHECK-NEXT:    }365; CHECK-NEXT:    {366; CHECK-NEXT:     if (!p0) jump:nt .LBB7_1367; CHECK-NEXT:    }368; CHECK-NEXT:  // %bb.2: // %atomicrmw.end369; CHECK-NEXT:    {370; CHECK-NEXT:     r1:0 = combine(r5,r4)371; CHECK-NEXT:     jumpr r31372; CHECK-NEXT:    }373  %result = atomicrmw udec_wrap ptr %ptr, i64 %val seq_cst374  ret i64 %result375}376