brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.5 KiB · 0e0b64a Raw
340 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_usub_cond_i8(ptr %ptr, i8 %val) {5; CHECK-LABEL: atomicrmw_usub_cond_i8:6; CHECK:         .cfi_startproc7; CHECK-NEXT:  // %bb.0:8; CHECK-NEXT:    {9; CHECK-NEXT:     r0 = and(#24,asl(r0,#3))10; CHECK-NEXT:     r3 = and(r0,#-4)11; CHECK-NEXT:     r2 = #25512; CHECK-NEXT:     r4 = and(r1,#255)13; CHECK-NEXT:    }14; CHECK-NEXT:    {15; CHECK-NEXT:     r2 = asl(r2,r0)16; CHECK-NEXT:    }17; CHECK-NEXT:    {18; CHECK-NEXT:     r5 = sub(#-1,r2)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:     r6 = memw_locked(r3)25; CHECK-NEXT:    }26; CHECK-NEXT:    {27; CHECK-NEXT:     r2 = lsr(r6,r0)28; CHECK-NEXT:     r6 = and(r6,r5)29; CHECK-NEXT:    }30; CHECK-NEXT:    {31; CHECK-NEXT:     r7 = and(r2,#255)32; CHECK-NEXT:    }33; CHECK-NEXT:    {34; CHECK-NEXT:     p0 = cmp.gtu(r4,r7)35; CHECK-NEXT:     if (p0.new) r7 = add(r2,#0)36; CHECK-NEXT:     if (!p0.new) r7 = sub(r2,r1)37; CHECK-NEXT:    }38; CHECK-NEXT:    {39; CHECK-NEXT:     r7 = and(r7,#255)40; CHECK-NEXT:    }41; CHECK-NEXT:    {42; CHECK-NEXT:     r6 |= asl(r7,r0)43; CHECK-NEXT:    }44; CHECK-NEXT:    {45; CHECK-NEXT:     memw_locked(r3,p0) = r646; 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 = r253; CHECK-NEXT:     jumpr r3154; CHECK-NEXT:    }55  %result = atomicrmw usub_cond ptr %ptr, i8 %val seq_cst56  ret i8 %result57}58 59define i16 @atomicrmw_usub_cond_i16(ptr %ptr, i16 %val) {60; CHECK-LABEL: atomicrmw_usub_cond_i16:61; CHECK:         .cfi_startproc62; CHECK-NEXT:  // %bb.0:63; CHECK-NEXT:    {64; CHECK-NEXT:     r0 = and(#24,asl(r0,#3))65; CHECK-NEXT:     r3 = and(r0,#-4)66; CHECK-NEXT:     r2 = ##6553567; CHECK-NEXT:    }68; CHECK-NEXT:    {69; CHECK-NEXT:     r2 = asl(r2,r0)70; CHECK-NEXT:     r4 = zxth(r1)71; CHECK-NEXT:    }72; CHECK-NEXT:    {73; CHECK-NEXT:     r5 = sub(#-1,r2)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:     r6 = memw_locked(r3)80; CHECK-NEXT:    }81; CHECK-NEXT:    {82; CHECK-NEXT:     r2 = lsr(r6,r0)83; CHECK-NEXT:     r6 = and(r6,r5)84; CHECK-NEXT:    }85; CHECK-NEXT:    {86; CHECK-NEXT:     r7 = zxth(r2)87; CHECK-NEXT:    }88; CHECK-NEXT:    {89; CHECK-NEXT:     p0 = cmp.gtu(r4,r7)90; CHECK-NEXT:     if (p0.new) r7 = add(r2,#0)91; CHECK-NEXT:     if (!p0.new) r7 = sub(r2,r1)92; CHECK-NEXT:    }93; CHECK-NEXT:    {94; CHECK-NEXT:     r7 = zxth(r7)95; CHECK-NEXT:    }96; CHECK-NEXT:    {97; CHECK-NEXT:     r6 |= asl(r7,r0)98; CHECK-NEXT:    }99; CHECK-NEXT:    {100; CHECK-NEXT:     memw_locked(r3,p0) = r6101; 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 = r2108; CHECK-NEXT:     jumpr r31109; CHECK-NEXT:    }110  %result = atomicrmw usub_cond ptr %ptr, i16 %val seq_cst111  ret i16 %result112}113 114define i32 @atomicrmw_usub_cond_i32(ptr %ptr, i32 %val) {115; CHECK-LABEL: atomicrmw_usub_cond_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,#0)127; CHECK-NEXT:     if (!p0.new) r3 = sub(r2,r1)128; 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 usub_cond ptr %ptr, i32 %val seq_cst141  ret i32 %result142}143 144define i64 @atomicrmw_usub_cond_i64(ptr %ptr, i64 %val) {145; CHECK-LABEL: atomicrmw_usub_cond_i64:146; CHECK:         .cfi_startproc147; CHECK-NEXT:  // %bb.0:148; CHECK-NEXT:    .p2align 4149; CHECK-NEXT:  .LBB3_1: // %atomicrmw.start150; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1151; CHECK-NEXT:    {152; CHECK-NEXT:     r5:4 = memd_locked(r0)153; CHECK-NEXT:    }154; CHECK-NEXT:    {155; CHECK-NEXT:     p0 = cmp.gtu(r3:2,r5:4)156; CHECK-NEXT:     r7:6 = sub(r5:4,r3:2)157; CHECK-NEXT:    }158; CHECK-NEXT:    {159; CHECK-NEXT:     r8 = mux(p0,r4,r6)160; CHECK-NEXT:     r9 = mux(p0,r5,r7)161; CHECK-NEXT:    }162; CHECK-NEXT:    {163; CHECK-NEXT:     memd_locked(r0,p0) = r9:8164; CHECK-NEXT:    }165; CHECK-NEXT:    {166; CHECK-NEXT:     if (!p0) jump:nt .LBB3_1167; CHECK-NEXT:    }168; CHECK-NEXT:  // %bb.2: // %atomicrmw.end169; CHECK-NEXT:    {170; CHECK-NEXT:     r1:0 = combine(r5,r4)171; CHECK-NEXT:     jumpr r31172; CHECK-NEXT:    }173  %result = atomicrmw usub_cond ptr %ptr, i64 %val seq_cst174  ret i64 %result175}176 177define i8 @atomicrmw_usub_sat_i8(ptr %ptr, i8 %val) {178; CHECK-LABEL: atomicrmw_usub_sat_i8:179; CHECK:         .cfi_startproc180; CHECK-NEXT:  // %bb.0:181; CHECK-NEXT:    {182; CHECK-NEXT:     r0 = and(#24,asl(r0,#3))183; CHECK-NEXT:     r2 = and(r0,#-4)184; CHECK-NEXT:     r3 = #255185; CHECK-NEXT:     r1 = and(r1,#255)186; CHECK-NEXT:    }187; CHECK-NEXT:    {188; CHECK-NEXT:     r3 = asl(r3,r0)189; CHECK-NEXT:    }190; CHECK-NEXT:    {191; CHECK-NEXT:     r3 = sub(#-1,r3)192; CHECK-NEXT:    }193; CHECK-NEXT:    .p2align 4194; CHECK-NEXT:  .LBB4_1: // %atomicrmw.start195; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1196; CHECK-NEXT:    {197; CHECK-NEXT:     r5 = #255198; CHECK-NEXT:     r4 = memw_locked(r2)199; CHECK-NEXT:    }200; CHECK-NEXT:    {201; CHECK-NEXT:     r5 &= lsr(r4,r0)202; CHECK-NEXT:     r6 = and(r4,r3)203; CHECK-NEXT:    }204; CHECK-NEXT:    {205; CHECK-NEXT:     r5 = maxu(r5,r1)206; CHECK-NEXT:    }207; CHECK-NEXT:    {208; CHECK-NEXT:     r5 = sub(r5,r1)209; CHECK-NEXT:    }210; CHECK-NEXT:    {211; CHECK-NEXT:     r6 |= asl(r5,r0)212; CHECK-NEXT:    }213; CHECK-NEXT:    {214; CHECK-NEXT:     memw_locked(r2,p0) = r6215; CHECK-NEXT:    }216; CHECK-NEXT:    {217; CHECK-NEXT:     if (!p0) jump:nt .LBB4_1218; CHECK-NEXT:    }219; CHECK-NEXT:  // %bb.2: // %atomicrmw.end220; CHECK-NEXT:    {221; CHECK-NEXT:     r0 = lsr(r4,r0)222; CHECK-NEXT:     jumpr r31223; CHECK-NEXT:    }224  %result = atomicrmw usub_sat ptr %ptr, i8 %val seq_cst225  ret i8 %result226}227 228define i16 @atomicrmw_usub_sat_i16(ptr %ptr, i16 %val) {229; CHECK-LABEL: atomicrmw_usub_sat_i16:230; CHECK:         .cfi_startproc231; CHECK-NEXT:  // %bb.0:232; CHECK-NEXT:    {233; CHECK-NEXT:     r0 = and(#24,asl(r0,#3))234; CHECK-NEXT:     r2 = and(r0,#-4)235; CHECK-NEXT:     r3 = ##65535236; CHECK-NEXT:    }237; CHECK-NEXT:    {238; CHECK-NEXT:     r3 = asl(r3,r0)239; CHECK-NEXT:     r1 = zxth(r1)240; CHECK-NEXT:    }241; CHECK-NEXT:    {242; CHECK-NEXT:     r3 = sub(#-1,r3)243; CHECK-NEXT:    }244; CHECK-NEXT:    .p2align 4245; CHECK-NEXT:  .LBB5_1: // %atomicrmw.start246; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1247; CHECK-NEXT:    {248; CHECK-NEXT:     r5 = ##65535249; CHECK-NEXT:     r4 = memw_locked(r2)250; CHECK-NEXT:    }251; CHECK-NEXT:    {252; CHECK-NEXT:     r5 &= lsr(r4,r0)253; CHECK-NEXT:     r6 = and(r4,r3)254; CHECK-NEXT:    }255; CHECK-NEXT:    {256; CHECK-NEXT:     r5 = maxu(r5,r1)257; CHECK-NEXT:    }258; CHECK-NEXT:    {259; CHECK-NEXT:     r5 = sub(r5,r1)260; CHECK-NEXT:    }261; CHECK-NEXT:    {262; CHECK-NEXT:     r6 |= asl(r5,r0)263; CHECK-NEXT:    }264; CHECK-NEXT:    {265; CHECK-NEXT:     memw_locked(r2,p0) = r6266; CHECK-NEXT:    }267; CHECK-NEXT:    {268; CHECK-NEXT:     if (!p0) jump:nt .LBB5_1269; CHECK-NEXT:    }270; CHECK-NEXT:  // %bb.2: // %atomicrmw.end271; CHECK-NEXT:    {272; CHECK-NEXT:     r0 = lsr(r4,r0)273; CHECK-NEXT:     jumpr r31274; CHECK-NEXT:    }275  %result = atomicrmw usub_sat ptr %ptr, i16 %val seq_cst276  ret i16 %result277}278 279define i32 @atomicrmw_usub_sat_i32(ptr %ptr, i32 %val) {280; CHECK-LABEL: atomicrmw_usub_sat_i32:281; CHECK:         .cfi_startproc282; CHECK-NEXT:  // %bb.0:283; CHECK-NEXT:    .p2align 4284; CHECK-NEXT:  .LBB6_1: // %atomicrmw.start285; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1286; CHECK-NEXT:    {287; CHECK-NEXT:     r2 = memw_locked(r0)288; CHECK-NEXT:    }289; CHECK-NEXT:    {290; CHECK-NEXT:     r3 = maxu(r2,r1)291; CHECK-NEXT:    }292; CHECK-NEXT:    {293; CHECK-NEXT:     r3 = sub(r3,r1)294; CHECK-NEXT:    }295; CHECK-NEXT:    {296; CHECK-NEXT:     memw_locked(r0,p0) = r3297; CHECK-NEXT:    }298; CHECK-NEXT:    {299; CHECK-NEXT:     if (!p0) jump:nt .LBB6_1300; CHECK-NEXT:    }301; CHECK-NEXT:  // %bb.2: // %atomicrmw.end302; CHECK-NEXT:    {303; CHECK-NEXT:     r0 = r2304; CHECK-NEXT:     jumpr r31305; CHECK-NEXT:    }306  %result = atomicrmw usub_sat ptr %ptr, i32 %val seq_cst307  ret i32 %result308}309 310define i64 @atomicrmw_usub_sat_i64(ptr %ptr, i64 %val) {311; CHECK-LABEL: atomicrmw_usub_sat_i64:312; CHECK:         .cfi_startproc313; CHECK-NEXT:  // %bb.0:314; CHECK-NEXT:    .p2align 4315; CHECK-NEXT:  .LBB7_1: // %atomicrmw.start316; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1317; CHECK-NEXT:    {318; CHECK-NEXT:     r5:4 = memd_locked(r0)319; CHECK-NEXT:    }320; CHECK-NEXT:    {321; CHECK-NEXT:     r7:6 = maxu(r5:4,r3:2)322; CHECK-NEXT:    }323; CHECK-NEXT:    {324; CHECK-NEXT:     r7:6 = sub(r7:6,r3:2)325; CHECK-NEXT:    }326; CHECK-NEXT:    {327; CHECK-NEXT:     memd_locked(r0,p0) = r7:6328; CHECK-NEXT:    }329; CHECK-NEXT:    {330; CHECK-NEXT:     if (!p0) jump:nt .LBB7_1331; CHECK-NEXT:    }332; CHECK-NEXT:  // %bb.2: // %atomicrmw.end333; CHECK-NEXT:    {334; CHECK-NEXT:     r1:0 = combine(r5,r4)335; CHECK-NEXT:     jumpr r31336; CHECK-NEXT:    }337  %result = atomicrmw usub_sat ptr %ptr, i64 %val seq_cst338  ret i64 %result339}340