520 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=riscv64 | FileCheck %s --check-prefixes=CHECK,RV64I3; RUN: llc < %s -mtriple=riscv64 -mattr=+zba,+zbb | \4; RUN: FileCheck %s --check-prefixes=CHECK,RV64ZB5 6; Make sure we emit an lw for the stack reload in 'truebb'.7define i1 @test_sext_w(i64 %x, i32 %y) nounwind {8; CHECK-LABEL: test_sext_w:9; CHECK: # %bb.0:10; CHECK-NEXT: addi sp, sp, -12811; CHECK-NEXT: sd ra, 120(sp) # 8-byte Folded Spill12; CHECK-NEXT: sd s0, 112(sp) # 8-byte Folded Spill13; CHECK-NEXT: sd s1, 104(sp) # 8-byte Folded Spill14; CHECK-NEXT: sd s2, 96(sp) # 8-byte Folded Spill15; CHECK-NEXT: sd s3, 88(sp) # 8-byte Folded Spill16; CHECK-NEXT: sd s4, 80(sp) # 8-byte Folded Spill17; CHECK-NEXT: sd s5, 72(sp) # 8-byte Folded Spill18; CHECK-NEXT: sd s6, 64(sp) # 8-byte Folded Spill19; CHECK-NEXT: sd s7, 56(sp) # 8-byte Folded Spill20; CHECK-NEXT: sd s8, 48(sp) # 8-byte Folded Spill21; CHECK-NEXT: sd s9, 40(sp) # 8-byte Folded Spill22; CHECK-NEXT: sd s10, 32(sp) # 8-byte Folded Spill23; CHECK-NEXT: sd s11, 24(sp) # 8-byte Folded Spill24; CHECK-NEXT: sd a1, 8(sp) # 8-byte Folded Spill25; CHECK-NEXT: sd a0, 16(sp) # 8-byte Folded Spill26; CHECK-NEXT: #APP27; CHECK-NEXT: #NO_APP28; CHECK-NEXT: ld a0, 16(sp) # 8-byte Folded Reload29; CHECK-NEXT: beqz a0, .LBB0_230; CHECK-NEXT: # %bb.1: # %falsebb31; CHECK-NEXT: li a0, 032; CHECK-NEXT: j .LBB0_333; CHECK-NEXT: .LBB0_2: # %truebb34; CHECK-NEXT: ld a0, 8(sp) # 8-byte Folded Reload35; CHECK-NEXT: srliw a0, a0, 3136; CHECK-NEXT: .LBB0_3: # %falsebb37; CHECK-NEXT: ld ra, 120(sp) # 8-byte Folded Reload38; CHECK-NEXT: ld s0, 112(sp) # 8-byte Folded Reload39; CHECK-NEXT: ld s1, 104(sp) # 8-byte Folded Reload40; CHECK-NEXT: ld s2, 96(sp) # 8-byte Folded Reload41; CHECK-NEXT: ld s3, 88(sp) # 8-byte Folded Reload42; CHECK-NEXT: ld s4, 80(sp) # 8-byte Folded Reload43; CHECK-NEXT: ld s5, 72(sp) # 8-byte Folded Reload44; CHECK-NEXT: ld s6, 64(sp) # 8-byte Folded Reload45; CHECK-NEXT: ld s7, 56(sp) # 8-byte Folded Reload46; CHECK-NEXT: ld s8, 48(sp) # 8-byte Folded Reload47; CHECK-NEXT: ld s9, 40(sp) # 8-byte Folded Reload48; CHECK-NEXT: ld s10, 32(sp) # 8-byte Folded Reload49; CHECK-NEXT: ld s11, 24(sp) # 8-byte Folded Reload50; CHECK-NEXT: addi sp, sp, 12851; CHECK-NEXT: ret52 tail call void asm sideeffect "", "~{x1},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31}"()53 %a = icmp eq i64 %x, 054 br i1 %a, label %truebb, label %falsebb55truebb:56 %b = icmp slt i32 %y, 057 ret i1 %b58falsebb:59 ret i1 060}61 62; Make sure we emit an lb for the stack reload in 'truebb' with Zbb.63define i64 @test_sext_b(i64 %x, i8 %y) nounwind {64; RV64I-LABEL: test_sext_b:65; RV64I: # %bb.0:66; RV64I-NEXT: addi sp, sp, -12867; RV64I-NEXT: sd ra, 120(sp) # 8-byte Folded Spill68; RV64I-NEXT: sd s0, 112(sp) # 8-byte Folded Spill69; RV64I-NEXT: sd s1, 104(sp) # 8-byte Folded Spill70; RV64I-NEXT: sd s2, 96(sp) # 8-byte Folded Spill71; RV64I-NEXT: sd s3, 88(sp) # 8-byte Folded Spill72; RV64I-NEXT: sd s4, 80(sp) # 8-byte Folded Spill73; RV64I-NEXT: sd s5, 72(sp) # 8-byte Folded Spill74; RV64I-NEXT: sd s6, 64(sp) # 8-byte Folded Spill75; RV64I-NEXT: sd s7, 56(sp) # 8-byte Folded Spill76; RV64I-NEXT: sd s8, 48(sp) # 8-byte Folded Spill77; RV64I-NEXT: sd s9, 40(sp) # 8-byte Folded Spill78; RV64I-NEXT: sd s10, 32(sp) # 8-byte Folded Spill79; RV64I-NEXT: sd s11, 24(sp) # 8-byte Folded Spill80; RV64I-NEXT: sd a1, 8(sp) # 8-byte Folded Spill81; RV64I-NEXT: sd a0, 16(sp) # 8-byte Folded Spill82; RV64I-NEXT: #APP83; RV64I-NEXT: #NO_APP84; RV64I-NEXT: ld a0, 16(sp) # 8-byte Folded Reload85; RV64I-NEXT: beqz a0, .LBB1_286; RV64I-NEXT: # %bb.1: # %falsebb87; RV64I-NEXT: li a0, 088; RV64I-NEXT: j .LBB1_389; RV64I-NEXT: .LBB1_2: # %truebb90; RV64I-NEXT: ld a0, 8(sp) # 8-byte Folded Reload91; RV64I-NEXT: slli a0, a0, 5692; RV64I-NEXT: srai a0, a0, 5693; RV64I-NEXT: .LBB1_3: # %falsebb94; RV64I-NEXT: ld ra, 120(sp) # 8-byte Folded Reload95; RV64I-NEXT: ld s0, 112(sp) # 8-byte Folded Reload96; RV64I-NEXT: ld s1, 104(sp) # 8-byte Folded Reload97; RV64I-NEXT: ld s2, 96(sp) # 8-byte Folded Reload98; RV64I-NEXT: ld s3, 88(sp) # 8-byte Folded Reload99; RV64I-NEXT: ld s4, 80(sp) # 8-byte Folded Reload100; RV64I-NEXT: ld s5, 72(sp) # 8-byte Folded Reload101; RV64I-NEXT: ld s6, 64(sp) # 8-byte Folded Reload102; RV64I-NEXT: ld s7, 56(sp) # 8-byte Folded Reload103; RV64I-NEXT: ld s8, 48(sp) # 8-byte Folded Reload104; RV64I-NEXT: ld s9, 40(sp) # 8-byte Folded Reload105; RV64I-NEXT: ld s10, 32(sp) # 8-byte Folded Reload106; RV64I-NEXT: ld s11, 24(sp) # 8-byte Folded Reload107; RV64I-NEXT: addi sp, sp, 128108; RV64I-NEXT: ret109;110; RV64ZB-LABEL: test_sext_b:111; RV64ZB: # %bb.0:112; RV64ZB-NEXT: addi sp, sp, -128113; RV64ZB-NEXT: sd ra, 120(sp) # 8-byte Folded Spill114; RV64ZB-NEXT: sd s0, 112(sp) # 8-byte Folded Spill115; RV64ZB-NEXT: sd s1, 104(sp) # 8-byte Folded Spill116; RV64ZB-NEXT: sd s2, 96(sp) # 8-byte Folded Spill117; RV64ZB-NEXT: sd s3, 88(sp) # 8-byte Folded Spill118; RV64ZB-NEXT: sd s4, 80(sp) # 8-byte Folded Spill119; RV64ZB-NEXT: sd s5, 72(sp) # 8-byte Folded Spill120; RV64ZB-NEXT: sd s6, 64(sp) # 8-byte Folded Spill121; RV64ZB-NEXT: sd s7, 56(sp) # 8-byte Folded Spill122; RV64ZB-NEXT: sd s8, 48(sp) # 8-byte Folded Spill123; RV64ZB-NEXT: sd s9, 40(sp) # 8-byte Folded Spill124; RV64ZB-NEXT: sd s10, 32(sp) # 8-byte Folded Spill125; RV64ZB-NEXT: sd s11, 24(sp) # 8-byte Folded Spill126; RV64ZB-NEXT: sd a1, 8(sp) # 8-byte Folded Spill127; RV64ZB-NEXT: sd a0, 16(sp) # 8-byte Folded Spill128; RV64ZB-NEXT: #APP129; RV64ZB-NEXT: #NO_APP130; RV64ZB-NEXT: ld a0, 16(sp) # 8-byte Folded Reload131; RV64ZB-NEXT: beqz a0, .LBB1_2132; RV64ZB-NEXT: # %bb.1: # %falsebb133; RV64ZB-NEXT: li a0, 0134; RV64ZB-NEXT: j .LBB1_3135; RV64ZB-NEXT: .LBB1_2: # %truebb136; RV64ZB-NEXT: lb a0, 8(sp) # 8-byte Folded Reload137; RV64ZB-NEXT: .LBB1_3: # %falsebb138; RV64ZB-NEXT: ld ra, 120(sp) # 8-byte Folded Reload139; RV64ZB-NEXT: ld s0, 112(sp) # 8-byte Folded Reload140; RV64ZB-NEXT: ld s1, 104(sp) # 8-byte Folded Reload141; RV64ZB-NEXT: ld s2, 96(sp) # 8-byte Folded Reload142; RV64ZB-NEXT: ld s3, 88(sp) # 8-byte Folded Reload143; RV64ZB-NEXT: ld s4, 80(sp) # 8-byte Folded Reload144; RV64ZB-NEXT: ld s5, 72(sp) # 8-byte Folded Reload145; RV64ZB-NEXT: ld s6, 64(sp) # 8-byte Folded Reload146; RV64ZB-NEXT: ld s7, 56(sp) # 8-byte Folded Reload147; RV64ZB-NEXT: ld s8, 48(sp) # 8-byte Folded Reload148; RV64ZB-NEXT: ld s9, 40(sp) # 8-byte Folded Reload149; RV64ZB-NEXT: ld s10, 32(sp) # 8-byte Folded Reload150; RV64ZB-NEXT: ld s11, 24(sp) # 8-byte Folded Reload151; RV64ZB-NEXT: addi sp, sp, 128152; RV64ZB-NEXT: ret153 tail call void asm sideeffect "", "~{x1},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31}"()154 %a = icmp eq i64 %x, 0155 br i1 %a, label %truebb, label %falsebb156truebb:157 %b = sext i8 %y to i64158 ret i64 %b159falsebb:160 ret i64 0161}162 163; Make sure we emit an lh for the stack reload in 'truebb' with Zbb.164define i64 @test_sext_h(i64 %x, i16 %y) nounwind {165; RV64I-LABEL: test_sext_h:166; RV64I: # %bb.0:167; RV64I-NEXT: addi sp, sp, -128168; RV64I-NEXT: sd ra, 120(sp) # 8-byte Folded Spill169; RV64I-NEXT: sd s0, 112(sp) # 8-byte Folded Spill170; RV64I-NEXT: sd s1, 104(sp) # 8-byte Folded Spill171; RV64I-NEXT: sd s2, 96(sp) # 8-byte Folded Spill172; RV64I-NEXT: sd s3, 88(sp) # 8-byte Folded Spill173; RV64I-NEXT: sd s4, 80(sp) # 8-byte Folded Spill174; RV64I-NEXT: sd s5, 72(sp) # 8-byte Folded Spill175; RV64I-NEXT: sd s6, 64(sp) # 8-byte Folded Spill176; RV64I-NEXT: sd s7, 56(sp) # 8-byte Folded Spill177; RV64I-NEXT: sd s8, 48(sp) # 8-byte Folded Spill178; RV64I-NEXT: sd s9, 40(sp) # 8-byte Folded Spill179; RV64I-NEXT: sd s10, 32(sp) # 8-byte Folded Spill180; RV64I-NEXT: sd s11, 24(sp) # 8-byte Folded Spill181; RV64I-NEXT: sd a1, 8(sp) # 8-byte Folded Spill182; RV64I-NEXT: sd a0, 16(sp) # 8-byte Folded Spill183; RV64I-NEXT: #APP184; RV64I-NEXT: #NO_APP185; RV64I-NEXT: ld a0, 16(sp) # 8-byte Folded Reload186; RV64I-NEXT: beqz a0, .LBB2_2187; RV64I-NEXT: # %bb.1: # %falsebb188; RV64I-NEXT: li a0, 0189; RV64I-NEXT: j .LBB2_3190; RV64I-NEXT: .LBB2_2: # %truebb191; RV64I-NEXT: ld a0, 8(sp) # 8-byte Folded Reload192; RV64I-NEXT: slli a0, a0, 48193; RV64I-NEXT: srai a0, a0, 48194; RV64I-NEXT: .LBB2_3: # %falsebb195; RV64I-NEXT: ld ra, 120(sp) # 8-byte Folded Reload196; RV64I-NEXT: ld s0, 112(sp) # 8-byte Folded Reload197; RV64I-NEXT: ld s1, 104(sp) # 8-byte Folded Reload198; RV64I-NEXT: ld s2, 96(sp) # 8-byte Folded Reload199; RV64I-NEXT: ld s3, 88(sp) # 8-byte Folded Reload200; RV64I-NEXT: ld s4, 80(sp) # 8-byte Folded Reload201; RV64I-NEXT: ld s5, 72(sp) # 8-byte Folded Reload202; RV64I-NEXT: ld s6, 64(sp) # 8-byte Folded Reload203; RV64I-NEXT: ld s7, 56(sp) # 8-byte Folded Reload204; RV64I-NEXT: ld s8, 48(sp) # 8-byte Folded Reload205; RV64I-NEXT: ld s9, 40(sp) # 8-byte Folded Reload206; RV64I-NEXT: ld s10, 32(sp) # 8-byte Folded Reload207; RV64I-NEXT: ld s11, 24(sp) # 8-byte Folded Reload208; RV64I-NEXT: addi sp, sp, 128209; RV64I-NEXT: ret210;211; RV64ZB-LABEL: test_sext_h:212; RV64ZB: # %bb.0:213; RV64ZB-NEXT: addi sp, sp, -128214; RV64ZB-NEXT: sd ra, 120(sp) # 8-byte Folded Spill215; RV64ZB-NEXT: sd s0, 112(sp) # 8-byte Folded Spill216; RV64ZB-NEXT: sd s1, 104(sp) # 8-byte Folded Spill217; RV64ZB-NEXT: sd s2, 96(sp) # 8-byte Folded Spill218; RV64ZB-NEXT: sd s3, 88(sp) # 8-byte Folded Spill219; RV64ZB-NEXT: sd s4, 80(sp) # 8-byte Folded Spill220; RV64ZB-NEXT: sd s5, 72(sp) # 8-byte Folded Spill221; RV64ZB-NEXT: sd s6, 64(sp) # 8-byte Folded Spill222; RV64ZB-NEXT: sd s7, 56(sp) # 8-byte Folded Spill223; RV64ZB-NEXT: sd s8, 48(sp) # 8-byte Folded Spill224; RV64ZB-NEXT: sd s9, 40(sp) # 8-byte Folded Spill225; RV64ZB-NEXT: sd s10, 32(sp) # 8-byte Folded Spill226; RV64ZB-NEXT: sd s11, 24(sp) # 8-byte Folded Spill227; RV64ZB-NEXT: sd a1, 8(sp) # 8-byte Folded Spill228; RV64ZB-NEXT: sd a0, 16(sp) # 8-byte Folded Spill229; RV64ZB-NEXT: #APP230; RV64ZB-NEXT: #NO_APP231; RV64ZB-NEXT: ld a0, 16(sp) # 8-byte Folded Reload232; RV64ZB-NEXT: beqz a0, .LBB2_2233; RV64ZB-NEXT: # %bb.1: # %falsebb234; RV64ZB-NEXT: li a0, 0235; RV64ZB-NEXT: j .LBB2_3236; RV64ZB-NEXT: .LBB2_2: # %truebb237; RV64ZB-NEXT: lh a0, 8(sp) # 8-byte Folded Reload238; RV64ZB-NEXT: .LBB2_3: # %falsebb239; RV64ZB-NEXT: ld ra, 120(sp) # 8-byte Folded Reload240; RV64ZB-NEXT: ld s0, 112(sp) # 8-byte Folded Reload241; RV64ZB-NEXT: ld s1, 104(sp) # 8-byte Folded Reload242; RV64ZB-NEXT: ld s2, 96(sp) # 8-byte Folded Reload243; RV64ZB-NEXT: ld s3, 88(sp) # 8-byte Folded Reload244; RV64ZB-NEXT: ld s4, 80(sp) # 8-byte Folded Reload245; RV64ZB-NEXT: ld s5, 72(sp) # 8-byte Folded Reload246; RV64ZB-NEXT: ld s6, 64(sp) # 8-byte Folded Reload247; RV64ZB-NEXT: ld s7, 56(sp) # 8-byte Folded Reload248; RV64ZB-NEXT: ld s8, 48(sp) # 8-byte Folded Reload249; RV64ZB-NEXT: ld s9, 40(sp) # 8-byte Folded Reload250; RV64ZB-NEXT: ld s10, 32(sp) # 8-byte Folded Reload251; RV64ZB-NEXT: ld s11, 24(sp) # 8-byte Folded Reload252; RV64ZB-NEXT: addi sp, sp, 128253; RV64ZB-NEXT: ret254 tail call void asm sideeffect "", "~{x1},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31}"()255 %a = icmp eq i64 %x, 0256 br i1 %a, label %truebb, label %falsebb257truebb:258 %b = sext i16 %y to i64259 ret i64 %b260falsebb:261 ret i64 0262}263 264; Make sure we emit an lbu for the stack reload in 'truebb' with Zbb.265define i64 @test_zext_b(i64 %x, i8 %y) nounwind {266; CHECK-LABEL: test_zext_b:267; CHECK: # %bb.0:268; CHECK-NEXT: addi sp, sp, -128269; CHECK-NEXT: sd ra, 120(sp) # 8-byte Folded Spill270; CHECK-NEXT: sd s0, 112(sp) # 8-byte Folded Spill271; CHECK-NEXT: sd s1, 104(sp) # 8-byte Folded Spill272; CHECK-NEXT: sd s2, 96(sp) # 8-byte Folded Spill273; CHECK-NEXT: sd s3, 88(sp) # 8-byte Folded Spill274; CHECK-NEXT: sd s4, 80(sp) # 8-byte Folded Spill275; CHECK-NEXT: sd s5, 72(sp) # 8-byte Folded Spill276; CHECK-NEXT: sd s6, 64(sp) # 8-byte Folded Spill277; CHECK-NEXT: sd s7, 56(sp) # 8-byte Folded Spill278; CHECK-NEXT: sd s8, 48(sp) # 8-byte Folded Spill279; CHECK-NEXT: sd s9, 40(sp) # 8-byte Folded Spill280; CHECK-NEXT: sd s10, 32(sp) # 8-byte Folded Spill281; CHECK-NEXT: sd s11, 24(sp) # 8-byte Folded Spill282; CHECK-NEXT: sd a1, 8(sp) # 8-byte Folded Spill283; CHECK-NEXT: sd a0, 16(sp) # 8-byte Folded Spill284; CHECK-NEXT: #APP285; CHECK-NEXT: #NO_APP286; CHECK-NEXT: ld a0, 16(sp) # 8-byte Folded Reload287; CHECK-NEXT: beqz a0, .LBB3_2288; CHECK-NEXT: # %bb.1: # %falsebb289; CHECK-NEXT: li a0, 0290; CHECK-NEXT: j .LBB3_3291; CHECK-NEXT: .LBB3_2: # %truebb292; CHECK-NEXT: lbu a0, 8(sp) # 8-byte Folded Reload293; CHECK-NEXT: .LBB3_3: # %falsebb294; CHECK-NEXT: ld ra, 120(sp) # 8-byte Folded Reload295; CHECK-NEXT: ld s0, 112(sp) # 8-byte Folded Reload296; CHECK-NEXT: ld s1, 104(sp) # 8-byte Folded Reload297; CHECK-NEXT: ld s2, 96(sp) # 8-byte Folded Reload298; CHECK-NEXT: ld s3, 88(sp) # 8-byte Folded Reload299; CHECK-NEXT: ld s4, 80(sp) # 8-byte Folded Reload300; CHECK-NEXT: ld s5, 72(sp) # 8-byte Folded Reload301; CHECK-NEXT: ld s6, 64(sp) # 8-byte Folded Reload302; CHECK-NEXT: ld s7, 56(sp) # 8-byte Folded Reload303; CHECK-NEXT: ld s8, 48(sp) # 8-byte Folded Reload304; CHECK-NEXT: ld s9, 40(sp) # 8-byte Folded Reload305; CHECK-NEXT: ld s10, 32(sp) # 8-byte Folded Reload306; CHECK-NEXT: ld s11, 24(sp) # 8-byte Folded Reload307; CHECK-NEXT: addi sp, sp, 128308; CHECK-NEXT: ret309 tail call void asm sideeffect "", "~{x1},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31}"()310 %a = icmp eq i64 %x, 0311 br i1 %a, label %truebb, label %falsebb312truebb:313 %b = zext i8 %y to i64314 ret i64 %b315falsebb:316 ret i64 0317}318 319; Make sure we emit an lhu for the stack reload in 'truebb' with Zbb.320define i64 @test_zext_h(i64 %x, i16 %y) nounwind {321; RV64I-LABEL: test_zext_h:322; RV64I: # %bb.0:323; RV64I-NEXT: addi sp, sp, -128324; RV64I-NEXT: sd ra, 120(sp) # 8-byte Folded Spill325; RV64I-NEXT: sd s0, 112(sp) # 8-byte Folded Spill326; RV64I-NEXT: sd s1, 104(sp) # 8-byte Folded Spill327; RV64I-NEXT: sd s2, 96(sp) # 8-byte Folded Spill328; RV64I-NEXT: sd s3, 88(sp) # 8-byte Folded Spill329; RV64I-NEXT: sd s4, 80(sp) # 8-byte Folded Spill330; RV64I-NEXT: sd s5, 72(sp) # 8-byte Folded Spill331; RV64I-NEXT: sd s6, 64(sp) # 8-byte Folded Spill332; RV64I-NEXT: sd s7, 56(sp) # 8-byte Folded Spill333; RV64I-NEXT: sd s8, 48(sp) # 8-byte Folded Spill334; RV64I-NEXT: sd s9, 40(sp) # 8-byte Folded Spill335; RV64I-NEXT: sd s10, 32(sp) # 8-byte Folded Spill336; RV64I-NEXT: sd s11, 24(sp) # 8-byte Folded Spill337; RV64I-NEXT: sd a1, 8(sp) # 8-byte Folded Spill338; RV64I-NEXT: sd a0, 16(sp) # 8-byte Folded Spill339; RV64I-NEXT: #APP340; RV64I-NEXT: #NO_APP341; RV64I-NEXT: ld a0, 16(sp) # 8-byte Folded Reload342; RV64I-NEXT: beqz a0, .LBB4_2343; RV64I-NEXT: # %bb.1: # %falsebb344; RV64I-NEXT: li a0, 0345; RV64I-NEXT: j .LBB4_3346; RV64I-NEXT: .LBB4_2: # %truebb347; RV64I-NEXT: ld a0, 8(sp) # 8-byte Folded Reload348; RV64I-NEXT: slli a0, a0, 48349; RV64I-NEXT: srli a0, a0, 48350; RV64I-NEXT: .LBB4_3: # %falsebb351; RV64I-NEXT: ld ra, 120(sp) # 8-byte Folded Reload352; RV64I-NEXT: ld s0, 112(sp) # 8-byte Folded Reload353; RV64I-NEXT: ld s1, 104(sp) # 8-byte Folded Reload354; RV64I-NEXT: ld s2, 96(sp) # 8-byte Folded Reload355; RV64I-NEXT: ld s3, 88(sp) # 8-byte Folded Reload356; RV64I-NEXT: ld s4, 80(sp) # 8-byte Folded Reload357; RV64I-NEXT: ld s5, 72(sp) # 8-byte Folded Reload358; RV64I-NEXT: ld s6, 64(sp) # 8-byte Folded Reload359; RV64I-NEXT: ld s7, 56(sp) # 8-byte Folded Reload360; RV64I-NEXT: ld s8, 48(sp) # 8-byte Folded Reload361; RV64I-NEXT: ld s9, 40(sp) # 8-byte Folded Reload362; RV64I-NEXT: ld s10, 32(sp) # 8-byte Folded Reload363; RV64I-NEXT: ld s11, 24(sp) # 8-byte Folded Reload364; RV64I-NEXT: addi sp, sp, 128365; RV64I-NEXT: ret366;367; RV64ZB-LABEL: test_zext_h:368; RV64ZB: # %bb.0:369; RV64ZB-NEXT: addi sp, sp, -128370; RV64ZB-NEXT: sd ra, 120(sp) # 8-byte Folded Spill371; RV64ZB-NEXT: sd s0, 112(sp) # 8-byte Folded Spill372; RV64ZB-NEXT: sd s1, 104(sp) # 8-byte Folded Spill373; RV64ZB-NEXT: sd s2, 96(sp) # 8-byte Folded Spill374; RV64ZB-NEXT: sd s3, 88(sp) # 8-byte Folded Spill375; RV64ZB-NEXT: sd s4, 80(sp) # 8-byte Folded Spill376; RV64ZB-NEXT: sd s5, 72(sp) # 8-byte Folded Spill377; RV64ZB-NEXT: sd s6, 64(sp) # 8-byte Folded Spill378; RV64ZB-NEXT: sd s7, 56(sp) # 8-byte Folded Spill379; RV64ZB-NEXT: sd s8, 48(sp) # 8-byte Folded Spill380; RV64ZB-NEXT: sd s9, 40(sp) # 8-byte Folded Spill381; RV64ZB-NEXT: sd s10, 32(sp) # 8-byte Folded Spill382; RV64ZB-NEXT: sd s11, 24(sp) # 8-byte Folded Spill383; RV64ZB-NEXT: sd a1, 8(sp) # 8-byte Folded Spill384; RV64ZB-NEXT: sd a0, 16(sp) # 8-byte Folded Spill385; RV64ZB-NEXT: #APP386; RV64ZB-NEXT: #NO_APP387; RV64ZB-NEXT: ld a0, 16(sp) # 8-byte Folded Reload388; RV64ZB-NEXT: beqz a0, .LBB4_2389; RV64ZB-NEXT: # %bb.1: # %falsebb390; RV64ZB-NEXT: li a0, 0391; RV64ZB-NEXT: j .LBB4_3392; RV64ZB-NEXT: .LBB4_2: # %truebb393; RV64ZB-NEXT: lhu a0, 8(sp) # 8-byte Folded Reload394; RV64ZB-NEXT: .LBB4_3: # %falsebb395; RV64ZB-NEXT: ld ra, 120(sp) # 8-byte Folded Reload396; RV64ZB-NEXT: ld s0, 112(sp) # 8-byte Folded Reload397; RV64ZB-NEXT: ld s1, 104(sp) # 8-byte Folded Reload398; RV64ZB-NEXT: ld s2, 96(sp) # 8-byte Folded Reload399; RV64ZB-NEXT: ld s3, 88(sp) # 8-byte Folded Reload400; RV64ZB-NEXT: ld s4, 80(sp) # 8-byte Folded Reload401; RV64ZB-NEXT: ld s5, 72(sp) # 8-byte Folded Reload402; RV64ZB-NEXT: ld s6, 64(sp) # 8-byte Folded Reload403; RV64ZB-NEXT: ld s7, 56(sp) # 8-byte Folded Reload404; RV64ZB-NEXT: ld s8, 48(sp) # 8-byte Folded Reload405; RV64ZB-NEXT: ld s9, 40(sp) # 8-byte Folded Reload406; RV64ZB-NEXT: ld s10, 32(sp) # 8-byte Folded Reload407; RV64ZB-NEXT: ld s11, 24(sp) # 8-byte Folded Reload408; RV64ZB-NEXT: addi sp, sp, 128409; RV64ZB-NEXT: ret410 tail call void asm sideeffect "", "~{x1},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31}"()411 %a = icmp eq i64 %x, 0412 br i1 %a, label %truebb, label %falsebb413truebb:414 %b = zext i16 %y to i64415 ret i64 %b416falsebb:417 ret i64 0418}419 420; Make sure we emit an lwu for the stack reload in 'truebb' with Zbb.421define i64 @test_zext_w(i64 %x, i32 %y) nounwind {422; RV64I-LABEL: test_zext_w:423; RV64I: # %bb.0:424; RV64I-NEXT: addi sp, sp, -128425; RV64I-NEXT: sd ra, 120(sp) # 8-byte Folded Spill426; RV64I-NEXT: sd s0, 112(sp) # 8-byte Folded Spill427; RV64I-NEXT: sd s1, 104(sp) # 8-byte Folded Spill428; RV64I-NEXT: sd s2, 96(sp) # 8-byte Folded Spill429; RV64I-NEXT: sd s3, 88(sp) # 8-byte Folded Spill430; RV64I-NEXT: sd s4, 80(sp) # 8-byte Folded Spill431; RV64I-NEXT: sd s5, 72(sp) # 8-byte Folded Spill432; RV64I-NEXT: sd s6, 64(sp) # 8-byte Folded Spill433; RV64I-NEXT: sd s7, 56(sp) # 8-byte Folded Spill434; RV64I-NEXT: sd s8, 48(sp) # 8-byte Folded Spill435; RV64I-NEXT: sd s9, 40(sp) # 8-byte Folded Spill436; RV64I-NEXT: sd s10, 32(sp) # 8-byte Folded Spill437; RV64I-NEXT: sd s11, 24(sp) # 8-byte Folded Spill438; RV64I-NEXT: sd a1, 8(sp) # 8-byte Folded Spill439; RV64I-NEXT: sd a0, 16(sp) # 8-byte Folded Spill440; RV64I-NEXT: #APP441; RV64I-NEXT: #NO_APP442; RV64I-NEXT: ld a0, 16(sp) # 8-byte Folded Reload443; RV64I-NEXT: beqz a0, .LBB5_2444; RV64I-NEXT: # %bb.1: # %falsebb445; RV64I-NEXT: li a0, 0446; RV64I-NEXT: j .LBB5_3447; RV64I-NEXT: .LBB5_2: # %truebb448; RV64I-NEXT: ld a0, 8(sp) # 8-byte Folded Reload449; RV64I-NEXT: slli a0, a0, 32450; RV64I-NEXT: srli a0, a0, 32451; RV64I-NEXT: .LBB5_3: # %falsebb452; RV64I-NEXT: ld ra, 120(sp) # 8-byte Folded Reload453; RV64I-NEXT: ld s0, 112(sp) # 8-byte Folded Reload454; RV64I-NEXT: ld s1, 104(sp) # 8-byte Folded Reload455; RV64I-NEXT: ld s2, 96(sp) # 8-byte Folded Reload456; RV64I-NEXT: ld s3, 88(sp) # 8-byte Folded Reload457; RV64I-NEXT: ld s4, 80(sp) # 8-byte Folded Reload458; RV64I-NEXT: ld s5, 72(sp) # 8-byte Folded Reload459; RV64I-NEXT: ld s6, 64(sp) # 8-byte Folded Reload460; RV64I-NEXT: ld s7, 56(sp) # 8-byte Folded Reload461; RV64I-NEXT: ld s8, 48(sp) # 8-byte Folded Reload462; RV64I-NEXT: ld s9, 40(sp) # 8-byte Folded Reload463; RV64I-NEXT: ld s10, 32(sp) # 8-byte Folded Reload464; RV64I-NEXT: ld s11, 24(sp) # 8-byte Folded Reload465; RV64I-NEXT: addi sp, sp, 128466; RV64I-NEXT: ret467;468; RV64ZB-LABEL: test_zext_w:469; RV64ZB: # %bb.0:470; RV64ZB-NEXT: addi sp, sp, -128471; RV64ZB-NEXT: sd ra, 120(sp) # 8-byte Folded Spill472; RV64ZB-NEXT: sd s0, 112(sp) # 8-byte Folded Spill473; RV64ZB-NEXT: sd s1, 104(sp) # 8-byte Folded Spill474; RV64ZB-NEXT: sd s2, 96(sp) # 8-byte Folded Spill475; RV64ZB-NEXT: sd s3, 88(sp) # 8-byte Folded Spill476; RV64ZB-NEXT: sd s4, 80(sp) # 8-byte Folded Spill477; RV64ZB-NEXT: sd s5, 72(sp) # 8-byte Folded Spill478; RV64ZB-NEXT: sd s6, 64(sp) # 8-byte Folded Spill479; RV64ZB-NEXT: sd s7, 56(sp) # 8-byte Folded Spill480; RV64ZB-NEXT: sd s8, 48(sp) # 8-byte Folded Spill481; RV64ZB-NEXT: sd s9, 40(sp) # 8-byte Folded Spill482; RV64ZB-NEXT: sd s10, 32(sp) # 8-byte Folded Spill483; RV64ZB-NEXT: sd s11, 24(sp) # 8-byte Folded Spill484; RV64ZB-NEXT: sd a1, 8(sp) # 8-byte Folded Spill485; RV64ZB-NEXT: sd a0, 16(sp) # 8-byte Folded Spill486; RV64ZB-NEXT: #APP487; RV64ZB-NEXT: #NO_APP488; RV64ZB-NEXT: ld a0, 16(sp) # 8-byte Folded Reload489; RV64ZB-NEXT: beqz a0, .LBB5_2490; RV64ZB-NEXT: # %bb.1: # %falsebb491; RV64ZB-NEXT: li a0, 0492; RV64ZB-NEXT: j .LBB5_3493; RV64ZB-NEXT: .LBB5_2: # %truebb494; RV64ZB-NEXT: lwu a0, 8(sp) # 8-byte Folded Reload495; RV64ZB-NEXT: .LBB5_3: # %falsebb496; RV64ZB-NEXT: ld ra, 120(sp) # 8-byte Folded Reload497; RV64ZB-NEXT: ld s0, 112(sp) # 8-byte Folded Reload498; RV64ZB-NEXT: ld s1, 104(sp) # 8-byte Folded Reload499; RV64ZB-NEXT: ld s2, 96(sp) # 8-byte Folded Reload500; RV64ZB-NEXT: ld s3, 88(sp) # 8-byte Folded Reload501; RV64ZB-NEXT: ld s4, 80(sp) # 8-byte Folded Reload502; RV64ZB-NEXT: ld s5, 72(sp) # 8-byte Folded Reload503; RV64ZB-NEXT: ld s6, 64(sp) # 8-byte Folded Reload504; RV64ZB-NEXT: ld s7, 56(sp) # 8-byte Folded Reload505; RV64ZB-NEXT: ld s8, 48(sp) # 8-byte Folded Reload506; RV64ZB-NEXT: ld s9, 40(sp) # 8-byte Folded Reload507; RV64ZB-NEXT: ld s10, 32(sp) # 8-byte Folded Reload508; RV64ZB-NEXT: ld s11, 24(sp) # 8-byte Folded Reload509; RV64ZB-NEXT: addi sp, sp, 128510; RV64ZB-NEXT: ret511 tail call void asm sideeffect "", "~{x1},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31}"()512 %a = icmp eq i64 %x, 0513 br i1 %a, label %truebb, label %falsebb514truebb:515 %b = zext i32 %y to i64516 ret i64 %b517falsebb:518 ret i64 0519}520