xref: /llvm-project/llvm/test/CodeGen/RISCV/pr58286.ll (revision 97982a8c605fac7c86d02e641a6cd7898b3ca343)
118c5f3c3Sluxufan; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
218c5f3c3Sluxufan; RUN: llc -mtriple=riscv64 < %s | FileCheck --check-prefix=RV64I %s
318c5f3c3Sluxufan; RUN: llc -mtriple=riscv32 < %s | FileCheck --check-prefix=RV32I %s
418c5f3c3Sluxufan@var = external global i32
518c5f3c3Sluxufan
618c5f3c3Sluxufandefine void @func() {
718c5f3c3Sluxufan; RV64I-LABEL: func:
818c5f3c3Sluxufan; RV64I:       # %bb.0:
918c5f3c3Sluxufan; RV64I-NEXT:    lui a0, 1
1018c5f3c3Sluxufan; RV64I-NEXT:    addiw a0, a0, 16
1118c5f3c3Sluxufan; RV64I-NEXT:    sub sp, sp, a0
1218c5f3c3Sluxufan; RV64I-NEXT:    .cfi_def_cfa_offset 4112
1318c5f3c3Sluxufan; RV64I-NEXT:    lui a0, %hi(var)
1418c5f3c3Sluxufan; RV64I-NEXT:    lw a1, %lo(var)(a0)
1518c5f3c3Sluxufan; RV64I-NEXT:    lw a2, %lo(var)(a0)
1618c5f3c3Sluxufan; RV64I-NEXT:    lw a3, %lo(var)(a0)
1718c5f3c3Sluxufan; RV64I-NEXT:    lw a4, %lo(var)(a0)
1818c5f3c3Sluxufan; RV64I-NEXT:    lw a5, %lo(var)(a0)
1918c5f3c3Sluxufan; RV64I-NEXT:    lw a6, %lo(var)(a0)
2018c5f3c3Sluxufan; RV64I-NEXT:    lw a7, %lo(var)(a0)
2118c5f3c3Sluxufan; RV64I-NEXT:    lw t0, %lo(var)(a0)
2218c5f3c3Sluxufan; RV64I-NEXT:    lw t1, %lo(var)(a0)
2318c5f3c3Sluxufan; RV64I-NEXT:    lw t2, %lo(var)(a0)
2418c5f3c3Sluxufan; RV64I-NEXT:    lw t3, %lo(var)(a0)
2518c5f3c3Sluxufan; RV64I-NEXT:    lw t4, %lo(var)(a0)
2618c5f3c3Sluxufan; RV64I-NEXT:    lw t5, %lo(var)(a0)
2718c5f3c3Sluxufan; RV64I-NEXT:    lw t6, %lo(var)(a0)
2818c5f3c3Sluxufan; RV64I-NEXT:    sd s0, 0(sp)
2918c5f3c3Sluxufan; RV64I-NEXT:    lui s0, 1
3018c5f3c3Sluxufan; RV64I-NEXT:    add s0, sp, s0
31b7753330SPhilip Reames; RV64I-NEXT:    sw a1, 12(s0)
3218c5f3c3Sluxufan; RV64I-NEXT:    ld s0, 0(sp)
3318c5f3c3Sluxufan; RV64I-NEXT:    sw a1, %lo(var)(a0)
3418c5f3c3Sluxufan; RV64I-NEXT:    sw a2, %lo(var)(a0)
3518c5f3c3Sluxufan; RV64I-NEXT:    sw a3, %lo(var)(a0)
3618c5f3c3Sluxufan; RV64I-NEXT:    sw a4, %lo(var)(a0)
3718c5f3c3Sluxufan; RV64I-NEXT:    sw a5, %lo(var)(a0)
3818c5f3c3Sluxufan; RV64I-NEXT:    sw a6, %lo(var)(a0)
3918c5f3c3Sluxufan; RV64I-NEXT:    sw a7, %lo(var)(a0)
4018c5f3c3Sluxufan; RV64I-NEXT:    sw t0, %lo(var)(a0)
4118c5f3c3Sluxufan; RV64I-NEXT:    sw t1, %lo(var)(a0)
4218c5f3c3Sluxufan; RV64I-NEXT:    sw t2, %lo(var)(a0)
4318c5f3c3Sluxufan; RV64I-NEXT:    sw t3, %lo(var)(a0)
4418c5f3c3Sluxufan; RV64I-NEXT:    sw t4, %lo(var)(a0)
4518c5f3c3Sluxufan; RV64I-NEXT:    sw t5, %lo(var)(a0)
4618c5f3c3Sluxufan; RV64I-NEXT:    sw t6, %lo(var)(a0)
4718c5f3c3Sluxufan; RV64I-NEXT:    lui a0, 1
4818c5f3c3Sluxufan; RV64I-NEXT:    addiw a0, a0, 16
4918c5f3c3Sluxufan; RV64I-NEXT:    add sp, sp, a0
50*97982a8cSdlav-sc; RV64I-NEXT:    .cfi_def_cfa_offset 0
5118c5f3c3Sluxufan; RV64I-NEXT:    ret
5218c5f3c3Sluxufan;
5318c5f3c3Sluxufan; RV32I-LABEL: func:
5418c5f3c3Sluxufan; RV32I:       # %bb.0:
5518c5f3c3Sluxufan; RV32I-NEXT:    lui a0, 1
5618c5f3c3Sluxufan; RV32I-NEXT:    addi a0, a0, 16
5718c5f3c3Sluxufan; RV32I-NEXT:    sub sp, sp, a0
5818c5f3c3Sluxufan; RV32I-NEXT:    .cfi_def_cfa_offset 4112
5918c5f3c3Sluxufan; RV32I-NEXT:    lui a0, %hi(var)
6018c5f3c3Sluxufan; RV32I-NEXT:    lw a1, %lo(var)(a0)
6118c5f3c3Sluxufan; RV32I-NEXT:    lw a2, %lo(var)(a0)
6218c5f3c3Sluxufan; RV32I-NEXT:    lw a3, %lo(var)(a0)
6318c5f3c3Sluxufan; RV32I-NEXT:    lw a4, %lo(var)(a0)
6418c5f3c3Sluxufan; RV32I-NEXT:    lw a5, %lo(var)(a0)
6518c5f3c3Sluxufan; RV32I-NEXT:    lw a6, %lo(var)(a0)
6618c5f3c3Sluxufan; RV32I-NEXT:    lw a7, %lo(var)(a0)
6718c5f3c3Sluxufan; RV32I-NEXT:    lw t0, %lo(var)(a0)
6818c5f3c3Sluxufan; RV32I-NEXT:    lw t1, %lo(var)(a0)
6918c5f3c3Sluxufan; RV32I-NEXT:    lw t2, %lo(var)(a0)
7018c5f3c3Sluxufan; RV32I-NEXT:    lw t3, %lo(var)(a0)
7118c5f3c3Sluxufan; RV32I-NEXT:    lw t4, %lo(var)(a0)
7218c5f3c3Sluxufan; RV32I-NEXT:    lw t5, %lo(var)(a0)
7318c5f3c3Sluxufan; RV32I-NEXT:    lw t6, %lo(var)(a0)
7418c5f3c3Sluxufan; RV32I-NEXT:    sw s0, 0(sp)
7518c5f3c3Sluxufan; RV32I-NEXT:    lui s0, 1
7618c5f3c3Sluxufan; RV32I-NEXT:    add s0, sp, s0
77b7753330SPhilip Reames; RV32I-NEXT:    sw a1, 12(s0)
7818c5f3c3Sluxufan; RV32I-NEXT:    lw s0, 0(sp)
7918c5f3c3Sluxufan; RV32I-NEXT:    sw a1, %lo(var)(a0)
8018c5f3c3Sluxufan; RV32I-NEXT:    sw a2, %lo(var)(a0)
8118c5f3c3Sluxufan; RV32I-NEXT:    sw a3, %lo(var)(a0)
8218c5f3c3Sluxufan; RV32I-NEXT:    sw a4, %lo(var)(a0)
8318c5f3c3Sluxufan; RV32I-NEXT:    sw a5, %lo(var)(a0)
8418c5f3c3Sluxufan; RV32I-NEXT:    sw a6, %lo(var)(a0)
8518c5f3c3Sluxufan; RV32I-NEXT:    sw a7, %lo(var)(a0)
8618c5f3c3Sluxufan; RV32I-NEXT:    sw t0, %lo(var)(a0)
8718c5f3c3Sluxufan; RV32I-NEXT:    sw t1, %lo(var)(a0)
8818c5f3c3Sluxufan; RV32I-NEXT:    sw t2, %lo(var)(a0)
8918c5f3c3Sluxufan; RV32I-NEXT:    sw t3, %lo(var)(a0)
9018c5f3c3Sluxufan; RV32I-NEXT:    sw t4, %lo(var)(a0)
9118c5f3c3Sluxufan; RV32I-NEXT:    sw t5, %lo(var)(a0)
9218c5f3c3Sluxufan; RV32I-NEXT:    sw t6, %lo(var)(a0)
9318c5f3c3Sluxufan; RV32I-NEXT:    lui a0, 1
9418c5f3c3Sluxufan; RV32I-NEXT:    addi a0, a0, 16
9518c5f3c3Sluxufan; RV32I-NEXT:    add sp, sp, a0
96*97982a8cSdlav-sc; RV32I-NEXT:    .cfi_def_cfa_offset 0
9718c5f3c3Sluxufan; RV32I-NEXT:    ret
9818c5f3c3Sluxufan  %space = alloca i32, align 4
9918c5f3c3Sluxufan  %stackspace = alloca[1024 x i32], align 4
10018c5f3c3Sluxufan
10118c5f3c3Sluxufan  ;; Load values to increase register pressure.
1021456b686SNikita Popov  %v0 = load volatile i32, ptr @var
1031456b686SNikita Popov  %v1 = load volatile i32, ptr @var
1041456b686SNikita Popov  %v2 = load volatile i32, ptr @var
1051456b686SNikita Popov  %v3 = load volatile i32, ptr @var
1061456b686SNikita Popov  %v4 = load volatile i32, ptr @var
1071456b686SNikita Popov  %v5 = load volatile i32, ptr @var
1081456b686SNikita Popov  %v6 = load volatile i32, ptr @var
1091456b686SNikita Popov  %v7 = load volatile i32, ptr @var
1101456b686SNikita Popov  %v8 = load volatile i32, ptr @var
1111456b686SNikita Popov  %v9 = load volatile i32, ptr @var
1121456b686SNikita Popov  %v10 = load volatile i32, ptr @var
1131456b686SNikita Popov  %v11 = load volatile i32, ptr @var
1141456b686SNikita Popov  %v12 = load volatile i32, ptr @var
1151456b686SNikita Popov  %v13 = load volatile i32, ptr @var
11618c5f3c3Sluxufan
1171456b686SNikita Popov  store volatile i32 %v0, ptr %space
11818c5f3c3Sluxufan
11918c5f3c3Sluxufan  ;; store values so they are used.
1201456b686SNikita Popov  store volatile i32 %v0, ptr @var
1211456b686SNikita Popov  store volatile i32 %v1, ptr @var
1221456b686SNikita Popov  store volatile i32 %v2, ptr @var
1231456b686SNikita Popov  store volatile i32 %v3, ptr @var
1241456b686SNikita Popov  store volatile i32 %v4, ptr @var
1251456b686SNikita Popov  store volatile i32 %v5, ptr @var
1261456b686SNikita Popov  store volatile i32 %v6, ptr @var
1271456b686SNikita Popov  store volatile i32 %v7, ptr @var
1281456b686SNikita Popov  store volatile i32 %v8, ptr @var
1291456b686SNikita Popov  store volatile i32 %v9, ptr @var
1301456b686SNikita Popov  store volatile i32 %v10, ptr @var
1311456b686SNikita Popov  store volatile i32 %v11, ptr @var
1321456b686SNikita Popov  store volatile i32 %v12, ptr @var
1331456b686SNikita Popov  store volatile i32 %v13, ptr @var
13418c5f3c3Sluxufan
13518c5f3c3Sluxufan  ret void
13618c5f3c3Sluxufan}
13718c5f3c3Sluxufan
13818c5f3c3Sluxufandefine void @shrink_wrap(i1 %c) {
13918c5f3c3Sluxufan; RV64I-LABEL: shrink_wrap:
14018c5f3c3Sluxufan; RV64I:       # %bb.0:
14118c5f3c3Sluxufan; RV64I-NEXT:    andi a0, a0, 1
14218c5f3c3Sluxufan; RV64I-NEXT:    bnez a0, .LBB1_2
14318c5f3c3Sluxufan; RV64I-NEXT:  # %bb.1: # %bar
14418c5f3c3Sluxufan; RV64I-NEXT:    lui a0, 1
14518c5f3c3Sluxufan; RV64I-NEXT:    addiw a0, a0, 16
14618c5f3c3Sluxufan; RV64I-NEXT:    sub sp, sp, a0
14718c5f3c3Sluxufan; RV64I-NEXT:    .cfi_def_cfa_offset 4112
14818c5f3c3Sluxufan; RV64I-NEXT:    lui a0, %hi(var)
14918c5f3c3Sluxufan; RV64I-NEXT:    lw a1, %lo(var)(a0)
15018c5f3c3Sluxufan; RV64I-NEXT:    lw a2, %lo(var)(a0)
15118c5f3c3Sluxufan; RV64I-NEXT:    lw a3, %lo(var)(a0)
15218c5f3c3Sluxufan; RV64I-NEXT:    lw a4, %lo(var)(a0)
15318c5f3c3Sluxufan; RV64I-NEXT:    lw a5, %lo(var)(a0)
15418c5f3c3Sluxufan; RV64I-NEXT:    lw a6, %lo(var)(a0)
15518c5f3c3Sluxufan; RV64I-NEXT:    lw a7, %lo(var)(a0)
15618c5f3c3Sluxufan; RV64I-NEXT:    lw t0, %lo(var)(a0)
15718c5f3c3Sluxufan; RV64I-NEXT:    lw t1, %lo(var)(a0)
15818c5f3c3Sluxufan; RV64I-NEXT:    lw t2, %lo(var)(a0)
15918c5f3c3Sluxufan; RV64I-NEXT:    lw t3, %lo(var)(a0)
16018c5f3c3Sluxufan; RV64I-NEXT:    lw t4, %lo(var)(a0)
16118c5f3c3Sluxufan; RV64I-NEXT:    lw t5, %lo(var)(a0)
16218c5f3c3Sluxufan; RV64I-NEXT:    lw t6, %lo(var)(a0)
16318c5f3c3Sluxufan; RV64I-NEXT:    sd s0, 0(sp)
16418c5f3c3Sluxufan; RV64I-NEXT:    lui s0, 1
16518c5f3c3Sluxufan; RV64I-NEXT:    add s0, sp, s0
166b7753330SPhilip Reames; RV64I-NEXT:    sw a1, 12(s0)
16718c5f3c3Sluxufan; RV64I-NEXT:    ld s0, 0(sp)
16818c5f3c3Sluxufan; RV64I-NEXT:    sw a1, %lo(var)(a0)
16918c5f3c3Sluxufan; RV64I-NEXT:    sw a2, %lo(var)(a0)
17018c5f3c3Sluxufan; RV64I-NEXT:    sw a3, %lo(var)(a0)
17118c5f3c3Sluxufan; RV64I-NEXT:    sw a4, %lo(var)(a0)
17218c5f3c3Sluxufan; RV64I-NEXT:    sw a5, %lo(var)(a0)
17318c5f3c3Sluxufan; RV64I-NEXT:    sw a6, %lo(var)(a0)
17418c5f3c3Sluxufan; RV64I-NEXT:    sw a7, %lo(var)(a0)
17518c5f3c3Sluxufan; RV64I-NEXT:    sw t0, %lo(var)(a0)
17618c5f3c3Sluxufan; RV64I-NEXT:    sw t1, %lo(var)(a0)
17718c5f3c3Sluxufan; RV64I-NEXT:    sw t2, %lo(var)(a0)
17818c5f3c3Sluxufan; RV64I-NEXT:    sw t3, %lo(var)(a0)
17918c5f3c3Sluxufan; RV64I-NEXT:    sw t4, %lo(var)(a0)
18018c5f3c3Sluxufan; RV64I-NEXT:    sw t5, %lo(var)(a0)
18118c5f3c3Sluxufan; RV64I-NEXT:    sw t6, %lo(var)(a0)
18218c5f3c3Sluxufan; RV64I-NEXT:    lui a0, 1
18318c5f3c3Sluxufan; RV64I-NEXT:    addiw a0, a0, 16
18418c5f3c3Sluxufan; RV64I-NEXT:    add sp, sp, a0
185*97982a8cSdlav-sc; RV64I-NEXT:    .cfi_def_cfa_offset 0
18618c5f3c3Sluxufan; RV64I-NEXT:  .LBB1_2: # %foo
18718c5f3c3Sluxufan; RV64I-NEXT:    ret
18818c5f3c3Sluxufan;
18918c5f3c3Sluxufan; RV32I-LABEL: shrink_wrap:
19018c5f3c3Sluxufan; RV32I:       # %bb.0:
19118c5f3c3Sluxufan; RV32I-NEXT:    andi a0, a0, 1
19218c5f3c3Sluxufan; RV32I-NEXT:    bnez a0, .LBB1_2
19318c5f3c3Sluxufan; RV32I-NEXT:  # %bb.1: # %bar
19418c5f3c3Sluxufan; RV32I-NEXT:    lui a0, 1
19518c5f3c3Sluxufan; RV32I-NEXT:    addi a0, a0, 16
19618c5f3c3Sluxufan; RV32I-NEXT:    sub sp, sp, a0
19718c5f3c3Sluxufan; RV32I-NEXT:    .cfi_def_cfa_offset 4112
19818c5f3c3Sluxufan; RV32I-NEXT:    lui a0, %hi(var)
19918c5f3c3Sluxufan; RV32I-NEXT:    lw a1, %lo(var)(a0)
20018c5f3c3Sluxufan; RV32I-NEXT:    lw a2, %lo(var)(a0)
20118c5f3c3Sluxufan; RV32I-NEXT:    lw a3, %lo(var)(a0)
20218c5f3c3Sluxufan; RV32I-NEXT:    lw a4, %lo(var)(a0)
20318c5f3c3Sluxufan; RV32I-NEXT:    lw a5, %lo(var)(a0)
20418c5f3c3Sluxufan; RV32I-NEXT:    lw a6, %lo(var)(a0)
20518c5f3c3Sluxufan; RV32I-NEXT:    lw a7, %lo(var)(a0)
20618c5f3c3Sluxufan; RV32I-NEXT:    lw t0, %lo(var)(a0)
20718c5f3c3Sluxufan; RV32I-NEXT:    lw t1, %lo(var)(a0)
20818c5f3c3Sluxufan; RV32I-NEXT:    lw t2, %lo(var)(a0)
20918c5f3c3Sluxufan; RV32I-NEXT:    lw t3, %lo(var)(a0)
21018c5f3c3Sluxufan; RV32I-NEXT:    lw t4, %lo(var)(a0)
21118c5f3c3Sluxufan; RV32I-NEXT:    lw t5, %lo(var)(a0)
21218c5f3c3Sluxufan; RV32I-NEXT:    lw t6, %lo(var)(a0)
21318c5f3c3Sluxufan; RV32I-NEXT:    sw s0, 0(sp)
21418c5f3c3Sluxufan; RV32I-NEXT:    lui s0, 1
21518c5f3c3Sluxufan; RV32I-NEXT:    add s0, sp, s0
216b7753330SPhilip Reames; RV32I-NEXT:    sw a1, 12(s0)
21718c5f3c3Sluxufan; RV32I-NEXT:    lw s0, 0(sp)
21818c5f3c3Sluxufan; RV32I-NEXT:    sw a1, %lo(var)(a0)
21918c5f3c3Sluxufan; RV32I-NEXT:    sw a2, %lo(var)(a0)
22018c5f3c3Sluxufan; RV32I-NEXT:    sw a3, %lo(var)(a0)
22118c5f3c3Sluxufan; RV32I-NEXT:    sw a4, %lo(var)(a0)
22218c5f3c3Sluxufan; RV32I-NEXT:    sw a5, %lo(var)(a0)
22318c5f3c3Sluxufan; RV32I-NEXT:    sw a6, %lo(var)(a0)
22418c5f3c3Sluxufan; RV32I-NEXT:    sw a7, %lo(var)(a0)
22518c5f3c3Sluxufan; RV32I-NEXT:    sw t0, %lo(var)(a0)
22618c5f3c3Sluxufan; RV32I-NEXT:    sw t1, %lo(var)(a0)
22718c5f3c3Sluxufan; RV32I-NEXT:    sw t2, %lo(var)(a0)
22818c5f3c3Sluxufan; RV32I-NEXT:    sw t3, %lo(var)(a0)
22918c5f3c3Sluxufan; RV32I-NEXT:    sw t4, %lo(var)(a0)
23018c5f3c3Sluxufan; RV32I-NEXT:    sw t5, %lo(var)(a0)
23118c5f3c3Sluxufan; RV32I-NEXT:    sw t6, %lo(var)(a0)
23218c5f3c3Sluxufan; RV32I-NEXT:    lui a0, 1
23318c5f3c3Sluxufan; RV32I-NEXT:    addi a0, a0, 16
23418c5f3c3Sluxufan; RV32I-NEXT:    add sp, sp, a0
235*97982a8cSdlav-sc; RV32I-NEXT:    .cfi_def_cfa_offset 0
23618c5f3c3Sluxufan; RV32I-NEXT:  .LBB1_2: # %foo
23718c5f3c3Sluxufan; RV32I-NEXT:    ret
23818c5f3c3Sluxufan  %space = alloca i32, align 4
23918c5f3c3Sluxufan  %stackspace = alloca[1024 x i32], align 4
24018c5f3c3Sluxufan  br i1 %c, label %foo, label %bar
24118c5f3c3Sluxufan
24218c5f3c3Sluxufanbar:
24318c5f3c3Sluxufan
24418c5f3c3Sluxufan  ;; Load values to increase register pressure.
2451456b686SNikita Popov  %v0 = load volatile i32, ptr @var
2461456b686SNikita Popov  %v1 = load volatile i32, ptr @var
2471456b686SNikita Popov  %v2 = load volatile i32, ptr @var
2481456b686SNikita Popov  %v3 = load volatile i32, ptr @var
2491456b686SNikita Popov  %v4 = load volatile i32, ptr @var
2501456b686SNikita Popov  %v5 = load volatile i32, ptr @var
2511456b686SNikita Popov  %v6 = load volatile i32, ptr @var
2521456b686SNikita Popov  %v7 = load volatile i32, ptr @var
2531456b686SNikita Popov  %v8 = load volatile i32, ptr @var
2541456b686SNikita Popov  %v9 = load volatile i32, ptr @var
2551456b686SNikita Popov  %v10 = load volatile i32, ptr @var
2561456b686SNikita Popov  %v11 = load volatile i32, ptr @var
2571456b686SNikita Popov  %v12 = load volatile i32, ptr @var
2581456b686SNikita Popov  %v13 = load volatile i32, ptr @var
25918c5f3c3Sluxufan
2601456b686SNikita Popov  store volatile i32 %v0, ptr %space
26118c5f3c3Sluxufan
26218c5f3c3Sluxufan  ;; store values so they are used.
2631456b686SNikita Popov  store volatile i32 %v0, ptr @var
2641456b686SNikita Popov  store volatile i32 %v1, ptr @var
2651456b686SNikita Popov  store volatile i32 %v2, ptr @var
2661456b686SNikita Popov  store volatile i32 %v3, ptr @var
2671456b686SNikita Popov  store volatile i32 %v4, ptr @var
2681456b686SNikita Popov  store volatile i32 %v5, ptr @var
2691456b686SNikita Popov  store volatile i32 %v6, ptr @var
2701456b686SNikita Popov  store volatile i32 %v7, ptr @var
2711456b686SNikita Popov  store volatile i32 %v8, ptr @var
2721456b686SNikita Popov  store volatile i32 %v9, ptr @var
2731456b686SNikita Popov  store volatile i32 %v10, ptr @var
2741456b686SNikita Popov  store volatile i32 %v11, ptr @var
2751456b686SNikita Popov  store volatile i32 %v12, ptr @var
2761456b686SNikita Popov  store volatile i32 %v13, ptr @var
27718c5f3c3Sluxufan  br label %foo
27818c5f3c3Sluxufan
27918c5f3c3Sluxufanfoo:
28018c5f3c3Sluxufan  ret void
28118c5f3c3Sluxufan}
282