1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2 3; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -float-abi=hard -mattr=+hard-float -mattr=+2e3 -mattr=+fpuv2_sf | FileCheck %s --check-prefix=CHECK-SF 4; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -float-abi=hard -mattr=+hard-float -mattr=+2e3 -mattr=+fpuv3_sf | FileCheck %s --check-prefix=CHECK-SF2 5 6define float @load_I_w(ptr nocapture readonly %a) local_unnamed_addr #0 { 7; 8; CHECK-SF-LABEL: load_I_w: 9; CHECK-SF: # %bb.0: # %entry 10; CHECK-SF-NEXT: flds vr0, (a0, 12) 11; CHECK-SF-NEXT: rts16 12; 13; CHECK-SF2-LABEL: load_I_w: 14; CHECK-SF2: # %bb.0: # %entry 15; CHECK-SF2-NEXT: fld.32 vr0, (a0, 12) 16; CHECK-SF2-NEXT: rts16 17entry: 18 %arrayidx = getelementptr inbounds float, ptr %a, i64 3 19 %0 = load float, ptr %arrayidx, align 4 20 ret float %0 21} 22 23define float @load_R_w(ptr nocapture readonly %a, i32 %b) local_unnamed_addr #0 { 24; 25; CHECK-SF-LABEL: load_R_w: 26; CHECK-SF: # %bb.0: # %entry 27; CHECK-SF-NEXT: fldrs vr0, (a0, a1 << 2) 28; CHECK-SF-NEXT: rts16 29; 30; CHECK-SF2-LABEL: load_R_w: 31; CHECK-SF2: # %bb.0: # %entry 32; CHECK-SF2-NEXT: fldr.32 vr0, (a0, a1 << 2) 33; CHECK-SF2-NEXT: rts16 34entry: 35 %idxprom = sext i32 %b to i64 36 %arrayidx = getelementptr inbounds float, ptr %a, i64 %idxprom 37 %0 = load float, ptr %arrayidx, align 4 38 ret float %0 39} 40 41 42define float @store_I_w(ptr %a, float %b) local_unnamed_addr #0 { 43; 44; CHECK-SF-LABEL: store_I_w: 45; CHECK-SF: # %bb.0: # %entry 46; CHECK-SF-NEXT: fsts vr0, (a0, 12) 47; CHECK-SF-NEXT: movi16 a0, 0 48; CHECK-SF-NEXT: fmtvrl vr0, a0 49; CHECK-SF-NEXT: rts16 50; 51; CHECK-SF2-LABEL: store_I_w: 52; CHECK-SF2: # %bb.0: # %entry 53; CHECK-SF2-NEXT: fst.32 vr0, (a0, 12) 54; CHECK-SF2-NEXT: movi16 a0, 0 55; CHECK-SF2-NEXT: fmtvr.32.1 vr0, a0 56; CHECK-SF2-NEXT: rts16 57entry: 58 %arrayidx = getelementptr inbounds float, ptr %a, i64 3 59 store float %b, ptr %arrayidx, align 4 60 ret float 0.0 61} 62 63define float @store_R_w(ptr %a, i32 %b, float %c) local_unnamed_addr #0 { 64; 65; CHECK-SF-LABEL: store_R_w: 66; CHECK-SF: # %bb.0: # %entry 67; CHECK-SF-NEXT: fstrs vr0, (a0, a1 << 2) 68; CHECK-SF-NEXT: movi16 a0, 0 69; CHECK-SF-NEXT: fmtvrl vr0, a0 70; CHECK-SF-NEXT: rts16 71; 72; CHECK-SF2-LABEL: store_R_w: 73; CHECK-SF2: # %bb.0: # %entry 74; CHECK-SF2-NEXT: fstr.32 vr0, (a0, a1 << 2) 75; CHECK-SF2-NEXT: movi16 a0, 0 76; CHECK-SF2-NEXT: fmtvr.32.1 vr0, a0 77; CHECK-SF2-NEXT: rts16 78entry: 79 %idxprom = sext i32 %b to i64 80 %arrayidx = getelementptr inbounds float, ptr %a, i64 %idxprom 81 store float %c, ptr %arrayidx, align 4 82 ret float 0.0 83} 84