842 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -csky-no-aliases -mattr=+2e3 < %s -mtriple=csky | FileCheck %s3; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky | FileCheck %s --check-prefix=GENERIC4 5define signext i1 @load_I_bits(ptr nocapture readonly %a) local_unnamed_addr #0 {6; CHECK-LABEL: load_I_bits:7; CHECK: # %bb.0: # %entry8; CHECK-NEXT: ld16.b a0, (a0, 3)9; CHECK-NEXT: sext32 a0, a0, 0, 010; CHECK-NEXT: rts1611;12; GENERIC-LABEL: load_I_bits:13; GENERIC: # %bb.0: # %entry14; GENERIC-NEXT: .cfi_def_cfa_offset 015; GENERIC-NEXT: subi16 sp, sp, 416; GENERIC-NEXT: .cfi_def_cfa_offset 417; GENERIC-NEXT: ld16.b a0, (a0, 3)18; GENERIC-NEXT: lsli16 a0, a0, 719; GENERIC-NEXT: asri16 a0, a0, 720; GENERIC-NEXT: addi16 sp, sp, 421; GENERIC-NEXT: rts1622entry:23 %arrayidx = getelementptr inbounds i1, ptr %a, i64 324 %0 = load i1, ptr %arrayidx, align 125 ret i1 %026}27 28define zeroext i1 @load_I_bit_(ptr nocapture readonly %a) local_unnamed_addr #0 {29; CHECK-LABEL: load_I_bit_:30; CHECK: # %bb.0: # %entry31; CHECK-NEXT: ld16.b a0, (a0, 3)32; CHECK-NEXT: rts1633;34; GENERIC-LABEL: load_I_bit_:35; GENERIC: # %bb.0: # %entry36; GENERIC-NEXT: .cfi_def_cfa_offset 037; GENERIC-NEXT: subi16 sp, sp, 438; GENERIC-NEXT: .cfi_def_cfa_offset 439; GENERIC-NEXT: ld16.b a0, (a0, 3)40; GENERIC-NEXT: addi16 sp, sp, 441; GENERIC-NEXT: rts1642entry:43 %arrayidx = getelementptr inbounds i1, ptr %a, i64 344 %0 = load i1, ptr %arrayidx, align 145 ret i1 %046}47 48define signext i8 @load_I_bs(ptr nocapture readonly %a) local_unnamed_addr #0 {49; CHECK-LABEL: load_I_bs:50; CHECK: # %bb.0: # %entry51; CHECK-NEXT: ld32.bs a0, (a0, 3)52; CHECK-NEXT: rts1653;54; GENERIC-LABEL: load_I_bs:55; GENERIC: # %bb.0: # %entry56; GENERIC-NEXT: .cfi_def_cfa_offset 057; GENERIC-NEXT: subi16 sp, sp, 458; GENERIC-NEXT: .cfi_def_cfa_offset 459; GENERIC-NEXT: ld16.b a0, (a0, 3)60; GENERIC-NEXT: sextb16 a0, a061; GENERIC-NEXT: addi16 sp, sp, 462; GENERIC-NEXT: rts1663entry:64 %arrayidx = getelementptr inbounds i8, ptr %a, i64 365 %0 = load i8, ptr %arrayidx, align 166 ret i8 %067}68 69define zeroext i8 @load_I_b_(ptr nocapture readonly %a) local_unnamed_addr #0 {70; CHECK-LABEL: load_I_b_:71; CHECK: # %bb.0: # %entry72; CHECK-NEXT: ld16.b a0, (a0, 3)73; CHECK-NEXT: rts1674;75; GENERIC-LABEL: load_I_b_:76; GENERIC: # %bb.0: # %entry77; GENERIC-NEXT: .cfi_def_cfa_offset 078; GENERIC-NEXT: subi16 sp, sp, 479; GENERIC-NEXT: .cfi_def_cfa_offset 480; GENERIC-NEXT: ld16.b a0, (a0, 3)81; GENERIC-NEXT: addi16 sp, sp, 482; GENERIC-NEXT: rts1683entry:84 %arrayidx = getelementptr inbounds i8, ptr %a, i64 385 %0 = load i8, ptr %arrayidx, align 186 ret i8 %087}88 89define signext i16 @load_I_hs(ptr nocapture readonly %a) local_unnamed_addr #0 {90; CHECK-LABEL: load_I_hs:91; CHECK: # %bb.0: # %entry92; CHECK-NEXT: ld32.hs a0, (a0, 6)93; CHECK-NEXT: rts1694;95; GENERIC-LABEL: load_I_hs:96; GENERIC: # %bb.0: # %entry97; GENERIC-NEXT: .cfi_def_cfa_offset 098; GENERIC-NEXT: subi16 sp, sp, 499; GENERIC-NEXT: .cfi_def_cfa_offset 4100; GENERIC-NEXT: ld16.h a0, (a0, 6)101; GENERIC-NEXT: sexth16 a0, a0102; GENERIC-NEXT: addi16 sp, sp, 4103; GENERIC-NEXT: rts16104entry:105 %arrayidx = getelementptr inbounds i16, ptr %a, i64 3106 %0 = load i16, ptr %arrayidx, align 2107 ret i16 %0108}109 110define zeroext i16 @load_I_h_(ptr nocapture readonly %a) local_unnamed_addr #0 {111; CHECK-LABEL: load_I_h_:112; CHECK: # %bb.0: # %entry113; CHECK-NEXT: ld16.h a0, (a0, 6)114; CHECK-NEXT: rts16115;116; GENERIC-LABEL: load_I_h_:117; GENERIC: # %bb.0: # %entry118; GENERIC-NEXT: .cfi_def_cfa_offset 0119; GENERIC-NEXT: subi16 sp, sp, 4120; GENERIC-NEXT: .cfi_def_cfa_offset 4121; GENERIC-NEXT: ld16.h a0, (a0, 6)122; GENERIC-NEXT: addi16 sp, sp, 4123; GENERIC-NEXT: rts16124entry:125 %arrayidx = getelementptr inbounds i16, ptr %a, i64 3126 %0 = load i16, ptr %arrayidx, align 2127 ret i16 %0128}129 130define i32 @load_I_w(ptr nocapture readonly %a) local_unnamed_addr #0 {131; CHECK-LABEL: load_I_w:132; CHECK: # %bb.0: # %entry133; CHECK-NEXT: ld16.w a0, (a0, 12)134; CHECK-NEXT: rts16135;136; GENERIC-LABEL: load_I_w:137; GENERIC: # %bb.0: # %entry138; GENERIC-NEXT: .cfi_def_cfa_offset 0139; GENERIC-NEXT: subi16 sp, sp, 4140; GENERIC-NEXT: .cfi_def_cfa_offset 4141; GENERIC-NEXT: ld16.w a0, (a0, 12)142; GENERIC-NEXT: addi16 sp, sp, 4143; GENERIC-NEXT: rts16144entry:145 %arrayidx = getelementptr inbounds i32, ptr %a, i64 3146 %0 = load i32, ptr %arrayidx, align 4147 ret i32 %0148}149 150define i64 @load_I_d(ptr nocapture readonly %a) local_unnamed_addr #0 {151; CHECK-LABEL: load_I_d:152; CHECK: # %bb.0: # %entry153; CHECK-NEXT: ld16.w a2, (a0, 24)154; CHECK-NEXT: ld16.w a1, (a0, 28)155; CHECK-NEXT: mov16 a0, a2156; CHECK-NEXT: rts16157;158; GENERIC-LABEL: load_I_d:159; GENERIC: # %bb.0: # %entry160; GENERIC-NEXT: .cfi_def_cfa_offset 0161; GENERIC-NEXT: subi16 sp, sp, 4162; GENERIC-NEXT: .cfi_def_cfa_offset 4163; GENERIC-NEXT: ld16.w a2, (a0, 24)164; GENERIC-NEXT: ld16.w a1, (a0, 28)165; GENERIC-NEXT: mov16 a0, a2166; GENERIC-NEXT: addi16 sp, sp, 4167; GENERIC-NEXT: rts16168entry:169 %arrayidx = getelementptr inbounds i64, ptr %a, i64 3170 %0 = load i64, ptr %arrayidx, align 4171 ret i64 %0172}173 174define i8 @load_I_i8_anyext(ptr %p) {175; CHECK-LABEL: load_I_i8_anyext:176; CHECK: # %bb.0: # %entry177; CHECK-NEXT: ld16.b a0, (a0, 0)178; CHECK-NEXT: rts16179;180; GENERIC-LABEL: load_I_i8_anyext:181; GENERIC: # %bb.0: # %entry182; GENERIC-NEXT: .cfi_def_cfa_offset 0183; GENERIC-NEXT: subi16 sp, sp, 4184; GENERIC-NEXT: .cfi_def_cfa_offset 4185; GENERIC-NEXT: ld16.b a0, (a0, 0)186; GENERIC-NEXT: addi16 sp, sp, 4187; GENERIC-NEXT: rts16188entry:189 %ret = load i8, ptr %p, align 1190 ret i8 %ret191}192 193define signext i1 @load_R_bits(ptr nocapture readonly %a, i32 %b) local_unnamed_addr #0 {194; CHECK-LABEL: load_R_bits:195; CHECK: # %bb.0: # %entry196; CHECK-NEXT: ldr32.bs a0, (a0, a1 << 0)197; CHECK-NEXT: sext32 a0, a0, 0, 0198; CHECK-NEXT: rts16199;200; GENERIC-LABEL: load_R_bits:201; GENERIC: # %bb.0: # %entry202; GENERIC-NEXT: .cfi_def_cfa_offset 0203; GENERIC-NEXT: subi16 sp, sp, 4204; GENERIC-NEXT: .cfi_def_cfa_offset 4205; GENERIC-NEXT: addu16 a0, a0, a1206; GENERIC-NEXT: ld16.b a0, (a0, 0)207; GENERIC-NEXT: lsli16 a0, a0, 7208; GENERIC-NEXT: asri16 a0, a0, 7209; GENERIC-NEXT: addi16 sp, sp, 4210; GENERIC-NEXT: rts16211entry:212 %idxprom = sext i32 %b to i64213 %arrayidx = getelementptr inbounds i1, ptr %a, i64 %idxprom214 %0 = load i1, ptr %arrayidx, align 1215 ret i1 %0216}217 218define zeroext i1 @load_R_bit_(ptr nocapture readonly %a, i32 %b) local_unnamed_addr #0 {219; CHECK-LABEL: load_R_bit_:220; CHECK: # %bb.0: # %entry221; CHECK-NEXT: ldr32.b a0, (a0, a1 << 0)222; CHECK-NEXT: rts16223;224; GENERIC-LABEL: load_R_bit_:225; GENERIC: # %bb.0: # %entry226; GENERIC-NEXT: .cfi_def_cfa_offset 0227; GENERIC-NEXT: subi16 sp, sp, 4228; GENERIC-NEXT: .cfi_def_cfa_offset 4229; GENERIC-NEXT: addu16 a0, a0, a1230; GENERIC-NEXT: ld16.b a0, (a0, 0)231; GENERIC-NEXT: addi16 sp, sp, 4232; GENERIC-NEXT: rts16233entry:234 %idxprom = sext i32 %b to i64235 %arrayidx = getelementptr inbounds i1, ptr %a, i64 %idxprom236 %0 = load i1, ptr %arrayidx, align 1237 ret i1 %0238}239 240 241define signext i8 @load_R_bs(ptr nocapture readonly %a, i32 %b) local_unnamed_addr #0 {242; CHECK-LABEL: load_R_bs:243; CHECK: # %bb.0: # %entry244; CHECK-NEXT: ldr32.bs a0, (a0, a1 << 0)245; CHECK-NEXT: rts16246;247; GENERIC-LABEL: load_R_bs:248; GENERIC: # %bb.0: # %entry249; GENERIC-NEXT: .cfi_def_cfa_offset 0250; GENERIC-NEXT: subi16 sp, sp, 4251; GENERIC-NEXT: .cfi_def_cfa_offset 4252; GENERIC-NEXT: addu16 a0, a0, a1253; GENERIC-NEXT: ld16.b a0, (a0, 0)254; GENERIC-NEXT: sextb16 a0, a0255; GENERIC-NEXT: addi16 sp, sp, 4256; GENERIC-NEXT: rts16257entry:258 %idxprom = sext i32 %b to i64259 %arrayidx = getelementptr inbounds i8, ptr %a, i64 %idxprom260 %0 = load i8, ptr %arrayidx, align 1261 ret i8 %0262}263 264define zeroext i8 @load_R_b_(ptr nocapture readonly %a, i32 %b) local_unnamed_addr #0 {265; CHECK-LABEL: load_R_b_:266; CHECK: # %bb.0: # %entry267; CHECK-NEXT: ldr32.b a0, (a0, a1 << 0)268; CHECK-NEXT: rts16269;270; GENERIC-LABEL: load_R_b_:271; GENERIC: # %bb.0: # %entry272; GENERIC-NEXT: .cfi_def_cfa_offset 0273; GENERIC-NEXT: subi16 sp, sp, 4274; GENERIC-NEXT: .cfi_def_cfa_offset 4275; GENERIC-NEXT: addu16 a0, a0, a1276; GENERIC-NEXT: ld16.b a0, (a0, 0)277; GENERIC-NEXT: addi16 sp, sp, 4278; GENERIC-NEXT: rts16279entry:280 %idxprom = sext i32 %b to i64281 %arrayidx = getelementptr inbounds i8, ptr %a, i64 %idxprom282 %0 = load i8, ptr %arrayidx, align 1283 ret i8 %0284}285 286define signext i16 @load_R_hs(ptr nocapture readonly %a, i32 %b) local_unnamed_addr #0 {287; CHECK-LABEL: load_R_hs:288; CHECK: # %bb.0: # %entry289; CHECK-NEXT: ldr32.hs a0, (a0, a1 << 1)290; CHECK-NEXT: rts16291;292; GENERIC-LABEL: load_R_hs:293; GENERIC: # %bb.0: # %entry294; GENERIC-NEXT: .cfi_def_cfa_offset 0295; GENERIC-NEXT: subi16 sp, sp, 4296; GENERIC-NEXT: .cfi_def_cfa_offset 4297; GENERIC-NEXT: lsli16 a1, a1, 1298; GENERIC-NEXT: addu16 a0, a0, a1299; GENERIC-NEXT: ld16.h a0, (a0, 0)300; GENERIC-NEXT: sexth16 a0, a0301; GENERIC-NEXT: addi16 sp, sp, 4302; GENERIC-NEXT: rts16303entry:304 %idxprom = sext i32 %b to i64305 %arrayidx = getelementptr inbounds i16, ptr %a, i64 %idxprom306 %0 = load i16, ptr %arrayidx, align 2307 ret i16 %0308}309 310define zeroext i16 @load_R_h_(ptr nocapture readonly %a, i32 %b) local_unnamed_addr #0 {311; CHECK-LABEL: load_R_h_:312; CHECK: # %bb.0: # %entry313; CHECK-NEXT: ldr32.h a0, (a0, a1 << 1)314; CHECK-NEXT: rts16315;316; GENERIC-LABEL: load_R_h_:317; GENERIC: # %bb.0: # %entry318; GENERIC-NEXT: .cfi_def_cfa_offset 0319; GENERIC-NEXT: subi16 sp, sp, 4320; GENERIC-NEXT: .cfi_def_cfa_offset 4321; GENERIC-NEXT: lsli16 a1, a1, 1322; GENERIC-NEXT: addu16 a0, a0, a1323; GENERIC-NEXT: ld16.h a0, (a0, 0)324; GENERIC-NEXT: addi16 sp, sp, 4325; GENERIC-NEXT: rts16326entry:327 %idxprom = sext i32 %b to i64328 %arrayidx = getelementptr inbounds i16, ptr %a, i64 %idxprom329 %0 = load i16, ptr %arrayidx, align 2330 ret i16 %0331}332 333define i32 @load_R_w(ptr nocapture readonly %a, i32 %b) local_unnamed_addr #0 {334; CHECK-LABEL: load_R_w:335; CHECK: # %bb.0: # %entry336; CHECK-NEXT: ldr32.w a0, (a0, a1 << 2)337; CHECK-NEXT: rts16338;339; GENERIC-LABEL: load_R_w:340; GENERIC: # %bb.0: # %entry341; GENERIC-NEXT: .cfi_def_cfa_offset 0342; GENERIC-NEXT: subi16 sp, sp, 4343; GENERIC-NEXT: .cfi_def_cfa_offset 4344; GENERIC-NEXT: lsli16 a1, a1, 2345; GENERIC-NEXT: addu16 a0, a0, a1346; GENERIC-NEXT: ld16.w a0, (a0, 0)347; GENERIC-NEXT: addi16 sp, sp, 4348; GENERIC-NEXT: rts16349entry:350 %idxprom = sext i32 %b to i64351 %arrayidx = getelementptr inbounds i32, ptr %a, i64 %idxprom352 %0 = load i32, ptr %arrayidx, align 4353 ret i32 %0354}355 356define i64 @load_R_d(ptr nocapture readonly %a, i32 %b) local_unnamed_addr #0 {357; CHECK-LABEL: load_R_d:358; CHECK: # %bb.0: # %entry359; CHECK-NEXT: ixd32 a2, a0, a1360; CHECK-NEXT: ldr32.w a0, (a0, a1 << 3)361; CHECK-NEXT: ld16.w a1, (a2, 4)362; CHECK-NEXT: rts16363;364; GENERIC-LABEL: load_R_d:365; GENERIC: # %bb.0: # %entry366; GENERIC-NEXT: .cfi_def_cfa_offset 0367; GENERIC-NEXT: subi16 sp, sp, 4368; GENERIC-NEXT: .cfi_def_cfa_offset 4369; GENERIC-NEXT: lsli16 a1, a1, 3370; GENERIC-NEXT: addu16 a1, a0, a1371; GENERIC-NEXT: ld16.w a0, (a1, 0)372; GENERIC-NEXT: ld16.w a1, (a1, 4)373; GENERIC-NEXT: addi16 sp, sp, 4374; GENERIC-NEXT: rts16375entry:376 %idxprom = sext i32 %b to i64377 %arrayidx = getelementptr inbounds i64, ptr %a, i64 %idxprom378 %0 = load i64, ptr %arrayidx, align 4379 ret i64 %0380}381 382define i8 @loadR_i8_anyext(ptr %c, i32 %a) {383; CHECK-LABEL: loadR_i8_anyext:384; CHECK: # %bb.0: # %entry385; CHECK-NEXT: ldr32.bs a0, (a0, a1 << 0)386; CHECK-NEXT: rts16387;388; GENERIC-LABEL: loadR_i8_anyext:389; GENERIC: # %bb.0: # %entry390; GENERIC-NEXT: .cfi_def_cfa_offset 0391; GENERIC-NEXT: subi16 sp, sp, 4392; GENERIC-NEXT: .cfi_def_cfa_offset 4393; GENERIC-NEXT: addu16 a0, a0, a1394; GENERIC-NEXT: ld16.b a0, (a0, 0)395; GENERIC-NEXT: addi16 sp, sp, 4396; GENERIC-NEXT: rts16397entry:398 %idxprom = sext i32 %a to i64399 %arrayidx = getelementptr inbounds i8, ptr %c, i64 %idxprom400 %0 = load i8, ptr %arrayidx, align 1401 ret i8 %0402}403 404define signext i1 @store_I_bits(ptr %a, i1 %b) local_unnamed_addr #0 {405; CHECK-LABEL: store_I_bits:406; CHECK: # %bb.0: # %entry407; CHECK-NEXT: andi32 a1, a1, 1408; CHECK-NEXT: st16.b a1, (a0, 3)409; CHECK-NEXT: movi16 a0, 0410; CHECK-NEXT: rts16411;412; GENERIC-LABEL: store_I_bits:413; GENERIC: # %bb.0: # %entry414; GENERIC-NEXT: .cfi_def_cfa_offset 0415; GENERIC-NEXT: subi16 sp, sp, 4416; GENERIC-NEXT: .cfi_def_cfa_offset 4417; GENERIC-NEXT: movi16 a2, 1418; GENERIC-NEXT: and16 a2, a1419; GENERIC-NEXT: st16.b a2, (a0, 3)420; GENERIC-NEXT: movi16 a0, 0421; GENERIC-NEXT: addi16 sp, sp, 4422; GENERIC-NEXT: rts16423entry:424 %arrayidx = getelementptr inbounds i1, ptr %a, i64 3425 store i1 %b, ptr %arrayidx, align 1426 ret i1 0427}428 429define zeroext i1 @store_I_bit_(ptr %a, i1 %b) local_unnamed_addr #0 {430; CHECK-LABEL: store_I_bit_:431; CHECK: # %bb.0: # %entry432; CHECK-NEXT: andi32 a1, a1, 1433; CHECK-NEXT: st16.b a1, (a0, 3)434; CHECK-NEXT: movi16 a0, 0435; CHECK-NEXT: rts16436;437; GENERIC-LABEL: store_I_bit_:438; GENERIC: # %bb.0: # %entry439; GENERIC-NEXT: .cfi_def_cfa_offset 0440; GENERIC-NEXT: subi16 sp, sp, 4441; GENERIC-NEXT: .cfi_def_cfa_offset 4442; GENERIC-NEXT: movi16 a2, 1443; GENERIC-NEXT: and16 a2, a1444; GENERIC-NEXT: st16.b a2, (a0, 3)445; GENERIC-NEXT: movi16 a0, 0446; GENERIC-NEXT: addi16 sp, sp, 4447; GENERIC-NEXT: rts16448entry:449 %arrayidx = getelementptr inbounds i1, ptr %a, i64 3450 store i1 %b, ptr %arrayidx, align 1451 ret i1 0452}453 454define signext i8 @store_I_bs(ptr %a, i8 %b) local_unnamed_addr #0 {455; CHECK-LABEL: store_I_bs:456; CHECK: # %bb.0: # %entry457; CHECK-NEXT: st16.b a1, (a0, 3)458; CHECK-NEXT: movi16 a0, 0459; CHECK-NEXT: rts16460;461; GENERIC-LABEL: store_I_bs:462; GENERIC: # %bb.0: # %entry463; GENERIC-NEXT: .cfi_def_cfa_offset 0464; GENERIC-NEXT: subi16 sp, sp, 4465; GENERIC-NEXT: .cfi_def_cfa_offset 4466; GENERIC-NEXT: st16.b a1, (a0, 3)467; GENERIC-NEXT: movi16 a0, 0468; GENERIC-NEXT: addi16 sp, sp, 4469; GENERIC-NEXT: rts16470entry:471 %arrayidx = getelementptr inbounds i8, ptr %a, i64 3472 store i8 %b, ptr %arrayidx, align 1473 ret i8 0474}475 476define zeroext i8 @store_I_b_(ptr %a, i8 %b) local_unnamed_addr #0 {477; CHECK-LABEL: store_I_b_:478; CHECK: # %bb.0: # %entry479; CHECK-NEXT: st16.b a1, (a0, 3)480; CHECK-NEXT: movi16 a0, 0481; CHECK-NEXT: rts16482;483; GENERIC-LABEL: store_I_b_:484; GENERIC: # %bb.0: # %entry485; GENERIC-NEXT: .cfi_def_cfa_offset 0486; GENERIC-NEXT: subi16 sp, sp, 4487; GENERIC-NEXT: .cfi_def_cfa_offset 4488; GENERIC-NEXT: st16.b a1, (a0, 3)489; GENERIC-NEXT: movi16 a0, 0490; GENERIC-NEXT: addi16 sp, sp, 4491; GENERIC-NEXT: rts16492entry:493 %arrayidx = getelementptr inbounds i8, ptr %a, i64 3494 store i8 %b, ptr %arrayidx, align 1495 ret i8 0496}497 498define signext i16 @store_I_hs(ptr %a, i16 %b) local_unnamed_addr #0 {499; CHECK-LABEL: store_I_hs:500; CHECK: # %bb.0: # %entry501; CHECK-NEXT: st16.h a1, (a0, 6)502; CHECK-NEXT: movi16 a0, 0503; CHECK-NEXT: rts16504;505; GENERIC-LABEL: store_I_hs:506; GENERIC: # %bb.0: # %entry507; GENERIC-NEXT: .cfi_def_cfa_offset 0508; GENERIC-NEXT: subi16 sp, sp, 4509; GENERIC-NEXT: .cfi_def_cfa_offset 4510; GENERIC-NEXT: st16.h a1, (a0, 6)511; GENERIC-NEXT: movi16 a0, 0512; GENERIC-NEXT: addi16 sp, sp, 4513; GENERIC-NEXT: rts16514entry:515 %arrayidx = getelementptr inbounds i16, ptr %a, i64 3516 store i16 %b, ptr %arrayidx, align 2517 ret i16 0518}519 520define zeroext i16 @store_I_h_(ptr %a, i16 %b) local_unnamed_addr #0 {521; CHECK-LABEL: store_I_h_:522; CHECK: # %bb.0: # %entry523; CHECK-NEXT: st16.h a1, (a0, 6)524; CHECK-NEXT: movi16 a0, 0525; CHECK-NEXT: rts16526;527; GENERIC-LABEL: store_I_h_:528; GENERIC: # %bb.0: # %entry529; GENERIC-NEXT: .cfi_def_cfa_offset 0530; GENERIC-NEXT: subi16 sp, sp, 4531; GENERIC-NEXT: .cfi_def_cfa_offset 4532; GENERIC-NEXT: st16.h a1, (a0, 6)533; GENERIC-NEXT: movi16 a0, 0534; GENERIC-NEXT: addi16 sp, sp, 4535; GENERIC-NEXT: rts16536entry:537 %arrayidx = getelementptr inbounds i16, ptr %a, i64 3538 store i16 %b, ptr %arrayidx, align 2539 ret i16 0540}541 542define i32 @store_I_w(ptr %a, i32 %b) local_unnamed_addr #0 {543; CHECK-LABEL: store_I_w:544; CHECK: # %bb.0: # %entry545; CHECK-NEXT: st16.w a1, (a0, 12)546; CHECK-NEXT: movi16 a0, 0547; CHECK-NEXT: rts16548;549; GENERIC-LABEL: store_I_w:550; GENERIC: # %bb.0: # %entry551; GENERIC-NEXT: .cfi_def_cfa_offset 0552; GENERIC-NEXT: subi16 sp, sp, 4553; GENERIC-NEXT: .cfi_def_cfa_offset 4554; GENERIC-NEXT: st16.w a1, (a0, 12)555; GENERIC-NEXT: movi16 a0, 0556; GENERIC-NEXT: addi16 sp, sp, 4557; GENERIC-NEXT: rts16558entry:559 %arrayidx = getelementptr inbounds i32, ptr %a, i64 3560 store i32 %b, ptr %arrayidx, align 4561 ret i32 0562}563 564define i64 @store_I_d(ptr %a, i64 %b) local_unnamed_addr #0 {565; CHECK-LABEL: store_I_d:566; CHECK: # %bb.0: # %entry567; CHECK-NEXT: st16.w a2, (a0, 28)568; CHECK-NEXT: st16.w a1, (a0, 24)569; CHECK-NEXT: movi16 a0, 0570; CHECK-NEXT: movi16 a1, 0571; CHECK-NEXT: rts16572;573; GENERIC-LABEL: store_I_d:574; GENERIC: # %bb.0: # %entry575; GENERIC-NEXT: .cfi_def_cfa_offset 0576; GENERIC-NEXT: subi16 sp, sp, 4577; GENERIC-NEXT: .cfi_def_cfa_offset 4578; GENERIC-NEXT: st16.w a2, (a0, 28)579; GENERIC-NEXT: st16.w a1, (a0, 24)580; GENERIC-NEXT: movi16 a0, 0581; GENERIC-NEXT: movi16 a1, 0582; GENERIC-NEXT: addi16 sp, sp, 4583; GENERIC-NEXT: rts16584entry:585 %arrayidx = getelementptr inbounds i64, ptr %a, i64 3586 store i64 %b, ptr %arrayidx, align 4587 ret i64 0588}589 590define i8 @store_I_i8_anyext(ptr %p, i8 %b) {591; CHECK-LABEL: store_I_i8_anyext:592; CHECK: # %bb.0: # %entry593; CHECK-NEXT: st16.b a1, (a0, 0)594; CHECK-NEXT: movi16 a0, 0595; CHECK-NEXT: rts16596;597; GENERIC-LABEL: store_I_i8_anyext:598; GENERIC: # %bb.0: # %entry599; GENERIC-NEXT: .cfi_def_cfa_offset 0600; GENERIC-NEXT: subi16 sp, sp, 4601; GENERIC-NEXT: .cfi_def_cfa_offset 4602; GENERIC-NEXT: st16.b a1, (a0, 0)603; GENERIC-NEXT: movi16 a0, 0604; GENERIC-NEXT: addi16 sp, sp, 4605; GENERIC-NEXT: rts16606entry:607 store i8 %b, ptr %p, align 1608 ret i8 0609}610 611define signext i1 @store_R_bits(ptr %a, i32 %b, i1 %c) local_unnamed_addr #0 {612; CHECK-LABEL: store_R_bits:613; CHECK: # %bb.0: # %entry614; CHECK-NEXT: andi32 a2, a2, 1615; CHECK-NEXT: str32.b a2, (a0, a1 << 0)616; CHECK-NEXT: movi16 a0, 0617; CHECK-NEXT: rts16618;619; GENERIC-LABEL: store_R_bits:620; GENERIC: # %bb.0: # %entry621; GENERIC-NEXT: .cfi_def_cfa_offset 0622; GENERIC-NEXT: subi16 sp, sp, 4623; GENERIC-NEXT: .cfi_def_cfa_offset 4624; GENERIC-NEXT: addu16 a0, a0, a1625; GENERIC-NEXT: movi16 a1, 1626; GENERIC-NEXT: and16 a1, a2627; GENERIC-NEXT: st16.b a1, (a0, 0)628; GENERIC-NEXT: movi16 a0, 0629; GENERIC-NEXT: addi16 sp, sp, 4630; GENERIC-NEXT: rts16631entry:632 %idxprom = sext i32 %b to i64633 %arrayidx = getelementptr inbounds i1, ptr %a, i64 %idxprom634 store i1 %c, ptr %arrayidx, align 1635 ret i1 0636}637 638define zeroext i1 @store_R_bit_(ptr %a, i32 %b, i1 %c) local_unnamed_addr #0 {639; CHECK-LABEL: store_R_bit_:640; CHECK: # %bb.0: # %entry641; CHECK-NEXT: andi32 a2, a2, 1642; CHECK-NEXT: str32.b a2, (a0, a1 << 0)643; CHECK-NEXT: movi16 a0, 0644; CHECK-NEXT: rts16645;646; GENERIC-LABEL: store_R_bit_:647; GENERIC: # %bb.0: # %entry648; GENERIC-NEXT: .cfi_def_cfa_offset 0649; GENERIC-NEXT: subi16 sp, sp, 4650; GENERIC-NEXT: .cfi_def_cfa_offset 4651; GENERIC-NEXT: addu16 a0, a0, a1652; GENERIC-NEXT: movi16 a1, 1653; GENERIC-NEXT: and16 a1, a2654; GENERIC-NEXT: st16.b a1, (a0, 0)655; GENERIC-NEXT: movi16 a0, 0656; GENERIC-NEXT: addi16 sp, sp, 4657; GENERIC-NEXT: rts16658entry:659 %idxprom = sext i32 %b to i64660 %arrayidx = getelementptr inbounds i1, ptr %a, i64 %idxprom661 store i1 %c, ptr %arrayidx, align 1662 ret i1 0663}664 665 666define signext i8 @store_R_bs(ptr %a, i32 %b, i8 %c) local_unnamed_addr #0 {667; CHECK-LABEL: store_R_bs:668; CHECK: # %bb.0: # %entry669; CHECK-NEXT: str32.b a2, (a0, a1 << 0)670; CHECK-NEXT: movi16 a0, 0671; CHECK-NEXT: rts16672;673; GENERIC-LABEL: store_R_bs:674; GENERIC: # %bb.0: # %entry675; GENERIC-NEXT: .cfi_def_cfa_offset 0676; GENERIC-NEXT: subi16 sp, sp, 4677; GENERIC-NEXT: .cfi_def_cfa_offset 4678; GENERIC-NEXT: addu16 a0, a0, a1679; GENERIC-NEXT: st16.b a2, (a0, 0)680; GENERIC-NEXT: movi16 a0, 0681; GENERIC-NEXT: addi16 sp, sp, 4682; GENERIC-NEXT: rts16683entry:684 %idxprom = sext i32 %b to i64685 %arrayidx = getelementptr inbounds i8, ptr %a, i64 %idxprom686 store i8 %c, ptr %arrayidx, align 1687 ret i8 0688}689 690define zeroext i8 @store_R_b_(ptr %a, i32 %b, i8 %c) local_unnamed_addr #0 {691; CHECK-LABEL: store_R_b_:692; CHECK: # %bb.0: # %entry693; CHECK-NEXT: str32.b a2, (a0, a1 << 0)694; CHECK-NEXT: movi16 a0, 0695; CHECK-NEXT: rts16696;697; GENERIC-LABEL: store_R_b_:698; GENERIC: # %bb.0: # %entry699; GENERIC-NEXT: .cfi_def_cfa_offset 0700; GENERIC-NEXT: subi16 sp, sp, 4701; GENERIC-NEXT: .cfi_def_cfa_offset 4702; GENERIC-NEXT: addu16 a0, a0, a1703; GENERIC-NEXT: st16.b a2, (a0, 0)704; GENERIC-NEXT: movi16 a0, 0705; GENERIC-NEXT: addi16 sp, sp, 4706; GENERIC-NEXT: rts16707entry:708 %idxprom = sext i32 %b to i64709 %arrayidx = getelementptr inbounds i8, ptr %a, i64 %idxprom710 store i8 %c, ptr %arrayidx, align 1711 ret i8 0712}713 714define signext i16 @store_R_hs(ptr %a, i32 %b, i16 %c) local_unnamed_addr #0 {715; CHECK-LABEL: store_R_hs:716; CHECK: # %bb.0: # %entry717; CHECK-NEXT: str32.h a2, (a0, a1 << 1)718; CHECK-NEXT: movi16 a0, 0719; CHECK-NEXT: rts16720;721; GENERIC-LABEL: store_R_hs:722; GENERIC: # %bb.0: # %entry723; GENERIC-NEXT: .cfi_def_cfa_offset 0724; GENERIC-NEXT: subi16 sp, sp, 4725; GENERIC-NEXT: .cfi_def_cfa_offset 4726; GENERIC-NEXT: lsli16 a1, a1, 1727; GENERIC-NEXT: addu16 a0, a0, a1728; GENERIC-NEXT: st16.h a2, (a0, 0)729; GENERIC-NEXT: movi16 a0, 0730; GENERIC-NEXT: addi16 sp, sp, 4731; GENERIC-NEXT: rts16732entry:733 %idxprom = sext i32 %b to i64734 %arrayidx = getelementptr inbounds i16, ptr %a, i64 %idxprom735 store i16 %c, ptr %arrayidx, align 2736 ret i16 0737}738 739define zeroext i16 @store_R_h_(ptr %a, i32 %b, i16 %c) local_unnamed_addr #0 {740; CHECK-LABEL: store_R_h_:741; CHECK: # %bb.0: # %entry742; CHECK-NEXT: str32.h a2, (a0, a1 << 1)743; CHECK-NEXT: movi16 a0, 0744; CHECK-NEXT: rts16745;746; GENERIC-LABEL: store_R_h_:747; GENERIC: # %bb.0: # %entry748; GENERIC-NEXT: .cfi_def_cfa_offset 0749; GENERIC-NEXT: subi16 sp, sp, 4750; GENERIC-NEXT: .cfi_def_cfa_offset 4751; GENERIC-NEXT: lsli16 a1, a1, 1752; GENERIC-NEXT: addu16 a0, a0, a1753; GENERIC-NEXT: st16.h a2, (a0, 0)754; GENERIC-NEXT: movi16 a0, 0755; GENERIC-NEXT: addi16 sp, sp, 4756; GENERIC-NEXT: rts16757entry:758 %idxprom = sext i32 %b to i64759 %arrayidx = getelementptr inbounds i16, ptr %a, i64 %idxprom760 store i16 %c, ptr %arrayidx, align 2761 ret i16 0762}763 764define i32 @store_R_w(ptr %a, i32 %b, i32 %c) local_unnamed_addr #0 {765; CHECK-LABEL: store_R_w:766; CHECK: # %bb.0: # %entry767; CHECK-NEXT: str32.w a2, (a0, a1 << 2)768; CHECK-NEXT: movi16 a0, 0769; CHECK-NEXT: rts16770;771; GENERIC-LABEL: store_R_w:772; GENERIC: # %bb.0: # %entry773; GENERIC-NEXT: .cfi_def_cfa_offset 0774; GENERIC-NEXT: subi16 sp, sp, 4775; GENERIC-NEXT: .cfi_def_cfa_offset 4776; GENERIC-NEXT: lsli16 a1, a1, 2777; GENERIC-NEXT: addu16 a0, a0, a1778; GENERIC-NEXT: st16.w a2, (a0, 0)779; GENERIC-NEXT: movi16 a0, 0780; GENERIC-NEXT: addi16 sp, sp, 4781; GENERIC-NEXT: rts16782entry:783 %idxprom = sext i32 %b to i64784 %arrayidx = getelementptr inbounds i32, ptr %a, i64 %idxprom785 store i32 %c, ptr %arrayidx, align 4786 ret i32 0787}788 789define i64 @store_R_d(ptr %a, i32 %b, i64 %c) local_unnamed_addr #0 {790; CHECK-LABEL: store_R_d:791; CHECK: # %bb.0: # %entry792; CHECK-NEXT: ixd32 t0, a0, a1793; CHECK-NEXT: str32.w a2, (a0, a1 << 3)794; CHECK-NEXT: st32.w a3, (t0, 4)795; CHECK-NEXT: movi16 a0, 0796; CHECK-NEXT: movi16 a1, 0797; CHECK-NEXT: rts16798;799; GENERIC-LABEL: store_R_d:800; GENERIC: # %bb.0: # %entry801; GENERIC-NEXT: .cfi_def_cfa_offset 0802; GENERIC-NEXT: subi16 sp, sp, 4803; GENERIC-NEXT: .cfi_def_cfa_offset 4804; GENERIC-NEXT: lsli16 a1, a1, 3805; GENERIC-NEXT: addu16 a0, a0, a1806; GENERIC-NEXT: st16.w a3, (a0, 4)807; GENERIC-NEXT: st16.w a2, (a0, 0)808; GENERIC-NEXT: movi16 a0, 0809; GENERIC-NEXT: movi16 a1, 0810; GENERIC-NEXT: addi16 sp, sp, 4811; GENERIC-NEXT: rts16812entry:813 %idxprom = sext i32 %b to i64814 %arrayidx = getelementptr inbounds i64, ptr %a, i64 %idxprom815 store i64 %c, ptr %arrayidx, align 4816 ret i64 0817}818 819define i8 @storeR_i8_anyext(ptr %c, i32 %a, i8 %d) {820; CHECK-LABEL: storeR_i8_anyext:821; CHECK: # %bb.0: # %entry822; CHECK-NEXT: str32.b a2, (a0, a1 << 0)823; CHECK-NEXT: movi16 a0, 0824; CHECK-NEXT: rts16825;826; GENERIC-LABEL: storeR_i8_anyext:827; GENERIC: # %bb.0: # %entry828; GENERIC-NEXT: .cfi_def_cfa_offset 0829; GENERIC-NEXT: subi16 sp, sp, 4830; GENERIC-NEXT: .cfi_def_cfa_offset 4831; GENERIC-NEXT: addu16 a0, a0, a1832; GENERIC-NEXT: st16.b a2, (a0, 0)833; GENERIC-NEXT: movi16 a0, 0834; GENERIC-NEXT: addi16 sp, sp, 4835; GENERIC-NEXT: rts16836entry:837 %idxprom = sext i32 %a to i64838 %arrayidx = getelementptr inbounds i8, ptr %c, i64 %idxprom839 store i8 %d, ptr %arrayidx, align 1840 ret i8 0841}842