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