brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.5 KiB · 42c2556 Raw
179 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple riscv32-unknown-elf -mattr=+zve32x,+zvl128b -o - %s \3; RUN: 2>&1 | FileCheck %s -check-prefix CHECK-RV324 5@a = external global <4 x i32>6@b = external global <4 x i32>7@c = external global <4 x i32>8 9define void @foo_lmul1() nounwind #0 {10; CHECK-RV32-LABEL: foo_lmul1:11; CHECK-RV32:       # %bb.0:12; CHECK-RV32-NEXT:    addi sp, sp, -3213; CHECK-RV32-NEXT:    sw a0, 28(sp) # 4-byte Folded Spill14; CHECK-RV32-NEXT:    csrr a0, vlenb15; CHECK-RV32-NEXT:    slli a0, a0, 116; CHECK-RV32-NEXT:    sub sp, sp, a017; CHECK-RV32-NEXT:    addi a0, sp, 1618; CHECK-RV32-NEXT:    vs2r.v v8, (a0) # vscale x 16-byte Folded Spill19; CHECK-RV32-NEXT:    lui a0, %hi(a)20; CHECK-RV32-NEXT:    addi a0, a0, %lo(a)21; CHECK-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma22; CHECK-RV32-NEXT:    vle32.v v8, (a0)23; CHECK-RV32-NEXT:    lui a0, %hi(b)24; CHECK-RV32-NEXT:    addi a0, a0, %lo(b)25; CHECK-RV32-NEXT:    vle32.v v9, (a0)26; CHECK-RV32-NEXT:    vadd.vv v8, v9, v827; CHECK-RV32-NEXT:    lui a0, %hi(c)28; CHECK-RV32-NEXT:    addi a0, a0, %lo(c)29; CHECK-RV32-NEXT:    vse32.v v8, (a0)30; CHECK-RV32-NEXT:    addi a0, sp, 1631; CHECK-RV32-NEXT:    vl2r.v v8, (a0) # vscale x 16-byte Folded Reload32; CHECK-RV32-NEXT:    csrr a0, vlenb33; CHECK-RV32-NEXT:    slli a0, a0, 134; CHECK-RV32-NEXT:    add sp, sp, a035; CHECK-RV32-NEXT:    lw a0, 28(sp) # 4-byte Folded Reload36; CHECK-RV32-NEXT:    addi sp, sp, 3237; CHECK-RV32-NEXT:    mret38  %1 = load <4 x i32>, ptr @a39  %2 = load <4 x i32>, ptr @b40  %add = add nsw <4 x i32> %2, %141  store <4 x i32> %add, ptr @c42  ret void43}44 45@d = external global <8 x i32>46@e = external global <8 x i32>47@f = external global <8 x i32>48 49define void @foo_lmul2() nounwind #0 {50; CHECK-RV32-LABEL: foo_lmul2:51; CHECK-RV32:       # %bb.0:52; CHECK-RV32-NEXT:    addi sp, sp, -3253; CHECK-RV32-NEXT:    sw a0, 28(sp) # 4-byte Folded Spill54; CHECK-RV32-NEXT:    csrr a0, vlenb55; CHECK-RV32-NEXT:    slli a0, a0, 256; CHECK-RV32-NEXT:    sub sp, sp, a057; CHECK-RV32-NEXT:    addi a0, sp, 1658; CHECK-RV32-NEXT:    vs4r.v v8, (a0) # vscale x 32-byte Folded Spill59; CHECK-RV32-NEXT:    lui a0, %hi(d)60; CHECK-RV32-NEXT:    addi a0, a0, %lo(d)61; CHECK-RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma62; CHECK-RV32-NEXT:    vle32.v v8, (a0)63; CHECK-RV32-NEXT:    lui a0, %hi(e)64; CHECK-RV32-NEXT:    addi a0, a0, %lo(e)65; CHECK-RV32-NEXT:    vle32.v v10, (a0)66; CHECK-RV32-NEXT:    vadd.vv v8, v10, v867; CHECK-RV32-NEXT:    lui a0, %hi(f)68; CHECK-RV32-NEXT:    addi a0, a0, %lo(f)69; CHECK-RV32-NEXT:    vse32.v v8, (a0)70; CHECK-RV32-NEXT:    addi a0, sp, 1671; CHECK-RV32-NEXT:    vl4r.v v8, (a0) # vscale x 32-byte Folded Reload72; CHECK-RV32-NEXT:    csrr a0, vlenb73; CHECK-RV32-NEXT:    slli a0, a0, 274; CHECK-RV32-NEXT:    add sp, sp, a075; CHECK-RV32-NEXT:    lw a0, 28(sp) # 4-byte Folded Reload76; CHECK-RV32-NEXT:    addi sp, sp, 3277; CHECK-RV32-NEXT:    mret78  %1 = load <8 x i32>, ptr @d79  %2 = load <8 x i32>, ptr @e80  %add = add nsw <8 x i32> %2, %181  store <8 x i32> %add, ptr @f82  ret void83}84 85@g = external global <16 x i32>86@h = external global <16 x i32>87@i = external global <16 x i32>88 89define void @foo_lmul4() nounwind #0 {90; CHECK-RV32-LABEL: foo_lmul4:91; CHECK-RV32:       # %bb.0:92; CHECK-RV32-NEXT:    addi sp, sp, -3293; CHECK-RV32-NEXT:    sw a0, 28(sp) # 4-byte Folded Spill94; CHECK-RV32-NEXT:    csrr a0, vlenb95; CHECK-RV32-NEXT:    slli a0, a0, 396; CHECK-RV32-NEXT:    sub sp, sp, a097; CHECK-RV32-NEXT:    addi a0, sp, 1698; CHECK-RV32-NEXT:    vs8r.v v8, (a0) # vscale x 64-byte Folded Spill99; CHECK-RV32-NEXT:    lui a0, %hi(g)100; CHECK-RV32-NEXT:    addi a0, a0, %lo(g)101; CHECK-RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, ma102; CHECK-RV32-NEXT:    vle32.v v8, (a0)103; CHECK-RV32-NEXT:    lui a0, %hi(h)104; CHECK-RV32-NEXT:    addi a0, a0, %lo(h)105; CHECK-RV32-NEXT:    vle32.v v12, (a0)106; CHECK-RV32-NEXT:    vadd.vv v8, v12, v8107; CHECK-RV32-NEXT:    lui a0, %hi(i)108; CHECK-RV32-NEXT:    addi a0, a0, %lo(i)109; CHECK-RV32-NEXT:    vse32.v v8, (a0)110; CHECK-RV32-NEXT:    addi a0, sp, 16111; CHECK-RV32-NEXT:    vl8r.v v8, (a0) # vscale x 64-byte Folded Reload112; CHECK-RV32-NEXT:    csrr a0, vlenb113; CHECK-RV32-NEXT:    slli a0, a0, 3114; CHECK-RV32-NEXT:    add sp, sp, a0115; CHECK-RV32-NEXT:    lw a0, 28(sp) # 4-byte Folded Reload116; CHECK-RV32-NEXT:    addi sp, sp, 32117; CHECK-RV32-NEXT:    mret118  %1 = load <16 x i32>, ptr @g119  %2 = load <16 x i32>, ptr @h120  %add = add nsw <16 x i32> %2, %1121  store <16 x i32> %add, ptr @i122  ret void123}124 125@j = external global <32 x i32>126@k = external global <32 x i32>127@l = external global <32 x i32>128 129define void @foo_lmul8() nounwind #0 {130; CHECK-RV32-LABEL: foo_lmul8:131; CHECK-RV32:       # %bb.0:132; CHECK-RV32-NEXT:    addi sp, sp, -32133; CHECK-RV32-NEXT:    sw a0, 28(sp) # 4-byte Folded Spill134; CHECK-RV32-NEXT:    sw a1, 24(sp) # 4-byte Folded Spill135; CHECK-RV32-NEXT:    csrr a0, vlenb136; CHECK-RV32-NEXT:    slli a0, a0, 4137; CHECK-RV32-NEXT:    sub sp, sp, a0138; CHECK-RV32-NEXT:    csrr a0, vlenb139; CHECK-RV32-NEXT:    slli a0, a0, 3140; CHECK-RV32-NEXT:    add a0, sp, a0141; CHECK-RV32-NEXT:    addi a0, a0, 16142; CHECK-RV32-NEXT:    vs8r.v v8, (a0) # vscale x 64-byte Folded Spill143; CHECK-RV32-NEXT:    addi a0, sp, 16144; CHECK-RV32-NEXT:    vs8r.v v16, (a0) # vscale x 64-byte Folded Spill145; CHECK-RV32-NEXT:    lui a0, %hi(j)146; CHECK-RV32-NEXT:    addi a0, a0, %lo(j)147; CHECK-RV32-NEXT:    li a1, 32148; CHECK-RV32-NEXT:    vsetvli zero, a1, e32, m8, ta, ma149; CHECK-RV32-NEXT:    vle32.v v8, (a0)150; CHECK-RV32-NEXT:    lui a0, %hi(k)151; CHECK-RV32-NEXT:    addi a0, a0, %lo(k)152; CHECK-RV32-NEXT:    vle32.v v16, (a0)153; CHECK-RV32-NEXT:    vadd.vv v8, v16, v8154; CHECK-RV32-NEXT:    lui a0, %hi(l)155; CHECK-RV32-NEXT:    addi a0, a0, %lo(l)156; CHECK-RV32-NEXT:    vse32.v v8, (a0)157; CHECK-RV32-NEXT:    csrr a0, vlenb158; CHECK-RV32-NEXT:    slli a0, a0, 3159; CHECK-RV32-NEXT:    add a0, sp, a0160; CHECK-RV32-NEXT:    addi a0, a0, 16161; CHECK-RV32-NEXT:    vl8r.v v8, (a0) # vscale x 64-byte Folded Reload162; CHECK-RV32-NEXT:    addi a0, sp, 16163; CHECK-RV32-NEXT:    vl8r.v v16, (a0) # vscale x 64-byte Folded Reload164; CHECK-RV32-NEXT:    csrr a0, vlenb165; CHECK-RV32-NEXT:    slli a0, a0, 4166; CHECK-RV32-NEXT:    add sp, sp, a0167; CHECK-RV32-NEXT:    lw a0, 28(sp) # 4-byte Folded Reload168; CHECK-RV32-NEXT:    lw a1, 24(sp) # 4-byte Folded Reload169; CHECK-RV32-NEXT:    addi sp, sp, 32170; CHECK-RV32-NEXT:    mret171  %1 = load <32 x i32>, ptr @j172  %2 = load <32 x i32>, ptr @k173  %add = add nsw <32 x i32> %2, %1174  store <32 x i32> %add, ptr @l175  ret void176}177 178attributes #0 = { "interrupt"="machine" }179