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