brintos

brintos / llvm-project-archived public Read only

0
0
Text · 25.1 KiB · c8f2683 Raw
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