brintos

brintos / llvm-project-archived public Read only

0
0
Text · 129.2 KiB · f5e5244 Raw
3417 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -verify-machineinstrs -no-integrated-as < %s \3; RUN:   | FileCheck -check-prefixes=RV32I,RV32I-NO-INTEGRATED %s4; RUN: llc -mtriple=riscv64 -verify-machineinstrs -no-integrated-as < %s \5; RUN:   | FileCheck -check-prefixes=RV64I,RV64I-NO-INTEGRATED %s6; RUN: llc -mtriple=riscv32 -code-model=medium -verify-machineinstrs -no-integrated-as < %s \7; RUN:   | FileCheck -check-prefixes=RV32I-MEDIUM,RV32I-MEDIUM-NO-INTEGRATED %s8; RUN: llc -mtriple=riscv64 -code-model=medium -verify-machineinstrs -no-integrated-as < %s \9; RUN:   | FileCheck -check-prefixes=RV64I-MEDIUM,RV64I-MEDIUM-NO-INTEGRATED %s10; RUN: llc -mtriple=riscv64 -code-model=large -verify-machineinstrs -no-integrated-as < %s \11; RUN:   | FileCheck -check-prefixes=RV64I-LARGE,RV64I-LARGE-NO-INTEGRATED %s12; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \13; RUN:   | FileCheck -check-prefixes=RV32I,RV32I-INTEGRATED %s14; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \15; RUN:   | FileCheck -check-prefixes=RV64I,RV64I-INTEGRATED %s16; RUN: llc -mtriple=riscv32 -code-model=medium -verify-machineinstrs < %s \17; RUN:   | FileCheck -check-prefixes=RV32I-MEDIUM,RV32I-MEDIUM-INTEGRATED %s18; RUN: llc -mtriple=riscv64 -code-model=medium -verify-machineinstrs < %s \19; RUN:   | FileCheck -check-prefixes=RV64I-MEDIUM,RV64I-MEDIUM-INTEGRATED %s20; RUN: llc -mtriple=riscv64 -code-model=large -verify-machineinstrs < %s \21; RUN:   | FileCheck -check-prefixes=RV64I-LARGE,RV64I-LARGE-INTEGRATED %s22 23@eg = external global [4000 x i32], align 424@ewg = extern_weak global [4000 x i32], align 425 26define void @constraint_m_1(ptr %a) nounwind {27; RV32I-LABEL: constraint_m_1:28; RV32I:       # %bb.0:29; RV32I-NEXT:    #APP30; RV32I-NEXT:    #NO_APP31; RV32I-NEXT:    ret32;33; RV64I-LABEL: constraint_m_1:34; RV64I:       # %bb.0:35; RV64I-NEXT:    #APP36; RV64I-NEXT:    #NO_APP37; RV64I-NEXT:    ret38;39; RV32I-MEDIUM-LABEL: constraint_m_1:40; RV32I-MEDIUM:       # %bb.0:41; RV32I-MEDIUM-NEXT:    #APP42; RV32I-MEDIUM-NEXT:    #NO_APP43; RV32I-MEDIUM-NEXT:    ret44;45; RV64I-MEDIUM-LABEL: constraint_m_1:46; RV64I-MEDIUM:       # %bb.0:47; RV64I-MEDIUM-NEXT:    #APP48; RV64I-MEDIUM-NEXT:    #NO_APP49; RV64I-MEDIUM-NEXT:    ret50;51; RV64I-LARGE-LABEL: constraint_m_1:52; RV64I-LARGE:       # %bb.0:53; RV64I-LARGE-NEXT:    #APP54; RV64I-LARGE-NEXT:    #NO_APP55; RV64I-LARGE-NEXT:    ret56  call void asm sideeffect "", "=*m"(ptr elementtype(i32) %a)57  ret void58}59 60define i32 @constraint_m_2(ptr %a) nounwind {61; RV32I-LABEL: constraint_m_2:62; RV32I:       # %bb.0:63; RV32I-NEXT:    #APP64; RV32I-NEXT:    lw a0, 0(a0)65; RV32I-NEXT:    #NO_APP66; RV32I-NEXT:    ret67;68; RV64I-LABEL: constraint_m_2:69; RV64I:       # %bb.0:70; RV64I-NEXT:    #APP71; RV64I-NEXT:    lw a0, 0(a0)72; RV64I-NEXT:    #NO_APP73; RV64I-NEXT:    ret74;75; RV32I-MEDIUM-LABEL: constraint_m_2:76; RV32I-MEDIUM:       # %bb.0:77; RV32I-MEDIUM-NEXT:    #APP78; RV32I-MEDIUM-NEXT:    lw a0, 0(a0)79; RV32I-MEDIUM-NEXT:    #NO_APP80; RV32I-MEDIUM-NEXT:    ret81;82; RV64I-MEDIUM-LABEL: constraint_m_2:83; RV64I-MEDIUM:       # %bb.0:84; RV64I-MEDIUM-NEXT:    #APP85; RV64I-MEDIUM-NEXT:    lw a0, 0(a0)86; RV64I-MEDIUM-NEXT:    #NO_APP87; RV64I-MEDIUM-NEXT:    ret88;89; RV64I-LARGE-LABEL: constraint_m_2:90; RV64I-LARGE:       # %bb.0:91; RV64I-LARGE-NEXT:    #APP92; RV64I-LARGE-NEXT:    lw a0, 0(a0)93; RV64I-LARGE-NEXT:    #NO_APP94; RV64I-LARGE-NEXT:    ret95  %1 = tail call i32 asm "lw $0, $1", "=r,*m"(ptr elementtype(i32) %a)96  ret i32 %197}98 99define i32 @constraint_m_with_offset(ptr %a) nounwind {100; RV32I-LABEL: constraint_m_with_offset:101; RV32I:       # %bb.0:102; RV32I-NEXT:    #APP103; RV32I-NEXT:    lw a0, 4(a0)104; RV32I-NEXT:    #NO_APP105; RV32I-NEXT:    ret106;107; RV64I-LABEL: constraint_m_with_offset:108; RV64I:       # %bb.0:109; RV64I-NEXT:    #APP110; RV64I-NEXT:    lw a0, 4(a0)111; RV64I-NEXT:    #NO_APP112; RV64I-NEXT:    ret113;114; RV32I-MEDIUM-LABEL: constraint_m_with_offset:115; RV32I-MEDIUM:       # %bb.0:116; RV32I-MEDIUM-NEXT:    #APP117; RV32I-MEDIUM-NEXT:    lw a0, 4(a0)118; RV32I-MEDIUM-NEXT:    #NO_APP119; RV32I-MEDIUM-NEXT:    ret120;121; RV64I-MEDIUM-LABEL: constraint_m_with_offset:122; RV64I-MEDIUM:       # %bb.0:123; RV64I-MEDIUM-NEXT:    #APP124; RV64I-MEDIUM-NEXT:    lw a0, 4(a0)125; RV64I-MEDIUM-NEXT:    #NO_APP126; RV64I-MEDIUM-NEXT:    ret127;128; RV64I-LARGE-LABEL: constraint_m_with_offset:129; RV64I-LARGE:       # %bb.0:130; RV64I-LARGE-NEXT:    #APP131; RV64I-LARGE-NEXT:    lw a0, 4(a0)132; RV64I-LARGE-NEXT:    #NO_APP133; RV64I-LARGE-NEXT:    ret134  %1 = getelementptr i32, ptr %a, i32 1135  %2 = tail call i32 asm "lw $0, $1", "=r,*m"(ptr elementtype(i32) %1)136  ret i32 %2137}138 139define void @constraint_m_with_global_1() nounwind {140; RV32I-LABEL: constraint_m_with_global_1:141; RV32I:       # %bb.0:142; RV32I-NEXT:    lui a0, %hi(eg)143; RV32I-NEXT:    #APP144; RV32I-NEXT:    sw zero, %lo(eg)(a0)145; RV32I-NEXT:    #NO_APP146; RV32I-NEXT:    ret147;148; RV64I-LABEL: constraint_m_with_global_1:149; RV64I:       # %bb.0:150; RV64I-NEXT:    lui a0, %hi(eg)151; RV64I-NEXT:    #APP152; RV64I-NEXT:    sw zero, %lo(eg)(a0)153; RV64I-NEXT:    #NO_APP154; RV64I-NEXT:    ret155;156; RV32I-MEDIUM-LABEL: constraint_m_with_global_1:157; RV32I-MEDIUM:       # %bb.0:158; RV32I-MEDIUM-NEXT:  .Lpcrel_hi0:159; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg)160; RV32I-MEDIUM-NEXT:    #APP161; RV32I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi0)(a0)162; RV32I-MEDIUM-NEXT:    #NO_APP163; RV32I-MEDIUM-NEXT:    ret164;165; RV64I-MEDIUM-LABEL: constraint_m_with_global_1:166; RV64I-MEDIUM:       # %bb.0:167; RV64I-MEDIUM-NEXT:  .Lpcrel_hi0:168; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg)169; RV64I-MEDIUM-NEXT:    #APP170; RV64I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi0)(a0)171; RV64I-MEDIUM-NEXT:    #NO_APP172; RV64I-MEDIUM-NEXT:    ret173;174; RV64I-LARGE-LABEL: constraint_m_with_global_1:175; RV64I-LARGE:       # %bb.0:176; RV64I-LARGE-NEXT:  .Lpcrel_hi0:177; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI3_0)178; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi0)(a0)179; RV64I-LARGE-NEXT:    #APP180; RV64I-LARGE-NEXT:    sw zero, 0(a0)181; RV64I-LARGE-NEXT:    #NO_APP182; RV64I-LARGE-NEXT:    ret183  call void asm "sw zero, $0", "=*m"(ptr elementtype(i32) @eg)184  ret void185}186 187define void @constraint_m_with_global_2() nounwind {188; RV32I-LABEL: constraint_m_with_global_2:189; RV32I:       # %bb.0:190; RV32I-NEXT:    lui a0, %hi(eg+4)191; RV32I-NEXT:    #APP192; RV32I-NEXT:    sw zero, %lo(eg+4)(a0)193; RV32I-NEXT:    #NO_APP194; RV32I-NEXT:    ret195;196; RV64I-LABEL: constraint_m_with_global_2:197; RV64I:       # %bb.0:198; RV64I-NEXT:    lui a0, %hi(eg+4)199; RV64I-NEXT:    #APP200; RV64I-NEXT:    sw zero, %lo(eg+4)(a0)201; RV64I-NEXT:    #NO_APP202; RV64I-NEXT:    ret203;204; RV32I-MEDIUM-LABEL: constraint_m_with_global_2:205; RV32I-MEDIUM:       # %bb.0:206; RV32I-MEDIUM-NEXT:  .Lpcrel_hi1:207; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg+4)208; RV32I-MEDIUM-NEXT:    #APP209; RV32I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi1)(a0)210; RV32I-MEDIUM-NEXT:    #NO_APP211; RV32I-MEDIUM-NEXT:    ret212;213; RV64I-MEDIUM-LABEL: constraint_m_with_global_2:214; RV64I-MEDIUM:       # %bb.0:215; RV64I-MEDIUM-NEXT:  .Lpcrel_hi1:216; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg+4)217; RV64I-MEDIUM-NEXT:    #APP218; RV64I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi1)(a0)219; RV64I-MEDIUM-NEXT:    #NO_APP220; RV64I-MEDIUM-NEXT:    ret221;222; RV64I-LARGE-LABEL: constraint_m_with_global_2:223; RV64I-LARGE:       # %bb.0:224; RV64I-LARGE-NEXT:  .Lpcrel_hi1:225; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI4_0)226; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi1)(a0)227; RV64I-LARGE-NEXT:    #APP228; RV64I-LARGE-NEXT:    sw zero, 4(a0)229; RV64I-LARGE-NEXT:    #NO_APP230; RV64I-LARGE-NEXT:    ret231  call void asm "sw zero, $0", "=*m"(ptr elementtype(i32) getelementptr ([400000 x i32], ptr @eg, i32 0, i32 1))232  ret void233}234 235define void @constraint_m_with_global_3() nounwind {236; RV32I-LABEL: constraint_m_with_global_3:237; RV32I:       # %bb.0:238; RV32I-NEXT:    lui a0, %hi(eg+8000)239; RV32I-NEXT:    #APP240; RV32I-NEXT:    sw zero, %lo(eg+8000)(a0)241; RV32I-NEXT:    #NO_APP242; RV32I-NEXT:    ret243;244; RV64I-LABEL: constraint_m_with_global_3:245; RV64I:       # %bb.0:246; RV64I-NEXT:    lui a0, %hi(eg+8000)247; RV64I-NEXT:    #APP248; RV64I-NEXT:    sw zero, %lo(eg+8000)(a0)249; RV64I-NEXT:    #NO_APP250; RV64I-NEXT:    ret251;252; RV32I-MEDIUM-LABEL: constraint_m_with_global_3:253; RV32I-MEDIUM:       # %bb.0:254; RV32I-MEDIUM-NEXT:  .Lpcrel_hi2:255; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg+8000)256; RV32I-MEDIUM-NEXT:    #APP257; RV32I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi2)(a0)258; RV32I-MEDIUM-NEXT:    #NO_APP259; RV32I-MEDIUM-NEXT:    ret260;261; RV64I-MEDIUM-LABEL: constraint_m_with_global_3:262; RV64I-MEDIUM:       # %bb.0:263; RV64I-MEDIUM-NEXT:  .Lpcrel_hi2:264; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg+8000)265; RV64I-MEDIUM-NEXT:    #APP266; RV64I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi2)(a0)267; RV64I-MEDIUM-NEXT:    #NO_APP268; RV64I-MEDIUM-NEXT:    ret269;270; RV64I-LARGE-LABEL: constraint_m_with_global_3:271; RV64I-LARGE:       # %bb.0:272; RV64I-LARGE-NEXT:  .Lpcrel_hi2:273; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI5_0)274; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi2)(a0)275; RV64I-LARGE-NEXT:    lui a1, 2276; RV64I-LARGE-NEXT:    addi a1, a1, -192277; RV64I-LARGE-NEXT:    add a0, a0, a1278; RV64I-LARGE-NEXT:    #APP279; RV64I-LARGE-NEXT:    sw zero, 0(a0)280; RV64I-LARGE-NEXT:    #NO_APP281; RV64I-LARGE-NEXT:    ret282  call void asm "sw zero, $0", "=*m"(ptr elementtype(i32) getelementptr ([400000 x i32], ptr @eg, i32 0, i32 2000))283  ret void284}285 286define void @constraint_m_with_extern_weak_global_1() nounwind {287; RV32I-LABEL: constraint_m_with_extern_weak_global_1:288; RV32I:       # %bb.0:289; RV32I-NEXT:    lui a0, %hi(ewg)290; RV32I-NEXT:    #APP291; RV32I-NEXT:    sw zero, %lo(ewg)(a0)292; RV32I-NEXT:    #NO_APP293; RV32I-NEXT:    ret294;295; RV64I-LABEL: constraint_m_with_extern_weak_global_1:296; RV64I:       # %bb.0:297; RV64I-NEXT:    lui a0, %hi(ewg)298; RV64I-NEXT:    #APP299; RV64I-NEXT:    sw zero, %lo(ewg)(a0)300; RV64I-NEXT:    #NO_APP301; RV64I-NEXT:    ret302;303; RV32I-MEDIUM-LABEL: constraint_m_with_extern_weak_global_1:304; RV32I-MEDIUM:       # %bb.0:305; RV32I-MEDIUM-NEXT:  .Lpcrel_hi3:306; RV32I-MEDIUM-NEXT:    auipc a0, %got_pcrel_hi(ewg)307; RV32I-MEDIUM-NEXT:    lw a0, %pcrel_lo(.Lpcrel_hi3)(a0)308; RV32I-MEDIUM-NEXT:    #APP309; RV32I-MEDIUM-NEXT:    sw zero, 0(a0)310; RV32I-MEDIUM-NEXT:    #NO_APP311; RV32I-MEDIUM-NEXT:    ret312;313; RV64I-MEDIUM-LABEL: constraint_m_with_extern_weak_global_1:314; RV64I-MEDIUM:       # %bb.0:315; RV64I-MEDIUM-NEXT:  .Lpcrel_hi3:316; RV64I-MEDIUM-NEXT:    auipc a0, %got_pcrel_hi(ewg)317; RV64I-MEDIUM-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi3)(a0)318; RV64I-MEDIUM-NEXT:    #APP319; RV64I-MEDIUM-NEXT:    sw zero, 0(a0)320; RV64I-MEDIUM-NEXT:    #NO_APP321; RV64I-MEDIUM-NEXT:    ret322;323; RV64I-LARGE-LABEL: constraint_m_with_extern_weak_global_1:324; RV64I-LARGE:       # %bb.0:325; RV64I-LARGE-NEXT:  .Lpcrel_hi3:326; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI6_0)327; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi3)(a0)328; RV64I-LARGE-NEXT:    #APP329; RV64I-LARGE-NEXT:    sw zero, 0(a0)330; RV64I-LARGE-NEXT:    #NO_APP331; RV64I-LARGE-NEXT:    ret332  call void asm "sw zero, $0", "=*m"(ptr elementtype(i32) @ewg)333  ret void334}335 336define void @constraint_m_with_extern_weak_global_2() nounwind {337; RV32I-LABEL: constraint_m_with_extern_weak_global_2:338; RV32I:       # %bb.0:339; RV32I-NEXT:    lui a0, %hi(ewg+4)340; RV32I-NEXT:    #APP341; RV32I-NEXT:    sw zero, %lo(ewg+4)(a0)342; RV32I-NEXT:    #NO_APP343; RV32I-NEXT:    ret344;345; RV64I-LABEL: constraint_m_with_extern_weak_global_2:346; RV64I:       # %bb.0:347; RV64I-NEXT:    lui a0, %hi(ewg+4)348; RV64I-NEXT:    #APP349; RV64I-NEXT:    sw zero, %lo(ewg+4)(a0)350; RV64I-NEXT:    #NO_APP351; RV64I-NEXT:    ret352;353; RV32I-MEDIUM-LABEL: constraint_m_with_extern_weak_global_2:354; RV32I-MEDIUM:       # %bb.0:355; RV32I-MEDIUM-NEXT:  .Lpcrel_hi4:356; RV32I-MEDIUM-NEXT:    auipc a0, %got_pcrel_hi(ewg)357; RV32I-MEDIUM-NEXT:    lw a0, %pcrel_lo(.Lpcrel_hi4)(a0)358; RV32I-MEDIUM-NEXT:    #APP359; RV32I-MEDIUM-NEXT:    sw zero, 4(a0)360; RV32I-MEDIUM-NEXT:    #NO_APP361; RV32I-MEDIUM-NEXT:    ret362;363; RV64I-MEDIUM-LABEL: constraint_m_with_extern_weak_global_2:364; RV64I-MEDIUM:       # %bb.0:365; RV64I-MEDIUM-NEXT:  .Lpcrel_hi4:366; RV64I-MEDIUM-NEXT:    auipc a0, %got_pcrel_hi(ewg)367; RV64I-MEDIUM-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi4)(a0)368; RV64I-MEDIUM-NEXT:    #APP369; RV64I-MEDIUM-NEXT:    sw zero, 4(a0)370; RV64I-MEDIUM-NEXT:    #NO_APP371; RV64I-MEDIUM-NEXT:    ret372;373; RV64I-LARGE-LABEL: constraint_m_with_extern_weak_global_2:374; RV64I-LARGE:       # %bb.0:375; RV64I-LARGE-NEXT:  .Lpcrel_hi4:376; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI7_0)377; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi4)(a0)378; RV64I-LARGE-NEXT:    #APP379; RV64I-LARGE-NEXT:    sw zero, 4(a0)380; RV64I-LARGE-NEXT:    #NO_APP381; RV64I-LARGE-NEXT:    ret382  call void asm "sw zero, $0", "=*m"(ptr elementtype(i32) getelementptr ([400000 x i32], ptr @ewg, i32 0, i32 1))383  ret void384}385 386define void @constraint_m_with_extern_weak_global_3() nounwind {387; RV32I-LABEL: constraint_m_with_extern_weak_global_3:388; RV32I:       # %bb.0:389; RV32I-NEXT:    lui a0, %hi(ewg+8000)390; RV32I-NEXT:    #APP391; RV32I-NEXT:    sw zero, %lo(ewg+8000)(a0)392; RV32I-NEXT:    #NO_APP393; RV32I-NEXT:    ret394;395; RV64I-LABEL: constraint_m_with_extern_weak_global_3:396; RV64I:       # %bb.0:397; RV64I-NEXT:    lui a0, %hi(ewg+8000)398; RV64I-NEXT:    #APP399; RV64I-NEXT:    sw zero, %lo(ewg+8000)(a0)400; RV64I-NEXT:    #NO_APP401; RV64I-NEXT:    ret402;403; RV32I-MEDIUM-LABEL: constraint_m_with_extern_weak_global_3:404; RV32I-MEDIUM:       # %bb.0:405; RV32I-MEDIUM-NEXT:  .Lpcrel_hi5:406; RV32I-MEDIUM-NEXT:    auipc a0, %got_pcrel_hi(ewg)407; RV32I-MEDIUM-NEXT:    lw a0, %pcrel_lo(.Lpcrel_hi5)(a0)408; RV32I-MEDIUM-NEXT:    lui a1, 2409; RV32I-MEDIUM-NEXT:    addi a1, a1, -192410; RV32I-MEDIUM-NEXT:    add a0, a0, a1411; RV32I-MEDIUM-NEXT:    #APP412; RV32I-MEDIUM-NEXT:    sw zero, 0(a0)413; RV32I-MEDIUM-NEXT:    #NO_APP414; RV32I-MEDIUM-NEXT:    ret415;416; RV64I-MEDIUM-LABEL: constraint_m_with_extern_weak_global_3:417; RV64I-MEDIUM:       # %bb.0:418; RV64I-MEDIUM-NEXT:  .Lpcrel_hi5:419; RV64I-MEDIUM-NEXT:    auipc a0, %got_pcrel_hi(ewg)420; RV64I-MEDIUM-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi5)(a0)421; RV64I-MEDIUM-NEXT:    lui a1, 2422; RV64I-MEDIUM-NEXT:    addi a1, a1, -192423; RV64I-MEDIUM-NEXT:    add a0, a0, a1424; RV64I-MEDIUM-NEXT:    #APP425; RV64I-MEDIUM-NEXT:    sw zero, 0(a0)426; RV64I-MEDIUM-NEXT:    #NO_APP427; RV64I-MEDIUM-NEXT:    ret428;429; RV64I-LARGE-LABEL: constraint_m_with_extern_weak_global_3:430; RV64I-LARGE:       # %bb.0:431; RV64I-LARGE-NEXT:  .Lpcrel_hi5:432; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI8_0)433; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi5)(a0)434; RV64I-LARGE-NEXT:    lui a1, 2435; RV64I-LARGE-NEXT:    addi a1, a1, -192436; RV64I-LARGE-NEXT:    add a0, a0, a1437; RV64I-LARGE-NEXT:    #APP438; RV64I-LARGE-NEXT:    sw zero, 0(a0)439; RV64I-LARGE-NEXT:    #NO_APP440; RV64I-LARGE-NEXT:    ret441  call void asm "sw zero, $0", "=*m"(ptr elementtype(i32) getelementptr ([400000 x i32], ptr @ewg, i32 0, i32 2000))442  ret void443}444 445define void @constraint_m_with_local_1() nounwind {446; RV32I-LABEL: constraint_m_with_local_1:447; RV32I:       # %bb.0: # %entry448; RV32I-NEXT:  .Ltmp0: # Block address taken449; RV32I-NEXT:  # %bb.1: # %label450; RV32I-NEXT:    lui a0, %hi(.Ltmp0)451; RV32I-NEXT:    #APP452; RV32I-NEXT:    lw zero, %lo(.Ltmp0)(a0)453; RV32I-NEXT:    #NO_APP454; RV32I-NEXT:    ret455;456; RV64I-LABEL: constraint_m_with_local_1:457; RV64I:       # %bb.0: # %entry458; RV64I-NEXT:  .Ltmp0: # Block address taken459; RV64I-NEXT:  # %bb.1: # %label460; RV64I-NEXT:    lui a0, %hi(.Ltmp0)461; RV64I-NEXT:    #APP462; RV64I-NEXT:    lw zero, %lo(.Ltmp0)(a0)463; RV64I-NEXT:    #NO_APP464; RV64I-NEXT:    ret465;466; RV32I-MEDIUM-LABEL: constraint_m_with_local_1:467; RV32I-MEDIUM:       # %bb.0: # %entry468; RV32I-MEDIUM-NEXT:  .Ltmp0: # Block address taken469; RV32I-MEDIUM-NEXT:  # %bb.1: # %label470; RV32I-MEDIUM-NEXT:  .Lpcrel_hi6:471; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(.Ltmp0)472; RV32I-MEDIUM-NEXT:    #APP473; RV32I-MEDIUM-NEXT:    lw zero, %pcrel_lo(.Lpcrel_hi6)(a0)474; RV32I-MEDIUM-NEXT:    #NO_APP475; RV32I-MEDIUM-NEXT:    ret476;477; RV64I-MEDIUM-LABEL: constraint_m_with_local_1:478; RV64I-MEDIUM:       # %bb.0: # %entry479; RV64I-MEDIUM-NEXT:  .Ltmp0: # Block address taken480; RV64I-MEDIUM-NEXT:  # %bb.1: # %label481; RV64I-MEDIUM-NEXT:  .Lpcrel_hi6:482; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(.Ltmp0)483; RV64I-MEDIUM-NEXT:    #APP484; RV64I-MEDIUM-NEXT:    lw zero, %pcrel_lo(.Lpcrel_hi6)(a0)485; RV64I-MEDIUM-NEXT:    #NO_APP486; RV64I-MEDIUM-NEXT:    ret487;488; RV64I-LARGE-LABEL: constraint_m_with_local_1:489; RV64I-LARGE:       # %bb.0: # %entry490; RV64I-LARGE-NEXT:  .Ltmp0: # Block address taken491; RV64I-LARGE-NEXT:  # %bb.1: # %label492; RV64I-LARGE-NEXT:  .Lpcrel_hi6:493; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.Ltmp0)494; RV64I-LARGE-NEXT:    #APP495; RV64I-LARGE-NEXT:    lw zero, %pcrel_lo(.Lpcrel_hi6)(a0)496; RV64I-LARGE-NEXT:    #NO_APP497; RV64I-LARGE-NEXT:    ret498entry:499  br label %label500 501label:502  tail call void asm sideeffect "lw zero, $0", "*m"(ptr elementtype(ptr) blockaddress(@constraint_m_with_local_1, %label))503  ret void504}505 506define void @constraint_m_with_local_2() nounwind {507; RV32I-LABEL: constraint_m_with_local_2:508; RV32I:       # %bb.0: # %entry509; RV32I-NEXT:  .Ltmp1: # Block address taken510; RV32I-NEXT:  # %bb.1: # %label511; RV32I-NEXT:    lui a0, %hi(.Ltmp1+4)512; RV32I-NEXT:    #APP513; RV32I-NEXT:    lw zero, %lo(.Ltmp1+4)(a0)514; RV32I-NEXT:    #NO_APP515; RV32I-NEXT:    ret516;517; RV64I-LABEL: constraint_m_with_local_2:518; RV64I:       # %bb.0: # %entry519; RV64I-NEXT:  .Ltmp1: # Block address taken520; RV64I-NEXT:  # %bb.1: # %label521; RV64I-NEXT:    lui a0, %hi(.Ltmp1+4)522; RV64I-NEXT:    #APP523; RV64I-NEXT:    lw zero, %lo(.Ltmp1+4)(a0)524; RV64I-NEXT:    #NO_APP525; RV64I-NEXT:    ret526;527; RV32I-MEDIUM-LABEL: constraint_m_with_local_2:528; RV32I-MEDIUM:       # %bb.0: # %entry529; RV32I-MEDIUM-NEXT:  .Ltmp1: # Block address taken530; RV32I-MEDIUM-NEXT:  # %bb.1: # %label531; RV32I-MEDIUM-NEXT:  .Lpcrel_hi7:532; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(.Ltmp1+4)533; RV32I-MEDIUM-NEXT:    #APP534; RV32I-MEDIUM-NEXT:    lw zero, %pcrel_lo(.Lpcrel_hi7)(a0)535; RV32I-MEDIUM-NEXT:    #NO_APP536; RV32I-MEDIUM-NEXT:    ret537;538; RV64I-MEDIUM-LABEL: constraint_m_with_local_2:539; RV64I-MEDIUM:       # %bb.0: # %entry540; RV64I-MEDIUM-NEXT:  .Ltmp1: # Block address taken541; RV64I-MEDIUM-NEXT:  # %bb.1: # %label542; RV64I-MEDIUM-NEXT:  .Lpcrel_hi7:543; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(.Ltmp1+4)544; RV64I-MEDIUM-NEXT:    #APP545; RV64I-MEDIUM-NEXT:    lw zero, %pcrel_lo(.Lpcrel_hi7)(a0)546; RV64I-MEDIUM-NEXT:    #NO_APP547; RV64I-MEDIUM-NEXT:    ret548;549; RV64I-LARGE-LABEL: constraint_m_with_local_2:550; RV64I-LARGE:       # %bb.0: # %entry551; RV64I-LARGE-NEXT:  .Ltmp1: # Block address taken552; RV64I-LARGE-NEXT:  # %bb.1: # %label553; RV64I-LARGE-NEXT:  .Lpcrel_hi7:554; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.Ltmp1+4)555; RV64I-LARGE-NEXT:    #APP556; RV64I-LARGE-NEXT:    lw zero, %pcrel_lo(.Lpcrel_hi7)(a0)557; RV64I-LARGE-NEXT:    #NO_APP558; RV64I-LARGE-NEXT:    ret559entry:560  br label %label561 562label:563  call void asm "lw zero, $0", "*m"(ptr elementtype(i32) getelementptr (i8, ptr blockaddress(@constraint_m_with_local_2, %label), i32 4))564  ret void565}566 567define void @constraint_m_with_local_3() nounwind {568; RV32I-LABEL: constraint_m_with_local_3:569; RV32I:       # %bb.0: # %entry570; RV32I-NEXT:  .Ltmp2: # Block address taken571; RV32I-NEXT:  # %bb.1: # %label572; RV32I-NEXT:    lui a0, %hi(.Ltmp2+2000)573; RV32I-NEXT:    #APP574; RV32I-NEXT:    lw zero, %lo(.Ltmp2+2000)(a0)575; RV32I-NEXT:    #NO_APP576; RV32I-NEXT:    ret577;578; RV64I-LABEL: constraint_m_with_local_3:579; RV64I:       # %bb.0: # %entry580; RV64I-NEXT:  .Ltmp2: # Block address taken581; RV64I-NEXT:  # %bb.1: # %label582; RV64I-NEXT:    lui a0, %hi(.Ltmp2+2000)583; RV64I-NEXT:    #APP584; RV64I-NEXT:    lw zero, %lo(.Ltmp2+2000)(a0)585; RV64I-NEXT:    #NO_APP586; RV64I-NEXT:    ret587;588; RV32I-MEDIUM-LABEL: constraint_m_with_local_3:589; RV32I-MEDIUM:       # %bb.0: # %entry590; RV32I-MEDIUM-NEXT:  .Ltmp2: # Block address taken591; RV32I-MEDIUM-NEXT:  # %bb.1: # %label592; RV32I-MEDIUM-NEXT:  .Lpcrel_hi8:593; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(.Ltmp2+2000)594; RV32I-MEDIUM-NEXT:    #APP595; RV32I-MEDIUM-NEXT:    lw zero, %pcrel_lo(.Lpcrel_hi8)(a0)596; RV32I-MEDIUM-NEXT:    #NO_APP597; RV32I-MEDIUM-NEXT:    ret598;599; RV64I-MEDIUM-LABEL: constraint_m_with_local_3:600; RV64I-MEDIUM:       # %bb.0: # %entry601; RV64I-MEDIUM-NEXT:  .Ltmp2: # Block address taken602; RV64I-MEDIUM-NEXT:  # %bb.1: # %label603; RV64I-MEDIUM-NEXT:  .Lpcrel_hi8:604; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(.Ltmp2+2000)605; RV64I-MEDIUM-NEXT:    #APP606; RV64I-MEDIUM-NEXT:    lw zero, %pcrel_lo(.Lpcrel_hi8)(a0)607; RV64I-MEDIUM-NEXT:    #NO_APP608; RV64I-MEDIUM-NEXT:    ret609;610; RV64I-LARGE-LABEL: constraint_m_with_local_3:611; RV64I-LARGE:       # %bb.0: # %entry612; RV64I-LARGE-NEXT:  .Ltmp2: # Block address taken613; RV64I-LARGE-NEXT:  # %bb.1: # %label614; RV64I-LARGE-NEXT:  .Lpcrel_hi8:615; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.Ltmp2+2000)616; RV64I-LARGE-NEXT:    #APP617; RV64I-LARGE-NEXT:    lw zero, %pcrel_lo(.Lpcrel_hi8)(a0)618; RV64I-LARGE-NEXT:    #NO_APP619; RV64I-LARGE-NEXT:    ret620entry:621  br label %label622 623label:624  call void asm "lw zero, $0", "*m"(ptr elementtype(i32) getelementptr (i8, ptr blockaddress(@constraint_m_with_local_3, %label), i32 2000))625  ret void626}627 628define void @constraint_m_with_multi_operands() nounwind {629; RV32I-NO-INTEGRATED-LABEL: constraint_m_with_multi_operands:630; RV32I-NO-INTEGRATED:       # %bb.0:631; RV32I-NO-INTEGRATED-NEXT:    lui a0, %hi(eg)632; RV32I-NO-INTEGRATED-NEXT:    #APP633; RV32I-NO-INTEGRATED-NEXT:    sw zero, %lo(eg)(a0); sw zero, %lo(eg)(a0)634; RV32I-NO-INTEGRATED-NEXT:    #NO_APP635; RV32I-NO-INTEGRATED-NEXT:    ret636;637; RV64I-NO-INTEGRATED-LABEL: constraint_m_with_multi_operands:638; RV64I-NO-INTEGRATED:       # %bb.0:639; RV64I-NO-INTEGRATED-NEXT:    lui a0, %hi(eg)640; RV64I-NO-INTEGRATED-NEXT:    #APP641; RV64I-NO-INTEGRATED-NEXT:    sw zero, %lo(eg)(a0); sw zero, %lo(eg)(a0)642; RV64I-NO-INTEGRATED-NEXT:    #NO_APP643; RV64I-NO-INTEGRATED-NEXT:    ret644;645; RV32I-MEDIUM-NO-INTEGRATED-LABEL: constraint_m_with_multi_operands:646; RV32I-MEDIUM-NO-INTEGRATED:       # %bb.0:647; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  .Lpcrel_hi9:648; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    auipc a0, %pcrel_hi(eg)649; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #APP650; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi9)(a0); sw zero, %pcrel_lo(.Lpcrel_hi9)(a0)651; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP652; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    ret653;654; RV64I-MEDIUM-NO-INTEGRATED-LABEL: constraint_m_with_multi_operands:655; RV64I-MEDIUM-NO-INTEGRATED:       # %bb.0:656; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  .Lpcrel_hi9:657; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    auipc a0, %pcrel_hi(eg)658; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #APP659; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi9)(a0); sw zero, %pcrel_lo(.Lpcrel_hi9)(a0)660; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP661; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    ret662;663; RV64I-LARGE-NO-INTEGRATED-LABEL: constraint_m_with_multi_operands:664; RV64I-LARGE-NO-INTEGRATED:       # %bb.0:665; RV64I-LARGE-NO-INTEGRATED-NEXT:  .Lpcrel_hi9:666; RV64I-LARGE-NO-INTEGRATED-NEXT:    auipc a0, %pcrel_hi(.LCPI12_0)667; RV64I-LARGE-NO-INTEGRATED-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi9)(a0)668; RV64I-LARGE-NO-INTEGRATED-NEXT:    #APP669; RV64I-LARGE-NO-INTEGRATED-NEXT:    sw zero, 0(a0); sw zero, 0(a0)670; RV64I-LARGE-NO-INTEGRATED-NEXT:    #NO_APP671; RV64I-LARGE-NO-INTEGRATED-NEXT:    ret672;673; RV32I-INTEGRATED-LABEL: constraint_m_with_multi_operands:674; RV32I-INTEGRATED:       # %bb.0:675; RV32I-INTEGRATED-NEXT:    lui a0, %hi(eg)676; RV32I-INTEGRATED-NEXT:    #APP677; RV32I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a0)678; RV32I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a0)679; RV32I-INTEGRATED-NEXT:    #NO_APP680; RV32I-INTEGRATED-NEXT:    ret681;682; RV64I-INTEGRATED-LABEL: constraint_m_with_multi_operands:683; RV64I-INTEGRATED:       # %bb.0:684; RV64I-INTEGRATED-NEXT:    lui a0, %hi(eg)685; RV64I-INTEGRATED-NEXT:    #APP686; RV64I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a0)687; RV64I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a0)688; RV64I-INTEGRATED-NEXT:    #NO_APP689; RV64I-INTEGRATED-NEXT:    ret690;691; RV32I-MEDIUM-INTEGRATED-LABEL: constraint_m_with_multi_operands:692; RV32I-MEDIUM-INTEGRATED:       # %bb.0:693; RV32I-MEDIUM-INTEGRATED-NEXT:  .Lpcrel_hi9:694; RV32I-MEDIUM-INTEGRATED-NEXT:    auipc a0, %pcrel_hi(eg)695; RV32I-MEDIUM-INTEGRATED-NEXT:    #APP696; RV32I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi9)(a0)697; RV32I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi9)(a0)698; RV32I-MEDIUM-INTEGRATED-NEXT:    #NO_APP699; RV32I-MEDIUM-INTEGRATED-NEXT:    ret700;701; RV64I-MEDIUM-INTEGRATED-LABEL: constraint_m_with_multi_operands:702; RV64I-MEDIUM-INTEGRATED:       # %bb.0:703; RV64I-MEDIUM-INTEGRATED-NEXT:  .Lpcrel_hi9:704; RV64I-MEDIUM-INTEGRATED-NEXT:    auipc a0, %pcrel_hi(eg)705; RV64I-MEDIUM-INTEGRATED-NEXT:    #APP706; RV64I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi9)(a0)707; RV64I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi9)(a0)708; RV64I-MEDIUM-INTEGRATED-NEXT:    #NO_APP709; RV64I-MEDIUM-INTEGRATED-NEXT:    ret710;711; RV64I-LARGE-INTEGRATED-LABEL: constraint_m_with_multi_operands:712; RV64I-LARGE-INTEGRATED:       # %bb.0:713; RV64I-LARGE-INTEGRATED-NEXT:  .Lpcrel_hi9:714; RV64I-LARGE-INTEGRATED-NEXT:    auipc a0, %pcrel_hi(.LCPI12_0)715; RV64I-LARGE-INTEGRATED-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi9)(a0)716; RV64I-LARGE-INTEGRATED-NEXT:    #APP717; RV64I-LARGE-INTEGRATED-NEXT:    sw zero, 0(a0)718; RV64I-LARGE-INTEGRATED-NEXT:    sw zero, 0(a0)719; RV64I-LARGE-INTEGRATED-NEXT:    #NO_APP720; RV64I-LARGE-INTEGRATED-NEXT:    ret721  call void asm "sw zero, $0; sw zero, $1", "=*m,=*m"(ptr elementtype(i32) @eg, ptr elementtype(i32) @eg)722  ret void723}724 725define void @constraint_m_with_multi_asm() nounwind {726; RV32I-LABEL: constraint_m_with_multi_asm:727; RV32I:       # %bb.0:728; RV32I-NEXT:    lui a0, %hi(eg)729; RV32I-NEXT:    #APP730; RV32I-NEXT:    sw zero, %lo(eg)(a0)731; RV32I-NEXT:    #NO_APP732; RV32I-NEXT:    #APP733; RV32I-NEXT:    sw zero, %lo(eg)(a0)734; RV32I-NEXT:    #NO_APP735; RV32I-NEXT:    ret736;737; RV64I-LABEL: constraint_m_with_multi_asm:738; RV64I:       # %bb.0:739; RV64I-NEXT:    lui a0, %hi(eg)740; RV64I-NEXT:    #APP741; RV64I-NEXT:    sw zero, %lo(eg)(a0)742; RV64I-NEXT:    #NO_APP743; RV64I-NEXT:    #APP744; RV64I-NEXT:    sw zero, %lo(eg)(a0)745; RV64I-NEXT:    #NO_APP746; RV64I-NEXT:    ret747;748; RV32I-MEDIUM-LABEL: constraint_m_with_multi_asm:749; RV32I-MEDIUM:       # %bb.0:750; RV32I-MEDIUM-NEXT:  .Lpcrel_hi10:751; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg)752; RV32I-MEDIUM-NEXT:    #APP753; RV32I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi10)(a0)754; RV32I-MEDIUM-NEXT:    #NO_APP755; RV32I-MEDIUM-NEXT:    #APP756; RV32I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi10)(a0)757; RV32I-MEDIUM-NEXT:    #NO_APP758; RV32I-MEDIUM-NEXT:    ret759;760; RV64I-MEDIUM-LABEL: constraint_m_with_multi_asm:761; RV64I-MEDIUM:       # %bb.0:762; RV64I-MEDIUM-NEXT:  .Lpcrel_hi10:763; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg)764; RV64I-MEDIUM-NEXT:    #APP765; RV64I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi10)(a0)766; RV64I-MEDIUM-NEXT:    #NO_APP767; RV64I-MEDIUM-NEXT:    #APP768; RV64I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi10)(a0)769; RV64I-MEDIUM-NEXT:    #NO_APP770; RV64I-MEDIUM-NEXT:    ret771;772; RV64I-LARGE-LABEL: constraint_m_with_multi_asm:773; RV64I-LARGE:       # %bb.0:774; RV64I-LARGE-NEXT:  .Lpcrel_hi10:775; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI13_0)776; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi10)(a0)777; RV64I-LARGE-NEXT:    #APP778; RV64I-LARGE-NEXT:    sw zero, 0(a0)779; RV64I-LARGE-NEXT:    #NO_APP780; RV64I-LARGE-NEXT:    #APP781; RV64I-LARGE-NEXT:    sw zero, 0(a0)782; RV64I-LARGE-NEXT:    #NO_APP783; RV64I-LARGE-NEXT:    ret784  call void asm "sw zero, $0", "=*m"(ptr elementtype(i32) @eg)785  call void asm "sw zero, $0", "=*m"(ptr elementtype(i32) @eg)786  ret void787}788 789define i32 @constraint_m_with_callbr_multi_operands(i32 %a) {790; RV32I-NO-INTEGRATED-LABEL: constraint_m_with_callbr_multi_operands:791; RV32I-NO-INTEGRATED:       # %bb.0: # %entry792; RV32I-NO-INTEGRATED-NEXT:    lui a1, %hi(eg)793; RV32I-NO-INTEGRATED-NEXT:    #APP794; RV32I-NO-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1); sw zero, %lo(eg)(a1); beqz a0, .LBB14_2795; RV32I-NO-INTEGRATED-NEXT:    #NO_APP796; RV32I-NO-INTEGRATED-NEXT:  # %bb.1: # %normal797; RV32I-NO-INTEGRATED-NEXT:    li a0, 0798; RV32I-NO-INTEGRATED-NEXT:    ret799; RV32I-NO-INTEGRATED-NEXT:  .LBB14_2: # Inline asm indirect target800; RV32I-NO-INTEGRATED-NEXT:    # %fail801; RV32I-NO-INTEGRATED-NEXT:    # Label of block must be emitted802; RV32I-NO-INTEGRATED-NEXT:    li a0, 1803; RV32I-NO-INTEGRATED-NEXT:    ret804;805; RV64I-NO-INTEGRATED-LABEL: constraint_m_with_callbr_multi_operands:806; RV64I-NO-INTEGRATED:       # %bb.0: # %entry807; RV64I-NO-INTEGRATED-NEXT:    lui a1, %hi(eg)808; RV64I-NO-INTEGRATED-NEXT:    #APP809; RV64I-NO-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1); sw zero, %lo(eg)(a1); beqz a0, .LBB14_2810; RV64I-NO-INTEGRATED-NEXT:    #NO_APP811; RV64I-NO-INTEGRATED-NEXT:  # %bb.1: # %normal812; RV64I-NO-INTEGRATED-NEXT:    li a0, 0813; RV64I-NO-INTEGRATED-NEXT:    ret814; RV64I-NO-INTEGRATED-NEXT:  .LBB14_2: # Inline asm indirect target815; RV64I-NO-INTEGRATED-NEXT:    # %fail816; RV64I-NO-INTEGRATED-NEXT:    # Label of block must be emitted817; RV64I-NO-INTEGRATED-NEXT:    li a0, 1818; RV64I-NO-INTEGRATED-NEXT:    ret819;820; RV32I-MEDIUM-NO-INTEGRATED-LABEL: constraint_m_with_callbr_multi_operands:821; RV32I-MEDIUM-NO-INTEGRATED:       # %bb.0: # %entry822; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  .Lpcrel_hi11:823; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)824; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #APP825; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi11)(a1); sw zero, %pcrel_lo(.Lpcrel_hi11)(a1); beqz a0, .LBB14_2826; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP827; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  # %bb.1: # %normal828; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 0829; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    ret830; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  .LBB14_2: # Inline asm indirect target831; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    # %fail832; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    # Label of block must be emitted833; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 1834; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    ret835;836; RV64I-MEDIUM-NO-INTEGRATED-LABEL: constraint_m_with_callbr_multi_operands:837; RV64I-MEDIUM-NO-INTEGRATED:       # %bb.0: # %entry838; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  .Lpcrel_hi11:839; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)840; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #APP841; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi11)(a1); sw zero, %pcrel_lo(.Lpcrel_hi11)(a1); beqz a0, .LBB14_2842; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP843; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  # %bb.1: # %normal844; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 0845; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    ret846; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  .LBB14_2: # Inline asm indirect target847; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    # %fail848; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    # Label of block must be emitted849; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 1850; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    ret851;852; RV64I-LARGE-NO-INTEGRATED-LABEL: constraint_m_with_callbr_multi_operands:853; RV64I-LARGE-NO-INTEGRATED:       # %bb.0: # %entry854; RV64I-LARGE-NO-INTEGRATED-NEXT:  .Lpcrel_hi11:855; RV64I-LARGE-NO-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(.LCPI14_0)856; RV64I-LARGE-NO-INTEGRATED-NEXT:    ld a1, %pcrel_lo(.Lpcrel_hi11)(a1)857; RV64I-LARGE-NO-INTEGRATED-NEXT:    #APP858; RV64I-LARGE-NO-INTEGRATED-NEXT:    sw zero, 0(a1); sw zero, 0(a1); beqz a0, .LBB14_2859; RV64I-LARGE-NO-INTEGRATED-NEXT:    #NO_APP860; RV64I-LARGE-NO-INTEGRATED-NEXT:  # %bb.1: # %normal861; RV64I-LARGE-NO-INTEGRATED-NEXT:    li a0, 0862; RV64I-LARGE-NO-INTEGRATED-NEXT:    ret863; RV64I-LARGE-NO-INTEGRATED-NEXT:  .LBB14_2: # Inline asm indirect target864; RV64I-LARGE-NO-INTEGRATED-NEXT:    # %fail865; RV64I-LARGE-NO-INTEGRATED-NEXT:    # Label of block must be emitted866; RV64I-LARGE-NO-INTEGRATED-NEXT:    li a0, 1867; RV64I-LARGE-NO-INTEGRATED-NEXT:    ret868;869; RV32I-INTEGRATED-LABEL: constraint_m_with_callbr_multi_operands:870; RV32I-INTEGRATED:       # %bb.0: # %entry871; RV32I-INTEGRATED-NEXT:    lui a1, %hi(eg)872; RV32I-INTEGRATED-NEXT:    #APP873; RV32I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1)874; RV32I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1)875; RV32I-INTEGRATED-NEXT:    beqz a0, .LBB14_2876; RV32I-INTEGRATED-NEXT:    #NO_APP877; RV32I-INTEGRATED-NEXT:  # %bb.1: # %normal878; RV32I-INTEGRATED-NEXT:    li a0, 0879; RV32I-INTEGRATED-NEXT:    ret880; RV32I-INTEGRATED-NEXT:  .LBB14_2: # Inline asm indirect target881; RV32I-INTEGRATED-NEXT:    # %fail882; RV32I-INTEGRATED-NEXT:    # Label of block must be emitted883; RV32I-INTEGRATED-NEXT:    li a0, 1884; RV32I-INTEGRATED-NEXT:    ret885;886; RV64I-INTEGRATED-LABEL: constraint_m_with_callbr_multi_operands:887; RV64I-INTEGRATED:       # %bb.0: # %entry888; RV64I-INTEGRATED-NEXT:    lui a1, %hi(eg)889; RV64I-INTEGRATED-NEXT:    #APP890; RV64I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1)891; RV64I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1)892; RV64I-INTEGRATED-NEXT:    beqz a0, .LBB14_2893; RV64I-INTEGRATED-NEXT:    #NO_APP894; RV64I-INTEGRATED-NEXT:  # %bb.1: # %normal895; RV64I-INTEGRATED-NEXT:    li a0, 0896; RV64I-INTEGRATED-NEXT:    ret897; RV64I-INTEGRATED-NEXT:  .LBB14_2: # Inline asm indirect target898; RV64I-INTEGRATED-NEXT:    # %fail899; RV64I-INTEGRATED-NEXT:    # Label of block must be emitted900; RV64I-INTEGRATED-NEXT:    li a0, 1901; RV64I-INTEGRATED-NEXT:    ret902;903; RV32I-MEDIUM-INTEGRATED-LABEL: constraint_m_with_callbr_multi_operands:904; RV32I-MEDIUM-INTEGRATED:       # %bb.0: # %entry905; RV32I-MEDIUM-INTEGRATED-NEXT:  .Lpcrel_hi11:906; RV32I-MEDIUM-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)907; RV32I-MEDIUM-INTEGRATED-NEXT:    #APP908; RV32I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi11)(a1)909; RV32I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi11)(a1)910; RV32I-MEDIUM-INTEGRATED-NEXT:    beqz a0, .LBB14_2911; RV32I-MEDIUM-INTEGRATED-NEXT:    #NO_APP912; RV32I-MEDIUM-INTEGRATED-NEXT:  # %bb.1: # %normal913; RV32I-MEDIUM-INTEGRATED-NEXT:    li a0, 0914; RV32I-MEDIUM-INTEGRATED-NEXT:    ret915; RV32I-MEDIUM-INTEGRATED-NEXT:  .LBB14_2: # Inline asm indirect target916; RV32I-MEDIUM-INTEGRATED-NEXT:    # %fail917; RV32I-MEDIUM-INTEGRATED-NEXT:    # Label of block must be emitted918; RV32I-MEDIUM-INTEGRATED-NEXT:    li a0, 1919; RV32I-MEDIUM-INTEGRATED-NEXT:    ret920;921; RV64I-MEDIUM-INTEGRATED-LABEL: constraint_m_with_callbr_multi_operands:922; RV64I-MEDIUM-INTEGRATED:       # %bb.0: # %entry923; RV64I-MEDIUM-INTEGRATED-NEXT:  .Lpcrel_hi11:924; RV64I-MEDIUM-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)925; RV64I-MEDIUM-INTEGRATED-NEXT:    #APP926; RV64I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi11)(a1)927; RV64I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi11)(a1)928; RV64I-MEDIUM-INTEGRATED-NEXT:    beqz a0, .LBB14_2929; RV64I-MEDIUM-INTEGRATED-NEXT:    #NO_APP930; RV64I-MEDIUM-INTEGRATED-NEXT:  # %bb.1: # %normal931; RV64I-MEDIUM-INTEGRATED-NEXT:    li a0, 0932; RV64I-MEDIUM-INTEGRATED-NEXT:    ret933; RV64I-MEDIUM-INTEGRATED-NEXT:  .LBB14_2: # Inline asm indirect target934; RV64I-MEDIUM-INTEGRATED-NEXT:    # %fail935; RV64I-MEDIUM-INTEGRATED-NEXT:    # Label of block must be emitted936; RV64I-MEDIUM-INTEGRATED-NEXT:    li a0, 1937; RV64I-MEDIUM-INTEGRATED-NEXT:    ret938;939; RV64I-LARGE-INTEGRATED-LABEL: constraint_m_with_callbr_multi_operands:940; RV64I-LARGE-INTEGRATED:       # %bb.0: # %entry941; RV64I-LARGE-INTEGRATED-NEXT:  .Lpcrel_hi11:942; RV64I-LARGE-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(.LCPI14_0)943; RV64I-LARGE-INTEGRATED-NEXT:    ld a1, %pcrel_lo(.Lpcrel_hi11)(a1)944; RV64I-LARGE-INTEGRATED-NEXT:    #APP945; RV64I-LARGE-INTEGRATED-NEXT:    sw zero, 0(a1)946; RV64I-LARGE-INTEGRATED-NEXT:    sw zero, 0(a1)947; RV64I-LARGE-INTEGRATED-NEXT:    beqz a0, .LBB14_2948; RV64I-LARGE-INTEGRATED-NEXT:    #NO_APP949; RV64I-LARGE-INTEGRATED-NEXT:  # %bb.1: # %normal950; RV64I-LARGE-INTEGRATED-NEXT:    li a0, 0951; RV64I-LARGE-INTEGRATED-NEXT:    ret952; RV64I-LARGE-INTEGRATED-NEXT:  .LBB14_2: # Inline asm indirect target953; RV64I-LARGE-INTEGRATED-NEXT:    # %fail954; RV64I-LARGE-INTEGRATED-NEXT:    # Label of block must be emitted955; RV64I-LARGE-INTEGRATED-NEXT:    li a0, 1956; RV64I-LARGE-INTEGRATED-NEXT:    ret957entry:958  callbr void asm "sw zero, $0; sw zero, $1; beqz $2, $3", "=*m,=*m,r,!i"(ptr elementtype(i32) @eg, ptr elementtype(i32) @eg, i32 %a) to label %normal [label %fail]959 960normal:961  ret i32 0962 963fail:964  ret i32 1965}966 967define i32 @constraint_m_with_multi_callbr_asm(i32 %a) {968; RV32I-NO-INTEGRATED-LABEL: constraint_m_with_multi_callbr_asm:969; RV32I-NO-INTEGRATED:       # %bb.0: # %entry970; RV32I-NO-INTEGRATED-NEXT:    lui a1, %hi(eg)971; RV32I-NO-INTEGRATED-NEXT:    #APP972; RV32I-NO-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1); beqz a0, .LBB15_3973; RV32I-NO-INTEGRATED-NEXT:    #NO_APP974; RV32I-NO-INTEGRATED-NEXT:  # %bb.1: # %normal0975; RV32I-NO-INTEGRATED-NEXT:    #APP976; RV32I-NO-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1); beqz a0, .LBB15_3977; RV32I-NO-INTEGRATED-NEXT:    #NO_APP978; RV32I-NO-INTEGRATED-NEXT:  # %bb.2: # %normal1979; RV32I-NO-INTEGRATED-NEXT:    li a0, 0980; RV32I-NO-INTEGRATED-NEXT:    ret981; RV32I-NO-INTEGRATED-NEXT:  .LBB15_3: # Inline asm indirect target982; RV32I-NO-INTEGRATED-NEXT:    # %fail983; RV32I-NO-INTEGRATED-NEXT:    # Label of block must be emitted984; RV32I-NO-INTEGRATED-NEXT:    li a0, 1985; RV32I-NO-INTEGRATED-NEXT:    ret986;987; RV64I-NO-INTEGRATED-LABEL: constraint_m_with_multi_callbr_asm:988; RV64I-NO-INTEGRATED:       # %bb.0: # %entry989; RV64I-NO-INTEGRATED-NEXT:    lui a1, %hi(eg)990; RV64I-NO-INTEGRATED-NEXT:    #APP991; RV64I-NO-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1); beqz a0, .LBB15_3992; RV64I-NO-INTEGRATED-NEXT:    #NO_APP993; RV64I-NO-INTEGRATED-NEXT:  # %bb.1: # %normal0994; RV64I-NO-INTEGRATED-NEXT:    #APP995; RV64I-NO-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1); beqz a0, .LBB15_3996; RV64I-NO-INTEGRATED-NEXT:    #NO_APP997; RV64I-NO-INTEGRATED-NEXT:  # %bb.2: # %normal1998; RV64I-NO-INTEGRATED-NEXT:    li a0, 0999; RV64I-NO-INTEGRATED-NEXT:    ret1000; RV64I-NO-INTEGRATED-NEXT:  .LBB15_3: # Inline asm indirect target1001; RV64I-NO-INTEGRATED-NEXT:    # %fail1002; RV64I-NO-INTEGRATED-NEXT:    # Label of block must be emitted1003; RV64I-NO-INTEGRATED-NEXT:    li a0, 11004; RV64I-NO-INTEGRATED-NEXT:    ret1005;1006; RV32I-MEDIUM-NO-INTEGRATED-LABEL: constraint_m_with_multi_callbr_asm:1007; RV32I-MEDIUM-NO-INTEGRATED:       # %bb.0: # %entry1008; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  .Lpcrel_hi12:1009; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)1010; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #APP1011; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi12)(a1); beqz a0, .LBB15_31012; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP1013; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  # %bb.1: # %normal01014; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #APP1015; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi12)(a1); beqz a0, .LBB15_31016; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP1017; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  # %bb.2: # %normal11018; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 01019; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    ret1020; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  .LBB15_3: # Inline asm indirect target1021; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    # %fail1022; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    # Label of block must be emitted1023; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 11024; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    ret1025;1026; RV64I-MEDIUM-NO-INTEGRATED-LABEL: constraint_m_with_multi_callbr_asm:1027; RV64I-MEDIUM-NO-INTEGRATED:       # %bb.0: # %entry1028; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  .Lpcrel_hi12:1029; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)1030; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #APP1031; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi12)(a1); beqz a0, .LBB15_31032; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP1033; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  # %bb.1: # %normal01034; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #APP1035; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi12)(a1); beqz a0, .LBB15_31036; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP1037; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  # %bb.2: # %normal11038; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 01039; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    ret1040; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  .LBB15_3: # Inline asm indirect target1041; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    # %fail1042; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    # Label of block must be emitted1043; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 11044; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    ret1045;1046; RV64I-LARGE-NO-INTEGRATED-LABEL: constraint_m_with_multi_callbr_asm:1047; RV64I-LARGE-NO-INTEGRATED:       # %bb.0: # %entry1048; RV64I-LARGE-NO-INTEGRATED-NEXT:  .Lpcrel_hi12:1049; RV64I-LARGE-NO-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(.LCPI15_0)1050; RV64I-LARGE-NO-INTEGRATED-NEXT:    ld a1, %pcrel_lo(.Lpcrel_hi12)(a1)1051; RV64I-LARGE-NO-INTEGRATED-NEXT:    #APP1052; RV64I-LARGE-NO-INTEGRATED-NEXT:    sw zero, 0(a1); beqz a0, .LBB15_31053; RV64I-LARGE-NO-INTEGRATED-NEXT:    #NO_APP1054; RV64I-LARGE-NO-INTEGRATED-NEXT:  # %bb.1: # %normal01055; RV64I-LARGE-NO-INTEGRATED-NEXT:    #APP1056; RV64I-LARGE-NO-INTEGRATED-NEXT:    sw zero, 0(a1); beqz a0, .LBB15_31057; RV64I-LARGE-NO-INTEGRATED-NEXT:    #NO_APP1058; RV64I-LARGE-NO-INTEGRATED-NEXT:  # %bb.2: # %normal11059; RV64I-LARGE-NO-INTEGRATED-NEXT:    li a0, 01060; RV64I-LARGE-NO-INTEGRATED-NEXT:    ret1061; RV64I-LARGE-NO-INTEGRATED-NEXT:  .LBB15_3: # Inline asm indirect target1062; RV64I-LARGE-NO-INTEGRATED-NEXT:    # %fail1063; RV64I-LARGE-NO-INTEGRATED-NEXT:    # Label of block must be emitted1064; RV64I-LARGE-NO-INTEGRATED-NEXT:    li a0, 11065; RV64I-LARGE-NO-INTEGRATED-NEXT:    ret1066;1067; RV32I-INTEGRATED-LABEL: constraint_m_with_multi_callbr_asm:1068; RV32I-INTEGRATED:       # %bb.0: # %entry1069; RV32I-INTEGRATED-NEXT:    lui a1, %hi(eg)1070; RV32I-INTEGRATED-NEXT:    #APP1071; RV32I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1)1072; RV32I-INTEGRATED-NEXT:    beqz a0, .LBB15_31073; RV32I-INTEGRATED-NEXT:    #NO_APP1074; RV32I-INTEGRATED-NEXT:  # %bb.1: # %normal01075; RV32I-INTEGRATED-NEXT:    #APP1076; RV32I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1)1077; RV32I-INTEGRATED-NEXT:    beqz a0, .LBB15_31078; RV32I-INTEGRATED-NEXT:    #NO_APP1079; RV32I-INTEGRATED-NEXT:  # %bb.2: # %normal11080; RV32I-INTEGRATED-NEXT:    li a0, 01081; RV32I-INTEGRATED-NEXT:    ret1082; RV32I-INTEGRATED-NEXT:  .LBB15_3: # Inline asm indirect target1083; RV32I-INTEGRATED-NEXT:    # %fail1084; RV32I-INTEGRATED-NEXT:    # Label of block must be emitted1085; RV32I-INTEGRATED-NEXT:    li a0, 11086; RV32I-INTEGRATED-NEXT:    ret1087;1088; RV64I-INTEGRATED-LABEL: constraint_m_with_multi_callbr_asm:1089; RV64I-INTEGRATED:       # %bb.0: # %entry1090; RV64I-INTEGRATED-NEXT:    lui a1, %hi(eg)1091; RV64I-INTEGRATED-NEXT:    #APP1092; RV64I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1)1093; RV64I-INTEGRATED-NEXT:    beqz a0, .LBB15_31094; RV64I-INTEGRATED-NEXT:    #NO_APP1095; RV64I-INTEGRATED-NEXT:  # %bb.1: # %normal01096; RV64I-INTEGRATED-NEXT:    #APP1097; RV64I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1)1098; RV64I-INTEGRATED-NEXT:    beqz a0, .LBB15_31099; RV64I-INTEGRATED-NEXT:    #NO_APP1100; RV64I-INTEGRATED-NEXT:  # %bb.2: # %normal11101; RV64I-INTEGRATED-NEXT:    li a0, 01102; RV64I-INTEGRATED-NEXT:    ret1103; RV64I-INTEGRATED-NEXT:  .LBB15_3: # Inline asm indirect target1104; RV64I-INTEGRATED-NEXT:    # %fail1105; RV64I-INTEGRATED-NEXT:    # Label of block must be emitted1106; RV64I-INTEGRATED-NEXT:    li a0, 11107; RV64I-INTEGRATED-NEXT:    ret1108;1109; RV32I-MEDIUM-INTEGRATED-LABEL: constraint_m_with_multi_callbr_asm:1110; RV32I-MEDIUM-INTEGRATED:       # %bb.0: # %entry1111; RV32I-MEDIUM-INTEGRATED-NEXT:  .Lpcrel_hi12:1112; RV32I-MEDIUM-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)1113; RV32I-MEDIUM-INTEGRATED-NEXT:    #APP1114; RV32I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi12)(a1)1115; RV32I-MEDIUM-INTEGRATED-NEXT:    beqz a0, .LBB15_31116; RV32I-MEDIUM-INTEGRATED-NEXT:    #NO_APP1117; RV32I-MEDIUM-INTEGRATED-NEXT:  # %bb.1: # %normal01118; RV32I-MEDIUM-INTEGRATED-NEXT:    #APP1119; RV32I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi12)(a1)1120; RV32I-MEDIUM-INTEGRATED-NEXT:    beqz a0, .LBB15_31121; RV32I-MEDIUM-INTEGRATED-NEXT:    #NO_APP1122; RV32I-MEDIUM-INTEGRATED-NEXT:  # %bb.2: # %normal11123; RV32I-MEDIUM-INTEGRATED-NEXT:    li a0, 01124; RV32I-MEDIUM-INTEGRATED-NEXT:    ret1125; RV32I-MEDIUM-INTEGRATED-NEXT:  .LBB15_3: # Inline asm indirect target1126; RV32I-MEDIUM-INTEGRATED-NEXT:    # %fail1127; RV32I-MEDIUM-INTEGRATED-NEXT:    # Label of block must be emitted1128; RV32I-MEDIUM-INTEGRATED-NEXT:    li a0, 11129; RV32I-MEDIUM-INTEGRATED-NEXT:    ret1130;1131; RV64I-MEDIUM-INTEGRATED-LABEL: constraint_m_with_multi_callbr_asm:1132; RV64I-MEDIUM-INTEGRATED:       # %bb.0: # %entry1133; RV64I-MEDIUM-INTEGRATED-NEXT:  .Lpcrel_hi12:1134; RV64I-MEDIUM-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)1135; RV64I-MEDIUM-INTEGRATED-NEXT:    #APP1136; RV64I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi12)(a1)1137; RV64I-MEDIUM-INTEGRATED-NEXT:    beqz a0, .LBB15_31138; RV64I-MEDIUM-INTEGRATED-NEXT:    #NO_APP1139; RV64I-MEDIUM-INTEGRATED-NEXT:  # %bb.1: # %normal01140; RV64I-MEDIUM-INTEGRATED-NEXT:    #APP1141; RV64I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi12)(a1)1142; RV64I-MEDIUM-INTEGRATED-NEXT:    beqz a0, .LBB15_31143; RV64I-MEDIUM-INTEGRATED-NEXT:    #NO_APP1144; RV64I-MEDIUM-INTEGRATED-NEXT:  # %bb.2: # %normal11145; RV64I-MEDIUM-INTEGRATED-NEXT:    li a0, 01146; RV64I-MEDIUM-INTEGRATED-NEXT:    ret1147; RV64I-MEDIUM-INTEGRATED-NEXT:  .LBB15_3: # Inline asm indirect target1148; RV64I-MEDIUM-INTEGRATED-NEXT:    # %fail1149; RV64I-MEDIUM-INTEGRATED-NEXT:    # Label of block must be emitted1150; RV64I-MEDIUM-INTEGRATED-NEXT:    li a0, 11151; RV64I-MEDIUM-INTEGRATED-NEXT:    ret1152;1153; RV64I-LARGE-INTEGRATED-LABEL: constraint_m_with_multi_callbr_asm:1154; RV64I-LARGE-INTEGRATED:       # %bb.0: # %entry1155; RV64I-LARGE-INTEGRATED-NEXT:  .Lpcrel_hi12:1156; RV64I-LARGE-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(.LCPI15_0)1157; RV64I-LARGE-INTEGRATED-NEXT:    ld a1, %pcrel_lo(.Lpcrel_hi12)(a1)1158; RV64I-LARGE-INTEGRATED-NEXT:    #APP1159; RV64I-LARGE-INTEGRATED-NEXT:    sw zero, 0(a1)1160; RV64I-LARGE-INTEGRATED-NEXT:    beqz a0, .LBB15_31161; RV64I-LARGE-INTEGRATED-NEXT:    #NO_APP1162; RV64I-LARGE-INTEGRATED-NEXT:  # %bb.1: # %normal01163; RV64I-LARGE-INTEGRATED-NEXT:    #APP1164; RV64I-LARGE-INTEGRATED-NEXT:    sw zero, 0(a1)1165; RV64I-LARGE-INTEGRATED-NEXT:    beqz a0, .LBB15_31166; RV64I-LARGE-INTEGRATED-NEXT:    #NO_APP1167; RV64I-LARGE-INTEGRATED-NEXT:  # %bb.2: # %normal11168; RV64I-LARGE-INTEGRATED-NEXT:    li a0, 01169; RV64I-LARGE-INTEGRATED-NEXT:    ret1170; RV64I-LARGE-INTEGRATED-NEXT:  .LBB15_3: # Inline asm indirect target1171; RV64I-LARGE-INTEGRATED-NEXT:    # %fail1172; RV64I-LARGE-INTEGRATED-NEXT:    # Label of block must be emitted1173; RV64I-LARGE-INTEGRATED-NEXT:    li a0, 11174; RV64I-LARGE-INTEGRATED-NEXT:    ret1175entry:1176  callbr void asm "sw zero, $0; beqz $1, $2", "=*m,r,!i"(ptr elementtype(i32) @eg, i32 %a) to label %normal0 [label %fail]1177 1178normal0:1179  callbr void asm "sw zero, $0; beqz $1, $2", "=*m,r,!i"(ptr elementtype(i32) @eg, i32 %a) to label %normal1 [label %fail]1180 1181normal1:1182  ret i32 01183 1184fail:1185  ret i32 11186}1187 1188define void @constraint_o_1(ptr %a) nounwind {1189; RV32I-LABEL: constraint_o_1:1190; RV32I:       # %bb.0:1191; RV32I-NEXT:    #APP1192; RV32I-NEXT:    #NO_APP1193; RV32I-NEXT:    ret1194;1195; RV64I-LABEL: constraint_o_1:1196; RV64I:       # %bb.0:1197; RV64I-NEXT:    #APP1198; RV64I-NEXT:    #NO_APP1199; RV64I-NEXT:    ret1200;1201; RV32I-MEDIUM-LABEL: constraint_o_1:1202; RV32I-MEDIUM:       # %bb.0:1203; RV32I-MEDIUM-NEXT:    #APP1204; RV32I-MEDIUM-NEXT:    #NO_APP1205; RV32I-MEDIUM-NEXT:    ret1206;1207; RV64I-MEDIUM-LABEL: constraint_o_1:1208; RV64I-MEDIUM:       # %bb.0:1209; RV64I-MEDIUM-NEXT:    #APP1210; RV64I-MEDIUM-NEXT:    #NO_APP1211; RV64I-MEDIUM-NEXT:    ret1212;1213; RV64I-LARGE-LABEL: constraint_o_1:1214; RV64I-LARGE:       # %bb.0:1215; RV64I-LARGE-NEXT:    #APP1216; RV64I-LARGE-NEXT:    #NO_APP1217; RV64I-LARGE-NEXT:    ret1218  call void asm sideeffect "", "=*o"(ptr elementtype(i32) %a)1219  ret void1220}1221 1222define i32 @constraint_o_2(ptr %a) nounwind {1223; RV32I-LABEL: constraint_o_2:1224; RV32I:       # %bb.0:1225; RV32I-NEXT:    #APP1226; RV32I-NEXT:    lw a0, 0(a0)1227; RV32I-NEXT:    #NO_APP1228; RV32I-NEXT:    ret1229;1230; RV64I-LABEL: constraint_o_2:1231; RV64I:       # %bb.0:1232; RV64I-NEXT:    #APP1233; RV64I-NEXT:    lw a0, 0(a0)1234; RV64I-NEXT:    #NO_APP1235; RV64I-NEXT:    ret1236;1237; RV32I-MEDIUM-LABEL: constraint_o_2:1238; RV32I-MEDIUM:       # %bb.0:1239; RV32I-MEDIUM-NEXT:    #APP1240; RV32I-MEDIUM-NEXT:    lw a0, 0(a0)1241; RV32I-MEDIUM-NEXT:    #NO_APP1242; RV32I-MEDIUM-NEXT:    ret1243;1244; RV64I-MEDIUM-LABEL: constraint_o_2:1245; RV64I-MEDIUM:       # %bb.0:1246; RV64I-MEDIUM-NEXT:    #APP1247; RV64I-MEDIUM-NEXT:    lw a0, 0(a0)1248; RV64I-MEDIUM-NEXT:    #NO_APP1249; RV64I-MEDIUM-NEXT:    ret1250;1251; RV64I-LARGE-LABEL: constraint_o_2:1252; RV64I-LARGE:       # %bb.0:1253; RV64I-LARGE-NEXT:    #APP1254; RV64I-LARGE-NEXT:    lw a0, 0(a0)1255; RV64I-LARGE-NEXT:    #NO_APP1256; RV64I-LARGE-NEXT:    ret1257  %1 = tail call i32 asm "lw $0, $1", "=r,*o"(ptr elementtype(i32) %a)1258  ret i32 %11259}1260 1261define i32 @constraint_o_with_offset(ptr %a) nounwind {1262; RV32I-LABEL: constraint_o_with_offset:1263; RV32I:       # %bb.0:1264; RV32I-NEXT:    #APP1265; RV32I-NEXT:    lw a0, 4(a0)1266; RV32I-NEXT:    #NO_APP1267; RV32I-NEXT:    ret1268;1269; RV64I-LABEL: constraint_o_with_offset:1270; RV64I:       # %bb.0:1271; RV64I-NEXT:    #APP1272; RV64I-NEXT:    lw a0, 4(a0)1273; RV64I-NEXT:    #NO_APP1274; RV64I-NEXT:    ret1275;1276; RV32I-MEDIUM-LABEL: constraint_o_with_offset:1277; RV32I-MEDIUM:       # %bb.0:1278; RV32I-MEDIUM-NEXT:    #APP1279; RV32I-MEDIUM-NEXT:    lw a0, 4(a0)1280; RV32I-MEDIUM-NEXT:    #NO_APP1281; RV32I-MEDIUM-NEXT:    ret1282;1283; RV64I-MEDIUM-LABEL: constraint_o_with_offset:1284; RV64I-MEDIUM:       # %bb.0:1285; RV64I-MEDIUM-NEXT:    #APP1286; RV64I-MEDIUM-NEXT:    lw a0, 4(a0)1287; RV64I-MEDIUM-NEXT:    #NO_APP1288; RV64I-MEDIUM-NEXT:    ret1289;1290; RV64I-LARGE-LABEL: constraint_o_with_offset:1291; RV64I-LARGE:       # %bb.0:1292; RV64I-LARGE-NEXT:    #APP1293; RV64I-LARGE-NEXT:    lw a0, 4(a0)1294; RV64I-LARGE-NEXT:    #NO_APP1295; RV64I-LARGE-NEXT:    ret1296  %1 = getelementptr i32, ptr %a, i32 11297  %2 = tail call i32 asm "lw $0, $1", "=r,*o"(ptr elementtype(i32) %1)1298  ret i32 %21299}1300 1301define void @constraint_o_with_global_1() nounwind {1302; RV32I-LABEL: constraint_o_with_global_1:1303; RV32I:       # %bb.0:1304; RV32I-NEXT:    lui a0, %hi(eg)1305; RV32I-NEXT:    #APP1306; RV32I-NEXT:    sw zero, %lo(eg)(a0)1307; RV32I-NEXT:    #NO_APP1308; RV32I-NEXT:    ret1309;1310; RV64I-LABEL: constraint_o_with_global_1:1311; RV64I:       # %bb.0:1312; RV64I-NEXT:    lui a0, %hi(eg)1313; RV64I-NEXT:    #APP1314; RV64I-NEXT:    sw zero, %lo(eg)(a0)1315; RV64I-NEXT:    #NO_APP1316; RV64I-NEXT:    ret1317;1318; RV32I-MEDIUM-LABEL: constraint_o_with_global_1:1319; RV32I-MEDIUM:       # %bb.0:1320; RV32I-MEDIUM-NEXT:  .Lpcrel_hi13:1321; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg)1322; RV32I-MEDIUM-NEXT:    #APP1323; RV32I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi13)(a0)1324; RV32I-MEDIUM-NEXT:    #NO_APP1325; RV32I-MEDIUM-NEXT:    ret1326;1327; RV64I-MEDIUM-LABEL: constraint_o_with_global_1:1328; RV64I-MEDIUM:       # %bb.0:1329; RV64I-MEDIUM-NEXT:  .Lpcrel_hi13:1330; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg)1331; RV64I-MEDIUM-NEXT:    #APP1332; RV64I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi13)(a0)1333; RV64I-MEDIUM-NEXT:    #NO_APP1334; RV64I-MEDIUM-NEXT:    ret1335;1336; RV64I-LARGE-LABEL: constraint_o_with_global_1:1337; RV64I-LARGE:       # %bb.0:1338; RV64I-LARGE-NEXT:  .Lpcrel_hi13:1339; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI19_0)1340; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi13)(a0)1341; RV64I-LARGE-NEXT:    #APP1342; RV64I-LARGE-NEXT:    sw zero, 0(a0)1343; RV64I-LARGE-NEXT:    #NO_APP1344; RV64I-LARGE-NEXT:    ret1345  call void asm "sw zero, $0", "=*o"(ptr elementtype(i32) @eg)1346  ret void1347}1348 1349define void @constraint_o_with_global_2() nounwind {1350; RV32I-LABEL: constraint_o_with_global_2:1351; RV32I:       # %bb.0:1352; RV32I-NEXT:    lui a0, %hi(eg+4)1353; RV32I-NEXT:    #APP1354; RV32I-NEXT:    sw zero, %lo(eg+4)(a0)1355; RV32I-NEXT:    #NO_APP1356; RV32I-NEXT:    ret1357;1358; RV64I-LABEL: constraint_o_with_global_2:1359; RV64I:       # %bb.0:1360; RV64I-NEXT:    lui a0, %hi(eg+4)1361; RV64I-NEXT:    #APP1362; RV64I-NEXT:    sw zero, %lo(eg+4)(a0)1363; RV64I-NEXT:    #NO_APP1364; RV64I-NEXT:    ret1365;1366; RV32I-MEDIUM-LABEL: constraint_o_with_global_2:1367; RV32I-MEDIUM:       # %bb.0:1368; RV32I-MEDIUM-NEXT:  .Lpcrel_hi14:1369; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg+4)1370; RV32I-MEDIUM-NEXT:    #APP1371; RV32I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi14)(a0)1372; RV32I-MEDIUM-NEXT:    #NO_APP1373; RV32I-MEDIUM-NEXT:    ret1374;1375; RV64I-MEDIUM-LABEL: constraint_o_with_global_2:1376; RV64I-MEDIUM:       # %bb.0:1377; RV64I-MEDIUM-NEXT:  .Lpcrel_hi14:1378; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg+4)1379; RV64I-MEDIUM-NEXT:    #APP1380; RV64I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi14)(a0)1381; RV64I-MEDIUM-NEXT:    #NO_APP1382; RV64I-MEDIUM-NEXT:    ret1383;1384; RV64I-LARGE-LABEL: constraint_o_with_global_2:1385; RV64I-LARGE:       # %bb.0:1386; RV64I-LARGE-NEXT:  .Lpcrel_hi14:1387; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI20_0)1388; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi14)(a0)1389; RV64I-LARGE-NEXT:    #APP1390; RV64I-LARGE-NEXT:    sw zero, 4(a0)1391; RV64I-LARGE-NEXT:    #NO_APP1392; RV64I-LARGE-NEXT:    ret1393  call void asm "sw zero, $0", "=*o"(ptr elementtype(i32) getelementptr ([400000 x i32], ptr @eg, i32 0, i32 1))1394  ret void1395}1396 1397define void @constraint_o_with_global_3() nounwind {1398; RV32I-LABEL: constraint_o_with_global_3:1399; RV32I:       # %bb.0:1400; RV32I-NEXT:    lui a0, %hi(eg+8000)1401; RV32I-NEXT:    #APP1402; RV32I-NEXT:    sw zero, %lo(eg+8000)(a0)1403; RV32I-NEXT:    #NO_APP1404; RV32I-NEXT:    ret1405;1406; RV64I-LABEL: constraint_o_with_global_3:1407; RV64I:       # %bb.0:1408; RV64I-NEXT:    lui a0, %hi(eg+8000)1409; RV64I-NEXT:    #APP1410; RV64I-NEXT:    sw zero, %lo(eg+8000)(a0)1411; RV64I-NEXT:    #NO_APP1412; RV64I-NEXT:    ret1413;1414; RV32I-MEDIUM-LABEL: constraint_o_with_global_3:1415; RV32I-MEDIUM:       # %bb.0:1416; RV32I-MEDIUM-NEXT:  .Lpcrel_hi15:1417; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg+8000)1418; RV32I-MEDIUM-NEXT:    #APP1419; RV32I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi15)(a0)1420; RV32I-MEDIUM-NEXT:    #NO_APP1421; RV32I-MEDIUM-NEXT:    ret1422;1423; RV64I-MEDIUM-LABEL: constraint_o_with_global_3:1424; RV64I-MEDIUM:       # %bb.0:1425; RV64I-MEDIUM-NEXT:  .Lpcrel_hi15:1426; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg+8000)1427; RV64I-MEDIUM-NEXT:    #APP1428; RV64I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi15)(a0)1429; RV64I-MEDIUM-NEXT:    #NO_APP1430; RV64I-MEDIUM-NEXT:    ret1431;1432; RV64I-LARGE-LABEL: constraint_o_with_global_3:1433; RV64I-LARGE:       # %bb.0:1434; RV64I-LARGE-NEXT:  .Lpcrel_hi15:1435; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI21_0)1436; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi15)(a0)1437; RV64I-LARGE-NEXT:    lui a1, 21438; RV64I-LARGE-NEXT:    addi a1, a1, -1921439; RV64I-LARGE-NEXT:    add a0, a0, a11440; RV64I-LARGE-NEXT:    #APP1441; RV64I-LARGE-NEXT:    sw zero, 0(a0)1442; RV64I-LARGE-NEXT:    #NO_APP1443; RV64I-LARGE-NEXT:    ret1444  call void asm "sw zero, $0", "=*o"(ptr elementtype(i32) getelementptr ([400000 x i32], ptr @eg, i32 0, i32 2000))1445  ret void1446}1447 1448define void @constraint_o_with_extern_weak_global_1() nounwind {1449; RV32I-LABEL: constraint_o_with_extern_weak_global_1:1450; RV32I:       # %bb.0:1451; RV32I-NEXT:    lui a0, %hi(ewg)1452; RV32I-NEXT:    #APP1453; RV32I-NEXT:    sw zero, %lo(ewg)(a0)1454; RV32I-NEXT:    #NO_APP1455; RV32I-NEXT:    ret1456;1457; RV64I-LABEL: constraint_o_with_extern_weak_global_1:1458; RV64I:       # %bb.0:1459; RV64I-NEXT:    lui a0, %hi(ewg)1460; RV64I-NEXT:    #APP1461; RV64I-NEXT:    sw zero, %lo(ewg)(a0)1462; RV64I-NEXT:    #NO_APP1463; RV64I-NEXT:    ret1464;1465; RV32I-MEDIUM-LABEL: constraint_o_with_extern_weak_global_1:1466; RV32I-MEDIUM:       # %bb.0:1467; RV32I-MEDIUM-NEXT:  .Lpcrel_hi16:1468; RV32I-MEDIUM-NEXT:    auipc a0, %got_pcrel_hi(ewg)1469; RV32I-MEDIUM-NEXT:    lw a0, %pcrel_lo(.Lpcrel_hi16)(a0)1470; RV32I-MEDIUM-NEXT:    #APP1471; RV32I-MEDIUM-NEXT:    sw zero, 0(a0)1472; RV32I-MEDIUM-NEXT:    #NO_APP1473; RV32I-MEDIUM-NEXT:    ret1474;1475; RV64I-MEDIUM-LABEL: constraint_o_with_extern_weak_global_1:1476; RV64I-MEDIUM:       # %bb.0:1477; RV64I-MEDIUM-NEXT:  .Lpcrel_hi16:1478; RV64I-MEDIUM-NEXT:    auipc a0, %got_pcrel_hi(ewg)1479; RV64I-MEDIUM-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi16)(a0)1480; RV64I-MEDIUM-NEXT:    #APP1481; RV64I-MEDIUM-NEXT:    sw zero, 0(a0)1482; RV64I-MEDIUM-NEXT:    #NO_APP1483; RV64I-MEDIUM-NEXT:    ret1484;1485; RV64I-LARGE-LABEL: constraint_o_with_extern_weak_global_1:1486; RV64I-LARGE:       # %bb.0:1487; RV64I-LARGE-NEXT:  .Lpcrel_hi16:1488; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI22_0)1489; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi16)(a0)1490; RV64I-LARGE-NEXT:    #APP1491; RV64I-LARGE-NEXT:    sw zero, 0(a0)1492; RV64I-LARGE-NEXT:    #NO_APP1493; RV64I-LARGE-NEXT:    ret1494  call void asm "sw zero, $0", "=*o"(ptr elementtype(i32) @ewg)1495  ret void1496}1497 1498define void @constraint_o_with_extern_weak_global_2() nounwind {1499; RV32I-LABEL: constraint_o_with_extern_weak_global_2:1500; RV32I:       # %bb.0:1501; RV32I-NEXT:    lui a0, %hi(ewg+4)1502; RV32I-NEXT:    #APP1503; RV32I-NEXT:    sw zero, %lo(ewg+4)(a0)1504; RV32I-NEXT:    #NO_APP1505; RV32I-NEXT:    ret1506;1507; RV64I-LABEL: constraint_o_with_extern_weak_global_2:1508; RV64I:       # %bb.0:1509; RV64I-NEXT:    lui a0, %hi(ewg+4)1510; RV64I-NEXT:    #APP1511; RV64I-NEXT:    sw zero, %lo(ewg+4)(a0)1512; RV64I-NEXT:    #NO_APP1513; RV64I-NEXT:    ret1514;1515; RV32I-MEDIUM-LABEL: constraint_o_with_extern_weak_global_2:1516; RV32I-MEDIUM:       # %bb.0:1517; RV32I-MEDIUM-NEXT:  .Lpcrel_hi17:1518; RV32I-MEDIUM-NEXT:    auipc a0, %got_pcrel_hi(ewg)1519; RV32I-MEDIUM-NEXT:    lw a0, %pcrel_lo(.Lpcrel_hi17)(a0)1520; RV32I-MEDIUM-NEXT:    #APP1521; RV32I-MEDIUM-NEXT:    sw zero, 4(a0)1522; RV32I-MEDIUM-NEXT:    #NO_APP1523; RV32I-MEDIUM-NEXT:    ret1524;1525; RV64I-MEDIUM-LABEL: constraint_o_with_extern_weak_global_2:1526; RV64I-MEDIUM:       # %bb.0:1527; RV64I-MEDIUM-NEXT:  .Lpcrel_hi17:1528; RV64I-MEDIUM-NEXT:    auipc a0, %got_pcrel_hi(ewg)1529; RV64I-MEDIUM-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi17)(a0)1530; RV64I-MEDIUM-NEXT:    #APP1531; RV64I-MEDIUM-NEXT:    sw zero, 4(a0)1532; RV64I-MEDIUM-NEXT:    #NO_APP1533; RV64I-MEDIUM-NEXT:    ret1534;1535; RV64I-LARGE-LABEL: constraint_o_with_extern_weak_global_2:1536; RV64I-LARGE:       # %bb.0:1537; RV64I-LARGE-NEXT:  .Lpcrel_hi17:1538; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI23_0)1539; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi17)(a0)1540; RV64I-LARGE-NEXT:    #APP1541; RV64I-LARGE-NEXT:    sw zero, 4(a0)1542; RV64I-LARGE-NEXT:    #NO_APP1543; RV64I-LARGE-NEXT:    ret1544  call void asm "sw zero, $0", "=*o"(ptr elementtype(i32) getelementptr ([400000 x i32], ptr @ewg, i32 0, i32 1))1545  ret void1546}1547 1548define void @constraint_o_with_extern_weak_global_3() nounwind {1549; RV32I-LABEL: constraint_o_with_extern_weak_global_3:1550; RV32I:       # %bb.0:1551; RV32I-NEXT:    lui a0, %hi(ewg+8000)1552; RV32I-NEXT:    #APP1553; RV32I-NEXT:    sw zero, %lo(ewg+8000)(a0)1554; RV32I-NEXT:    #NO_APP1555; RV32I-NEXT:    ret1556;1557; RV64I-LABEL: constraint_o_with_extern_weak_global_3:1558; RV64I:       # %bb.0:1559; RV64I-NEXT:    lui a0, %hi(ewg+8000)1560; RV64I-NEXT:    #APP1561; RV64I-NEXT:    sw zero, %lo(ewg+8000)(a0)1562; RV64I-NEXT:    #NO_APP1563; RV64I-NEXT:    ret1564;1565; RV32I-MEDIUM-LABEL: constraint_o_with_extern_weak_global_3:1566; RV32I-MEDIUM:       # %bb.0:1567; RV32I-MEDIUM-NEXT:  .Lpcrel_hi18:1568; RV32I-MEDIUM-NEXT:    auipc a0, %got_pcrel_hi(ewg)1569; RV32I-MEDIUM-NEXT:    lw a0, %pcrel_lo(.Lpcrel_hi18)(a0)1570; RV32I-MEDIUM-NEXT:    lui a1, 21571; RV32I-MEDIUM-NEXT:    addi a1, a1, -1921572; RV32I-MEDIUM-NEXT:    add a0, a0, a11573; RV32I-MEDIUM-NEXT:    #APP1574; RV32I-MEDIUM-NEXT:    sw zero, 0(a0)1575; RV32I-MEDIUM-NEXT:    #NO_APP1576; RV32I-MEDIUM-NEXT:    ret1577;1578; RV64I-MEDIUM-LABEL: constraint_o_with_extern_weak_global_3:1579; RV64I-MEDIUM:       # %bb.0:1580; RV64I-MEDIUM-NEXT:  .Lpcrel_hi18:1581; RV64I-MEDIUM-NEXT:    auipc a0, %got_pcrel_hi(ewg)1582; RV64I-MEDIUM-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi18)(a0)1583; RV64I-MEDIUM-NEXT:    lui a1, 21584; RV64I-MEDIUM-NEXT:    addi a1, a1, -1921585; RV64I-MEDIUM-NEXT:    add a0, a0, a11586; RV64I-MEDIUM-NEXT:    #APP1587; RV64I-MEDIUM-NEXT:    sw zero, 0(a0)1588; RV64I-MEDIUM-NEXT:    #NO_APP1589; RV64I-MEDIUM-NEXT:    ret1590;1591; RV64I-LARGE-LABEL: constraint_o_with_extern_weak_global_3:1592; RV64I-LARGE:       # %bb.0:1593; RV64I-LARGE-NEXT:  .Lpcrel_hi18:1594; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI24_0)1595; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi18)(a0)1596; RV64I-LARGE-NEXT:    lui a1, 21597; RV64I-LARGE-NEXT:    addi a1, a1, -1921598; RV64I-LARGE-NEXT:    add a0, a0, a11599; RV64I-LARGE-NEXT:    #APP1600; RV64I-LARGE-NEXT:    sw zero, 0(a0)1601; RV64I-LARGE-NEXT:    #NO_APP1602; RV64I-LARGE-NEXT:    ret1603  call void asm "sw zero, $0", "=*o"(ptr elementtype(i32) getelementptr ([400000 x i32], ptr @ewg, i32 0, i32 2000))1604  ret void1605}1606 1607define void @constraint_o_with_multi_asm() nounwind {1608; RV32I-LABEL: constraint_o_with_multi_asm:1609; RV32I:       # %bb.0:1610; RV32I-NEXT:    lui a0, %hi(eg)1611; RV32I-NEXT:    #APP1612; RV32I-NEXT:    sw zero, %lo(eg)(a0)1613; RV32I-NEXT:    #NO_APP1614; RV32I-NEXT:    #APP1615; RV32I-NEXT:    sw zero, %lo(eg)(a0)1616; RV32I-NEXT:    #NO_APP1617; RV32I-NEXT:    ret1618;1619; RV64I-LABEL: constraint_o_with_multi_asm:1620; RV64I:       # %bb.0:1621; RV64I-NEXT:    lui a0, %hi(eg)1622; RV64I-NEXT:    #APP1623; RV64I-NEXT:    sw zero, %lo(eg)(a0)1624; RV64I-NEXT:    #NO_APP1625; RV64I-NEXT:    #APP1626; RV64I-NEXT:    sw zero, %lo(eg)(a0)1627; RV64I-NEXT:    #NO_APP1628; RV64I-NEXT:    ret1629;1630; RV32I-MEDIUM-LABEL: constraint_o_with_multi_asm:1631; RV32I-MEDIUM:       # %bb.0:1632; RV32I-MEDIUM-NEXT:  .Lpcrel_hi19:1633; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg)1634; RV32I-MEDIUM-NEXT:    #APP1635; RV32I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi19)(a0)1636; RV32I-MEDIUM-NEXT:    #NO_APP1637; RV32I-MEDIUM-NEXT:    #APP1638; RV32I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi19)(a0)1639; RV32I-MEDIUM-NEXT:    #NO_APP1640; RV32I-MEDIUM-NEXT:    ret1641;1642; RV64I-MEDIUM-LABEL: constraint_o_with_multi_asm:1643; RV64I-MEDIUM:       # %bb.0:1644; RV64I-MEDIUM-NEXT:  .Lpcrel_hi19:1645; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg)1646; RV64I-MEDIUM-NEXT:    #APP1647; RV64I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi19)(a0)1648; RV64I-MEDIUM-NEXT:    #NO_APP1649; RV64I-MEDIUM-NEXT:    #APP1650; RV64I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi19)(a0)1651; RV64I-MEDIUM-NEXT:    #NO_APP1652; RV64I-MEDIUM-NEXT:    ret1653;1654; RV64I-LARGE-LABEL: constraint_o_with_multi_asm:1655; RV64I-LARGE:       # %bb.0:1656; RV64I-LARGE-NEXT:  .Lpcrel_hi19:1657; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI25_0)1658; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi19)(a0)1659; RV64I-LARGE-NEXT:    #APP1660; RV64I-LARGE-NEXT:    sw zero, 0(a0)1661; RV64I-LARGE-NEXT:    #NO_APP1662; RV64I-LARGE-NEXT:    #APP1663; RV64I-LARGE-NEXT:    sw zero, 0(a0)1664; RV64I-LARGE-NEXT:    #NO_APP1665; RV64I-LARGE-NEXT:    ret1666  call void asm "sw zero, $0", "=*o"(ptr elementtype(i32) @eg)1667  call void asm "sw zero, $0", "=*o"(ptr elementtype(i32) @eg)1668  ret void1669}1670 1671define i32 @constraint_o_with_callbr_multi_operands(i32 %a) {1672; RV32I-NO-INTEGRATED-LABEL: constraint_o_with_callbr_multi_operands:1673; RV32I-NO-INTEGRATED:       # %bb.0: # %entry1674; RV32I-NO-INTEGRATED-NEXT:    lui a1, %hi(eg)1675; RV32I-NO-INTEGRATED-NEXT:    #APP1676; RV32I-NO-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1); sw zero, %lo(eg)(a1); beqz a0, .LBB26_21677; RV32I-NO-INTEGRATED-NEXT:    #NO_APP1678; RV32I-NO-INTEGRATED-NEXT:  # %bb.1: # %normal1679; RV32I-NO-INTEGRATED-NEXT:    li a0, 01680; RV32I-NO-INTEGRATED-NEXT:    ret1681; RV32I-NO-INTEGRATED-NEXT:  .LBB26_2: # Inline asm indirect target1682; RV32I-NO-INTEGRATED-NEXT:    # %fail1683; RV32I-NO-INTEGRATED-NEXT:    # Label of block must be emitted1684; RV32I-NO-INTEGRATED-NEXT:    li a0, 11685; RV32I-NO-INTEGRATED-NEXT:    ret1686;1687; RV64I-NO-INTEGRATED-LABEL: constraint_o_with_callbr_multi_operands:1688; RV64I-NO-INTEGRATED:       # %bb.0: # %entry1689; RV64I-NO-INTEGRATED-NEXT:    lui a1, %hi(eg)1690; RV64I-NO-INTEGRATED-NEXT:    #APP1691; RV64I-NO-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1); sw zero, %lo(eg)(a1); beqz a0, .LBB26_21692; RV64I-NO-INTEGRATED-NEXT:    #NO_APP1693; RV64I-NO-INTEGRATED-NEXT:  # %bb.1: # %normal1694; RV64I-NO-INTEGRATED-NEXT:    li a0, 01695; RV64I-NO-INTEGRATED-NEXT:    ret1696; RV64I-NO-INTEGRATED-NEXT:  .LBB26_2: # Inline asm indirect target1697; RV64I-NO-INTEGRATED-NEXT:    # %fail1698; RV64I-NO-INTEGRATED-NEXT:    # Label of block must be emitted1699; RV64I-NO-INTEGRATED-NEXT:    li a0, 11700; RV64I-NO-INTEGRATED-NEXT:    ret1701;1702; RV32I-MEDIUM-NO-INTEGRATED-LABEL: constraint_o_with_callbr_multi_operands:1703; RV32I-MEDIUM-NO-INTEGRATED:       # %bb.0: # %entry1704; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  .Lpcrel_hi20:1705; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)1706; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #APP1707; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi20)(a1); sw zero, %pcrel_lo(.Lpcrel_hi20)(a1); beqz a0, .LBB26_21708; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP1709; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  # %bb.1: # %normal1710; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 01711; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    ret1712; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  .LBB26_2: # Inline asm indirect target1713; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    # %fail1714; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    # Label of block must be emitted1715; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 11716; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    ret1717;1718; RV64I-MEDIUM-NO-INTEGRATED-LABEL: constraint_o_with_callbr_multi_operands:1719; RV64I-MEDIUM-NO-INTEGRATED:       # %bb.0: # %entry1720; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  .Lpcrel_hi20:1721; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)1722; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #APP1723; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi20)(a1); sw zero, %pcrel_lo(.Lpcrel_hi20)(a1); beqz a0, .LBB26_21724; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP1725; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  # %bb.1: # %normal1726; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 01727; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    ret1728; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  .LBB26_2: # Inline asm indirect target1729; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    # %fail1730; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    # Label of block must be emitted1731; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 11732; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    ret1733;1734; RV64I-LARGE-NO-INTEGRATED-LABEL: constraint_o_with_callbr_multi_operands:1735; RV64I-LARGE-NO-INTEGRATED:       # %bb.0: # %entry1736; RV64I-LARGE-NO-INTEGRATED-NEXT:  .Lpcrel_hi20:1737; RV64I-LARGE-NO-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(.LCPI26_0)1738; RV64I-LARGE-NO-INTEGRATED-NEXT:    ld a1, %pcrel_lo(.Lpcrel_hi20)(a1)1739; RV64I-LARGE-NO-INTEGRATED-NEXT:    #APP1740; RV64I-LARGE-NO-INTEGRATED-NEXT:    sw zero, 0(a1); sw zero, 0(a1); beqz a0, .LBB26_21741; RV64I-LARGE-NO-INTEGRATED-NEXT:    #NO_APP1742; RV64I-LARGE-NO-INTEGRATED-NEXT:  # %bb.1: # %normal1743; RV64I-LARGE-NO-INTEGRATED-NEXT:    li a0, 01744; RV64I-LARGE-NO-INTEGRATED-NEXT:    ret1745; RV64I-LARGE-NO-INTEGRATED-NEXT:  .LBB26_2: # Inline asm indirect target1746; RV64I-LARGE-NO-INTEGRATED-NEXT:    # %fail1747; RV64I-LARGE-NO-INTEGRATED-NEXT:    # Label of block must be emitted1748; RV64I-LARGE-NO-INTEGRATED-NEXT:    li a0, 11749; RV64I-LARGE-NO-INTEGRATED-NEXT:    ret1750;1751; RV32I-INTEGRATED-LABEL: constraint_o_with_callbr_multi_operands:1752; RV32I-INTEGRATED:       # %bb.0: # %entry1753; RV32I-INTEGRATED-NEXT:    lui a1, %hi(eg)1754; RV32I-INTEGRATED-NEXT:    #APP1755; RV32I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1)1756; RV32I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1)1757; RV32I-INTEGRATED-NEXT:    beqz a0, .LBB26_21758; RV32I-INTEGRATED-NEXT:    #NO_APP1759; RV32I-INTEGRATED-NEXT:  # %bb.1: # %normal1760; RV32I-INTEGRATED-NEXT:    li a0, 01761; RV32I-INTEGRATED-NEXT:    ret1762; RV32I-INTEGRATED-NEXT:  .LBB26_2: # Inline asm indirect target1763; RV32I-INTEGRATED-NEXT:    # %fail1764; RV32I-INTEGRATED-NEXT:    # Label of block must be emitted1765; RV32I-INTEGRATED-NEXT:    li a0, 11766; RV32I-INTEGRATED-NEXT:    ret1767;1768; RV64I-INTEGRATED-LABEL: constraint_o_with_callbr_multi_operands:1769; RV64I-INTEGRATED:       # %bb.0: # %entry1770; RV64I-INTEGRATED-NEXT:    lui a1, %hi(eg)1771; RV64I-INTEGRATED-NEXT:    #APP1772; RV64I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1)1773; RV64I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1)1774; RV64I-INTEGRATED-NEXT:    beqz a0, .LBB26_21775; RV64I-INTEGRATED-NEXT:    #NO_APP1776; RV64I-INTEGRATED-NEXT:  # %bb.1: # %normal1777; RV64I-INTEGRATED-NEXT:    li a0, 01778; RV64I-INTEGRATED-NEXT:    ret1779; RV64I-INTEGRATED-NEXT:  .LBB26_2: # Inline asm indirect target1780; RV64I-INTEGRATED-NEXT:    # %fail1781; RV64I-INTEGRATED-NEXT:    # Label of block must be emitted1782; RV64I-INTEGRATED-NEXT:    li a0, 11783; RV64I-INTEGRATED-NEXT:    ret1784;1785; RV32I-MEDIUM-INTEGRATED-LABEL: constraint_o_with_callbr_multi_operands:1786; RV32I-MEDIUM-INTEGRATED:       # %bb.0: # %entry1787; RV32I-MEDIUM-INTEGRATED-NEXT:  .Lpcrel_hi20:1788; RV32I-MEDIUM-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)1789; RV32I-MEDIUM-INTEGRATED-NEXT:    #APP1790; RV32I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi20)(a1)1791; RV32I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi20)(a1)1792; RV32I-MEDIUM-INTEGRATED-NEXT:    beqz a0, .LBB26_21793; RV32I-MEDIUM-INTEGRATED-NEXT:    #NO_APP1794; RV32I-MEDIUM-INTEGRATED-NEXT:  # %bb.1: # %normal1795; RV32I-MEDIUM-INTEGRATED-NEXT:    li a0, 01796; RV32I-MEDIUM-INTEGRATED-NEXT:    ret1797; RV32I-MEDIUM-INTEGRATED-NEXT:  .LBB26_2: # Inline asm indirect target1798; RV32I-MEDIUM-INTEGRATED-NEXT:    # %fail1799; RV32I-MEDIUM-INTEGRATED-NEXT:    # Label of block must be emitted1800; RV32I-MEDIUM-INTEGRATED-NEXT:    li a0, 11801; RV32I-MEDIUM-INTEGRATED-NEXT:    ret1802;1803; RV64I-MEDIUM-INTEGRATED-LABEL: constraint_o_with_callbr_multi_operands:1804; RV64I-MEDIUM-INTEGRATED:       # %bb.0: # %entry1805; RV64I-MEDIUM-INTEGRATED-NEXT:  .Lpcrel_hi20:1806; RV64I-MEDIUM-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)1807; RV64I-MEDIUM-INTEGRATED-NEXT:    #APP1808; RV64I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi20)(a1)1809; RV64I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi20)(a1)1810; RV64I-MEDIUM-INTEGRATED-NEXT:    beqz a0, .LBB26_21811; RV64I-MEDIUM-INTEGRATED-NEXT:    #NO_APP1812; RV64I-MEDIUM-INTEGRATED-NEXT:  # %bb.1: # %normal1813; RV64I-MEDIUM-INTEGRATED-NEXT:    li a0, 01814; RV64I-MEDIUM-INTEGRATED-NEXT:    ret1815; RV64I-MEDIUM-INTEGRATED-NEXT:  .LBB26_2: # Inline asm indirect target1816; RV64I-MEDIUM-INTEGRATED-NEXT:    # %fail1817; RV64I-MEDIUM-INTEGRATED-NEXT:    # Label of block must be emitted1818; RV64I-MEDIUM-INTEGRATED-NEXT:    li a0, 11819; RV64I-MEDIUM-INTEGRATED-NEXT:    ret1820;1821; RV64I-LARGE-INTEGRATED-LABEL: constraint_o_with_callbr_multi_operands:1822; RV64I-LARGE-INTEGRATED:       # %bb.0: # %entry1823; RV64I-LARGE-INTEGRATED-NEXT:  .Lpcrel_hi20:1824; RV64I-LARGE-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(.LCPI26_0)1825; RV64I-LARGE-INTEGRATED-NEXT:    ld a1, %pcrel_lo(.Lpcrel_hi20)(a1)1826; RV64I-LARGE-INTEGRATED-NEXT:    #APP1827; RV64I-LARGE-INTEGRATED-NEXT:    sw zero, 0(a1)1828; RV64I-LARGE-INTEGRATED-NEXT:    sw zero, 0(a1)1829; RV64I-LARGE-INTEGRATED-NEXT:    beqz a0, .LBB26_21830; RV64I-LARGE-INTEGRATED-NEXT:    #NO_APP1831; RV64I-LARGE-INTEGRATED-NEXT:  # %bb.1: # %normal1832; RV64I-LARGE-INTEGRATED-NEXT:    li a0, 01833; RV64I-LARGE-INTEGRATED-NEXT:    ret1834; RV64I-LARGE-INTEGRATED-NEXT:  .LBB26_2: # Inline asm indirect target1835; RV64I-LARGE-INTEGRATED-NEXT:    # %fail1836; RV64I-LARGE-INTEGRATED-NEXT:    # Label of block must be emitted1837; RV64I-LARGE-INTEGRATED-NEXT:    li a0, 11838; RV64I-LARGE-INTEGRATED-NEXT:    ret1839entry:1840  callbr void asm "sw zero, $0; sw zero, $1; beqz $2, $3", "=*m,=*m,r,!i"(ptr elementtype(i32) @eg, ptr elementtype(i32) @eg, i32 %a) to label %normal [label %fail]1841 1842normal:1843  ret i32 01844 1845fail:1846  ret i32 11847}1848 1849define i32 @constraint_o_with_multi_callbr_asm(i32 %a) {1850; RV32I-NO-INTEGRATED-LABEL: constraint_o_with_multi_callbr_asm:1851; RV32I-NO-INTEGRATED:       # %bb.0: # %entry1852; RV32I-NO-INTEGRATED-NEXT:    lui a1, %hi(eg)1853; RV32I-NO-INTEGRATED-NEXT:    #APP1854; RV32I-NO-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1); beqz a0, .LBB27_31855; RV32I-NO-INTEGRATED-NEXT:    #NO_APP1856; RV32I-NO-INTEGRATED-NEXT:  # %bb.1: # %normal01857; RV32I-NO-INTEGRATED-NEXT:    #APP1858; RV32I-NO-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1); beqz a0, .LBB27_31859; RV32I-NO-INTEGRATED-NEXT:    #NO_APP1860; RV32I-NO-INTEGRATED-NEXT:  # %bb.2: # %normal11861; RV32I-NO-INTEGRATED-NEXT:    li a0, 01862; RV32I-NO-INTEGRATED-NEXT:    ret1863; RV32I-NO-INTEGRATED-NEXT:  .LBB27_3: # Inline asm indirect target1864; RV32I-NO-INTEGRATED-NEXT:    # %fail1865; RV32I-NO-INTEGRATED-NEXT:    # Label of block must be emitted1866; RV32I-NO-INTEGRATED-NEXT:    li a0, 11867; RV32I-NO-INTEGRATED-NEXT:    ret1868;1869; RV64I-NO-INTEGRATED-LABEL: constraint_o_with_multi_callbr_asm:1870; RV64I-NO-INTEGRATED:       # %bb.0: # %entry1871; RV64I-NO-INTEGRATED-NEXT:    lui a1, %hi(eg)1872; RV64I-NO-INTEGRATED-NEXT:    #APP1873; RV64I-NO-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1); beqz a0, .LBB27_31874; RV64I-NO-INTEGRATED-NEXT:    #NO_APP1875; RV64I-NO-INTEGRATED-NEXT:  # %bb.1: # %normal01876; RV64I-NO-INTEGRATED-NEXT:    #APP1877; RV64I-NO-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1); beqz a0, .LBB27_31878; RV64I-NO-INTEGRATED-NEXT:    #NO_APP1879; RV64I-NO-INTEGRATED-NEXT:  # %bb.2: # %normal11880; RV64I-NO-INTEGRATED-NEXT:    li a0, 01881; RV64I-NO-INTEGRATED-NEXT:    ret1882; RV64I-NO-INTEGRATED-NEXT:  .LBB27_3: # Inline asm indirect target1883; RV64I-NO-INTEGRATED-NEXT:    # %fail1884; RV64I-NO-INTEGRATED-NEXT:    # Label of block must be emitted1885; RV64I-NO-INTEGRATED-NEXT:    li a0, 11886; RV64I-NO-INTEGRATED-NEXT:    ret1887;1888; RV32I-MEDIUM-NO-INTEGRATED-LABEL: constraint_o_with_multi_callbr_asm:1889; RV32I-MEDIUM-NO-INTEGRATED:       # %bb.0: # %entry1890; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  .Lpcrel_hi21:1891; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)1892; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #APP1893; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi21)(a1); beqz a0, .LBB27_31894; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP1895; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  # %bb.1: # %normal01896; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #APP1897; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi21)(a1); beqz a0, .LBB27_31898; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP1899; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  # %bb.2: # %normal11900; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 01901; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    ret1902; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  .LBB27_3: # Inline asm indirect target1903; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    # %fail1904; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    # Label of block must be emitted1905; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 11906; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    ret1907;1908; RV64I-MEDIUM-NO-INTEGRATED-LABEL: constraint_o_with_multi_callbr_asm:1909; RV64I-MEDIUM-NO-INTEGRATED:       # %bb.0: # %entry1910; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  .Lpcrel_hi21:1911; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)1912; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #APP1913; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi21)(a1); beqz a0, .LBB27_31914; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP1915; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  # %bb.1: # %normal01916; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #APP1917; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi21)(a1); beqz a0, .LBB27_31918; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP1919; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  # %bb.2: # %normal11920; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 01921; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    ret1922; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  .LBB27_3: # Inline asm indirect target1923; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    # %fail1924; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    # Label of block must be emitted1925; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 11926; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    ret1927;1928; RV64I-LARGE-NO-INTEGRATED-LABEL: constraint_o_with_multi_callbr_asm:1929; RV64I-LARGE-NO-INTEGRATED:       # %bb.0: # %entry1930; RV64I-LARGE-NO-INTEGRATED-NEXT:  .Lpcrel_hi21:1931; RV64I-LARGE-NO-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(.LCPI27_0)1932; RV64I-LARGE-NO-INTEGRATED-NEXT:    ld a1, %pcrel_lo(.Lpcrel_hi21)(a1)1933; RV64I-LARGE-NO-INTEGRATED-NEXT:    #APP1934; RV64I-LARGE-NO-INTEGRATED-NEXT:    sw zero, 0(a1); beqz a0, .LBB27_31935; RV64I-LARGE-NO-INTEGRATED-NEXT:    #NO_APP1936; RV64I-LARGE-NO-INTEGRATED-NEXT:  # %bb.1: # %normal01937; RV64I-LARGE-NO-INTEGRATED-NEXT:    #APP1938; RV64I-LARGE-NO-INTEGRATED-NEXT:    sw zero, 0(a1); beqz a0, .LBB27_31939; RV64I-LARGE-NO-INTEGRATED-NEXT:    #NO_APP1940; RV64I-LARGE-NO-INTEGRATED-NEXT:  # %bb.2: # %normal11941; RV64I-LARGE-NO-INTEGRATED-NEXT:    li a0, 01942; RV64I-LARGE-NO-INTEGRATED-NEXT:    ret1943; RV64I-LARGE-NO-INTEGRATED-NEXT:  .LBB27_3: # Inline asm indirect target1944; RV64I-LARGE-NO-INTEGRATED-NEXT:    # %fail1945; RV64I-LARGE-NO-INTEGRATED-NEXT:    # Label of block must be emitted1946; RV64I-LARGE-NO-INTEGRATED-NEXT:    li a0, 11947; RV64I-LARGE-NO-INTEGRATED-NEXT:    ret1948;1949; RV32I-INTEGRATED-LABEL: constraint_o_with_multi_callbr_asm:1950; RV32I-INTEGRATED:       # %bb.0: # %entry1951; RV32I-INTEGRATED-NEXT:    lui a1, %hi(eg)1952; RV32I-INTEGRATED-NEXT:    #APP1953; RV32I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1)1954; RV32I-INTEGRATED-NEXT:    beqz a0, .LBB27_31955; RV32I-INTEGRATED-NEXT:    #NO_APP1956; RV32I-INTEGRATED-NEXT:  # %bb.1: # %normal01957; RV32I-INTEGRATED-NEXT:    #APP1958; RV32I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1)1959; RV32I-INTEGRATED-NEXT:    beqz a0, .LBB27_31960; RV32I-INTEGRATED-NEXT:    #NO_APP1961; RV32I-INTEGRATED-NEXT:  # %bb.2: # %normal11962; RV32I-INTEGRATED-NEXT:    li a0, 01963; RV32I-INTEGRATED-NEXT:    ret1964; RV32I-INTEGRATED-NEXT:  .LBB27_3: # Inline asm indirect target1965; RV32I-INTEGRATED-NEXT:    # %fail1966; RV32I-INTEGRATED-NEXT:    # Label of block must be emitted1967; RV32I-INTEGRATED-NEXT:    li a0, 11968; RV32I-INTEGRATED-NEXT:    ret1969;1970; RV64I-INTEGRATED-LABEL: constraint_o_with_multi_callbr_asm:1971; RV64I-INTEGRATED:       # %bb.0: # %entry1972; RV64I-INTEGRATED-NEXT:    lui a1, %hi(eg)1973; RV64I-INTEGRATED-NEXT:    #APP1974; RV64I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1)1975; RV64I-INTEGRATED-NEXT:    beqz a0, .LBB27_31976; RV64I-INTEGRATED-NEXT:    #NO_APP1977; RV64I-INTEGRATED-NEXT:  # %bb.1: # %normal01978; RV64I-INTEGRATED-NEXT:    #APP1979; RV64I-INTEGRATED-NEXT:    sw zero, %lo(eg)(a1)1980; RV64I-INTEGRATED-NEXT:    beqz a0, .LBB27_31981; RV64I-INTEGRATED-NEXT:    #NO_APP1982; RV64I-INTEGRATED-NEXT:  # %bb.2: # %normal11983; RV64I-INTEGRATED-NEXT:    li a0, 01984; RV64I-INTEGRATED-NEXT:    ret1985; RV64I-INTEGRATED-NEXT:  .LBB27_3: # Inline asm indirect target1986; RV64I-INTEGRATED-NEXT:    # %fail1987; RV64I-INTEGRATED-NEXT:    # Label of block must be emitted1988; RV64I-INTEGRATED-NEXT:    li a0, 11989; RV64I-INTEGRATED-NEXT:    ret1990;1991; RV32I-MEDIUM-INTEGRATED-LABEL: constraint_o_with_multi_callbr_asm:1992; RV32I-MEDIUM-INTEGRATED:       # %bb.0: # %entry1993; RV32I-MEDIUM-INTEGRATED-NEXT:  .Lpcrel_hi21:1994; RV32I-MEDIUM-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)1995; RV32I-MEDIUM-INTEGRATED-NEXT:    #APP1996; RV32I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi21)(a1)1997; RV32I-MEDIUM-INTEGRATED-NEXT:    beqz a0, .LBB27_31998; RV32I-MEDIUM-INTEGRATED-NEXT:    #NO_APP1999; RV32I-MEDIUM-INTEGRATED-NEXT:  # %bb.1: # %normal02000; RV32I-MEDIUM-INTEGRATED-NEXT:    #APP2001; RV32I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi21)(a1)2002; RV32I-MEDIUM-INTEGRATED-NEXT:    beqz a0, .LBB27_32003; RV32I-MEDIUM-INTEGRATED-NEXT:    #NO_APP2004; RV32I-MEDIUM-INTEGRATED-NEXT:  # %bb.2: # %normal12005; RV32I-MEDIUM-INTEGRATED-NEXT:    li a0, 02006; RV32I-MEDIUM-INTEGRATED-NEXT:    ret2007; RV32I-MEDIUM-INTEGRATED-NEXT:  .LBB27_3: # Inline asm indirect target2008; RV32I-MEDIUM-INTEGRATED-NEXT:    # %fail2009; RV32I-MEDIUM-INTEGRATED-NEXT:    # Label of block must be emitted2010; RV32I-MEDIUM-INTEGRATED-NEXT:    li a0, 12011; RV32I-MEDIUM-INTEGRATED-NEXT:    ret2012;2013; RV64I-MEDIUM-INTEGRATED-LABEL: constraint_o_with_multi_callbr_asm:2014; RV64I-MEDIUM-INTEGRATED:       # %bb.0: # %entry2015; RV64I-MEDIUM-INTEGRATED-NEXT:  .Lpcrel_hi21:2016; RV64I-MEDIUM-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)2017; RV64I-MEDIUM-INTEGRATED-NEXT:    #APP2018; RV64I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi21)(a1)2019; RV64I-MEDIUM-INTEGRATED-NEXT:    beqz a0, .LBB27_32020; RV64I-MEDIUM-INTEGRATED-NEXT:    #NO_APP2021; RV64I-MEDIUM-INTEGRATED-NEXT:  # %bb.1: # %normal02022; RV64I-MEDIUM-INTEGRATED-NEXT:    #APP2023; RV64I-MEDIUM-INTEGRATED-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi21)(a1)2024; RV64I-MEDIUM-INTEGRATED-NEXT:    beqz a0, .LBB27_32025; RV64I-MEDIUM-INTEGRATED-NEXT:    #NO_APP2026; RV64I-MEDIUM-INTEGRATED-NEXT:  # %bb.2: # %normal12027; RV64I-MEDIUM-INTEGRATED-NEXT:    li a0, 02028; RV64I-MEDIUM-INTEGRATED-NEXT:    ret2029; RV64I-MEDIUM-INTEGRATED-NEXT:  .LBB27_3: # Inline asm indirect target2030; RV64I-MEDIUM-INTEGRATED-NEXT:    # %fail2031; RV64I-MEDIUM-INTEGRATED-NEXT:    # Label of block must be emitted2032; RV64I-MEDIUM-INTEGRATED-NEXT:    li a0, 12033; RV64I-MEDIUM-INTEGRATED-NEXT:    ret2034;2035; RV64I-LARGE-INTEGRATED-LABEL: constraint_o_with_multi_callbr_asm:2036; RV64I-LARGE-INTEGRATED:       # %bb.0: # %entry2037; RV64I-LARGE-INTEGRATED-NEXT:  .Lpcrel_hi21:2038; RV64I-LARGE-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(.LCPI27_0)2039; RV64I-LARGE-INTEGRATED-NEXT:    ld a1, %pcrel_lo(.Lpcrel_hi21)(a1)2040; RV64I-LARGE-INTEGRATED-NEXT:    #APP2041; RV64I-LARGE-INTEGRATED-NEXT:    sw zero, 0(a1)2042; RV64I-LARGE-INTEGRATED-NEXT:    beqz a0, .LBB27_32043; RV64I-LARGE-INTEGRATED-NEXT:    #NO_APP2044; RV64I-LARGE-INTEGRATED-NEXT:  # %bb.1: # %normal02045; RV64I-LARGE-INTEGRATED-NEXT:    #APP2046; RV64I-LARGE-INTEGRATED-NEXT:    sw zero, 0(a1)2047; RV64I-LARGE-INTEGRATED-NEXT:    beqz a0, .LBB27_32048; RV64I-LARGE-INTEGRATED-NEXT:    #NO_APP2049; RV64I-LARGE-INTEGRATED-NEXT:  # %bb.2: # %normal12050; RV64I-LARGE-INTEGRATED-NEXT:    li a0, 02051; RV64I-LARGE-INTEGRATED-NEXT:    ret2052; RV64I-LARGE-INTEGRATED-NEXT:  .LBB27_3: # Inline asm indirect target2053; RV64I-LARGE-INTEGRATED-NEXT:    # %fail2054; RV64I-LARGE-INTEGRATED-NEXT:    # Label of block must be emitted2055; RV64I-LARGE-INTEGRATED-NEXT:    li a0, 12056; RV64I-LARGE-INTEGRATED-NEXT:    ret2057entry:2058  callbr void asm "sw zero, $0; beqz $1, $2", "=*o,r,!i"(ptr elementtype(i32) @eg, i32 %a) to label %normal0 [label %fail]2059 2060normal0:2061  callbr void asm "sw zero, $0; beqz $1, $2", "=*o,r,!i"(ptr elementtype(i32) @eg, i32 %a) to label %normal1 [label %fail]2062 2063normal1:2064  ret i32 02065 2066fail:2067  ret i32 12068}2069 2070define void @constraint_o_with_local_1() nounwind {2071; RV32I-LABEL: constraint_o_with_local_1:2072; RV32I:       # %bb.0: # %entry2073; RV32I-NEXT:  .Ltmp3: # Block address taken2074; RV32I-NEXT:  # %bb.1: # %label2075; RV32I-NEXT:    lui a0, %hi(.Ltmp3)2076; RV32I-NEXT:    #APP2077; RV32I-NEXT:    lw zero, %lo(.Ltmp3)(a0)2078; RV32I-NEXT:    #NO_APP2079; RV32I-NEXT:    ret2080;2081; RV64I-LABEL: constraint_o_with_local_1:2082; RV64I:       # %bb.0: # %entry2083; RV64I-NEXT:  .Ltmp3: # Block address taken2084; RV64I-NEXT:  # %bb.1: # %label2085; RV64I-NEXT:    lui a0, %hi(.Ltmp3)2086; RV64I-NEXT:    #APP2087; RV64I-NEXT:    lw zero, %lo(.Ltmp3)(a0)2088; RV64I-NEXT:    #NO_APP2089; RV64I-NEXT:    ret2090;2091; RV32I-MEDIUM-LABEL: constraint_o_with_local_1:2092; RV32I-MEDIUM:       # %bb.0: # %entry2093; RV32I-MEDIUM-NEXT:  .Ltmp3: # Block address taken2094; RV32I-MEDIUM-NEXT:  # %bb.1: # %label2095; RV32I-MEDIUM-NEXT:  .Lpcrel_hi22:2096; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(.Ltmp3)2097; RV32I-MEDIUM-NEXT:    #APP2098; RV32I-MEDIUM-NEXT:    lw zero, %pcrel_lo(.Lpcrel_hi22)(a0)2099; RV32I-MEDIUM-NEXT:    #NO_APP2100; RV32I-MEDIUM-NEXT:    ret2101;2102; RV64I-MEDIUM-LABEL: constraint_o_with_local_1:2103; RV64I-MEDIUM:       # %bb.0: # %entry2104; RV64I-MEDIUM-NEXT:  .Ltmp3: # Block address taken2105; RV64I-MEDIUM-NEXT:  # %bb.1: # %label2106; RV64I-MEDIUM-NEXT:  .Lpcrel_hi22:2107; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(.Ltmp3)2108; RV64I-MEDIUM-NEXT:    #APP2109; RV64I-MEDIUM-NEXT:    lw zero, %pcrel_lo(.Lpcrel_hi22)(a0)2110; RV64I-MEDIUM-NEXT:    #NO_APP2111; RV64I-MEDIUM-NEXT:    ret2112;2113; RV64I-LARGE-LABEL: constraint_o_with_local_1:2114; RV64I-LARGE:       # %bb.0: # %entry2115; RV64I-LARGE-NEXT:  .Ltmp3: # Block address taken2116; RV64I-LARGE-NEXT:  # %bb.1: # %label2117; RV64I-LARGE-NEXT:  .Lpcrel_hi22:2118; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.Ltmp3)2119; RV64I-LARGE-NEXT:    #APP2120; RV64I-LARGE-NEXT:    lw zero, %pcrel_lo(.Lpcrel_hi22)(a0)2121; RV64I-LARGE-NEXT:    #NO_APP2122; RV64I-LARGE-NEXT:    ret2123entry:2124  br label %label2125 2126label:2127  tail call void asm sideeffect "lw zero, $0", "*o"(ptr elementtype(ptr) blockaddress(@constraint_o_with_local_1, %label))2128  ret void2129}2130 2131define void @constraint_o_with_local_2() nounwind {2132; RV32I-LABEL: constraint_o_with_local_2:2133; RV32I:       # %bb.0: # %entry2134; RV32I-NEXT:  .Ltmp4: # Block address taken2135; RV32I-NEXT:  # %bb.1: # %label2136; RV32I-NEXT:    lui a0, %hi(.Ltmp4+4)2137; RV32I-NEXT:    #APP2138; RV32I-NEXT:    lw zero, %lo(.Ltmp4+4)(a0)2139; RV32I-NEXT:    #NO_APP2140; RV32I-NEXT:    ret2141;2142; RV64I-LABEL: constraint_o_with_local_2:2143; RV64I:       # %bb.0: # %entry2144; RV64I-NEXT:  .Ltmp4: # Block address taken2145; RV64I-NEXT:  # %bb.1: # %label2146; RV64I-NEXT:    lui a0, %hi(.Ltmp4+4)2147; RV64I-NEXT:    #APP2148; RV64I-NEXT:    lw zero, %lo(.Ltmp4+4)(a0)2149; RV64I-NEXT:    #NO_APP2150; RV64I-NEXT:    ret2151;2152; RV32I-MEDIUM-LABEL: constraint_o_with_local_2:2153; RV32I-MEDIUM:       # %bb.0: # %entry2154; RV32I-MEDIUM-NEXT:  .Ltmp4: # Block address taken2155; RV32I-MEDIUM-NEXT:  # %bb.1: # %label2156; RV32I-MEDIUM-NEXT:  .Lpcrel_hi23:2157; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(.Ltmp4+4)2158; RV32I-MEDIUM-NEXT:    #APP2159; RV32I-MEDIUM-NEXT:    lw zero, %pcrel_lo(.Lpcrel_hi23)(a0)2160; RV32I-MEDIUM-NEXT:    #NO_APP2161; RV32I-MEDIUM-NEXT:    ret2162;2163; RV64I-MEDIUM-LABEL: constraint_o_with_local_2:2164; RV64I-MEDIUM:       # %bb.0: # %entry2165; RV64I-MEDIUM-NEXT:  .Ltmp4: # Block address taken2166; RV64I-MEDIUM-NEXT:  # %bb.1: # %label2167; RV64I-MEDIUM-NEXT:  .Lpcrel_hi23:2168; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(.Ltmp4+4)2169; RV64I-MEDIUM-NEXT:    #APP2170; RV64I-MEDIUM-NEXT:    lw zero, %pcrel_lo(.Lpcrel_hi23)(a0)2171; RV64I-MEDIUM-NEXT:    #NO_APP2172; RV64I-MEDIUM-NEXT:    ret2173;2174; RV64I-LARGE-LABEL: constraint_o_with_local_2:2175; RV64I-LARGE:       # %bb.0: # %entry2176; RV64I-LARGE-NEXT:  .Ltmp4: # Block address taken2177; RV64I-LARGE-NEXT:  # %bb.1: # %label2178; RV64I-LARGE-NEXT:  .Lpcrel_hi23:2179; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.Ltmp4+4)2180; RV64I-LARGE-NEXT:    #APP2181; RV64I-LARGE-NEXT:    lw zero, %pcrel_lo(.Lpcrel_hi23)(a0)2182; RV64I-LARGE-NEXT:    #NO_APP2183; RV64I-LARGE-NEXT:    ret2184entry:2185  br label %label2186 2187label:2188  call void asm "lw zero, $0", "*o"(ptr elementtype(i32) getelementptr (i8, ptr blockaddress(@constraint_o_with_local_2, %label), i32 4))2189  ret void2190}2191 2192define void @constraint_o_with_local_3() nounwind {2193; RV32I-LABEL: constraint_o_with_local_3:2194; RV32I:       # %bb.0: # %entry2195; RV32I-NEXT:  .Ltmp5: # Block address taken2196; RV32I-NEXT:  # %bb.1: # %label2197; RV32I-NEXT:    lui a0, %hi(.Ltmp5+2000)2198; RV32I-NEXT:    #APP2199; RV32I-NEXT:    lw zero, %lo(.Ltmp5+2000)(a0)2200; RV32I-NEXT:    #NO_APP2201; RV32I-NEXT:    ret2202;2203; RV64I-LABEL: constraint_o_with_local_3:2204; RV64I:       # %bb.0: # %entry2205; RV64I-NEXT:  .Ltmp5: # Block address taken2206; RV64I-NEXT:  # %bb.1: # %label2207; RV64I-NEXT:    lui a0, %hi(.Ltmp5+2000)2208; RV64I-NEXT:    #APP2209; RV64I-NEXT:    lw zero, %lo(.Ltmp5+2000)(a0)2210; RV64I-NEXT:    #NO_APP2211; RV64I-NEXT:    ret2212;2213; RV32I-MEDIUM-LABEL: constraint_o_with_local_3:2214; RV32I-MEDIUM:       # %bb.0: # %entry2215; RV32I-MEDIUM-NEXT:  .Ltmp5: # Block address taken2216; RV32I-MEDIUM-NEXT:  # %bb.1: # %label2217; RV32I-MEDIUM-NEXT:  .Lpcrel_hi24:2218; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(.Ltmp5+2000)2219; RV32I-MEDIUM-NEXT:    #APP2220; RV32I-MEDIUM-NEXT:    lw zero, %pcrel_lo(.Lpcrel_hi24)(a0)2221; RV32I-MEDIUM-NEXT:    #NO_APP2222; RV32I-MEDIUM-NEXT:    ret2223;2224; RV64I-MEDIUM-LABEL: constraint_o_with_local_3:2225; RV64I-MEDIUM:       # %bb.0: # %entry2226; RV64I-MEDIUM-NEXT:  .Ltmp5: # Block address taken2227; RV64I-MEDIUM-NEXT:  # %bb.1: # %label2228; RV64I-MEDIUM-NEXT:  .Lpcrel_hi24:2229; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(.Ltmp5+2000)2230; RV64I-MEDIUM-NEXT:    #APP2231; RV64I-MEDIUM-NEXT:    lw zero, %pcrel_lo(.Lpcrel_hi24)(a0)2232; RV64I-MEDIUM-NEXT:    #NO_APP2233; RV64I-MEDIUM-NEXT:    ret2234;2235; RV64I-LARGE-LABEL: constraint_o_with_local_3:2236; RV64I-LARGE:       # %bb.0: # %entry2237; RV64I-LARGE-NEXT:  .Ltmp5: # Block address taken2238; RV64I-LARGE-NEXT:  # %bb.1: # %label2239; RV64I-LARGE-NEXT:  .Lpcrel_hi24:2240; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.Ltmp5+2000)2241; RV64I-LARGE-NEXT:    #APP2242; RV64I-LARGE-NEXT:    lw zero, %pcrel_lo(.Lpcrel_hi24)(a0)2243; RV64I-LARGE-NEXT:    #NO_APP2244; RV64I-LARGE-NEXT:    ret2245entry:2246  br label %label2247 2248label:2249  call void asm "lw zero, $0", "*o"(ptr elementtype(i32) getelementptr (i8, ptr blockaddress(@constraint_o_with_local_3, %label), i32 2000))2250  ret void2251}2252 2253define void @constraint_A(ptr %a) nounwind {2254; RV32I-LABEL: constraint_A:2255; RV32I:       # %bb.0:2256; RV32I-NEXT:    #APP2257; RV32I-NEXT:    sb s0, 0(a0)2258; RV32I-NEXT:    #NO_APP2259; RV32I-NEXT:    #APP2260; RV32I-NEXT:    lb s1, 0(a0)2261; RV32I-NEXT:    #NO_APP2262; RV32I-NEXT:    ret2263;2264; RV64I-LABEL: constraint_A:2265; RV64I:       # %bb.0:2266; RV64I-NEXT:    #APP2267; RV64I-NEXT:    sb s0, 0(a0)2268; RV64I-NEXT:    #NO_APP2269; RV64I-NEXT:    #APP2270; RV64I-NEXT:    lb s1, 0(a0)2271; RV64I-NEXT:    #NO_APP2272; RV64I-NEXT:    ret2273;2274; RV32I-MEDIUM-LABEL: constraint_A:2275; RV32I-MEDIUM:       # %bb.0:2276; RV32I-MEDIUM-NEXT:    #APP2277; RV32I-MEDIUM-NEXT:    sb s0, 0(a0)2278; RV32I-MEDIUM-NEXT:    #NO_APP2279; RV32I-MEDIUM-NEXT:    #APP2280; RV32I-MEDIUM-NEXT:    lb s1, 0(a0)2281; RV32I-MEDIUM-NEXT:    #NO_APP2282; RV32I-MEDIUM-NEXT:    ret2283;2284; RV64I-MEDIUM-LABEL: constraint_A:2285; RV64I-MEDIUM:       # %bb.0:2286; RV64I-MEDIUM-NEXT:    #APP2287; RV64I-MEDIUM-NEXT:    sb s0, 0(a0)2288; RV64I-MEDIUM-NEXT:    #NO_APP2289; RV64I-MEDIUM-NEXT:    #APP2290; RV64I-MEDIUM-NEXT:    lb s1, 0(a0)2291; RV64I-MEDIUM-NEXT:    #NO_APP2292; RV64I-MEDIUM-NEXT:    ret2293;2294; RV64I-LARGE-LABEL: constraint_A:2295; RV64I-LARGE:       # %bb.0:2296; RV64I-LARGE-NEXT:    #APP2297; RV64I-LARGE-NEXT:    sb s0, 0(a0)2298; RV64I-LARGE-NEXT:    #NO_APP2299; RV64I-LARGE-NEXT:    #APP2300; RV64I-LARGE-NEXT:    lb s1, 0(a0)2301; RV64I-LARGE-NEXT:    #NO_APP2302; RV64I-LARGE-NEXT:    ret2303  tail call void asm sideeffect "sb s0, $0", "*A"(ptr elementtype(i8) %a)2304  tail call void asm sideeffect "lb s1, $0", "*A"(ptr elementtype(i8) %a)2305  ret void2306}2307 2308define i32 @constraint_A_with_offset(ptr %a) nounwind {2309; RV32I-LABEL: constraint_A_with_offset:2310; RV32I:       # %bb.0:2311; RV32I-NEXT:    addi a0, a0, 42312; RV32I-NEXT:    #APP2313; RV32I-NEXT:    lw a0, 0(a0)2314; RV32I-NEXT:    #NO_APP2315; RV32I-NEXT:    ret2316;2317; RV64I-LABEL: constraint_A_with_offset:2318; RV64I:       # %bb.0:2319; RV64I-NEXT:    addi a0, a0, 42320; RV64I-NEXT:    #APP2321; RV64I-NEXT:    lw a0, 0(a0)2322; RV64I-NEXT:    #NO_APP2323; RV64I-NEXT:    ret2324;2325; RV32I-MEDIUM-LABEL: constraint_A_with_offset:2326; RV32I-MEDIUM:       # %bb.0:2327; RV32I-MEDIUM-NEXT:    addi a0, a0, 42328; RV32I-MEDIUM-NEXT:    #APP2329; RV32I-MEDIUM-NEXT:    lw a0, 0(a0)2330; RV32I-MEDIUM-NEXT:    #NO_APP2331; RV32I-MEDIUM-NEXT:    ret2332;2333; RV64I-MEDIUM-LABEL: constraint_A_with_offset:2334; RV64I-MEDIUM:       # %bb.0:2335; RV64I-MEDIUM-NEXT:    addi a0, a0, 42336; RV64I-MEDIUM-NEXT:    #APP2337; RV64I-MEDIUM-NEXT:    lw a0, 0(a0)2338; RV64I-MEDIUM-NEXT:    #NO_APP2339; RV64I-MEDIUM-NEXT:    ret2340;2341; RV64I-LARGE-LABEL: constraint_A_with_offset:2342; RV64I-LARGE:       # %bb.0:2343; RV64I-LARGE-NEXT:    addi a0, a0, 42344; RV64I-LARGE-NEXT:    #APP2345; RV64I-LARGE-NEXT:    lw a0, 0(a0)2346; RV64I-LARGE-NEXT:    #NO_APP2347; RV64I-LARGE-NEXT:    ret2348  %1 = getelementptr i32, ptr %a, i32 12349  %2 = tail call i32 asm "lw $0, $1", "=r,*A"(ptr elementtype(i32) %1)2350  ret i32 %22351}2352 2353define void @constraint_A_with_global_1() nounwind {2354; RV32I-LABEL: constraint_A_with_global_1:2355; RV32I:       # %bb.0:2356; RV32I-NEXT:    lui a0, %hi(eg)2357; RV32I-NEXT:    addi a0, a0, %lo(eg)2358; RV32I-NEXT:    #APP2359; RV32I-NEXT:    sw zero, 0(a0)2360; RV32I-NEXT:    #NO_APP2361; RV32I-NEXT:    ret2362;2363; RV64I-LABEL: constraint_A_with_global_1:2364; RV64I:       # %bb.0:2365; RV64I-NEXT:    lui a0, %hi(eg)2366; RV64I-NEXT:    addi a0, a0, %lo(eg)2367; RV64I-NEXT:    #APP2368; RV64I-NEXT:    sw zero, 0(a0)2369; RV64I-NEXT:    #NO_APP2370; RV64I-NEXT:    ret2371;2372; RV32I-MEDIUM-LABEL: constraint_A_with_global_1:2373; RV32I-MEDIUM:       # %bb.0:2374; RV32I-MEDIUM-NEXT:  .Lpcrel_hi25:2375; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg)2376; RV32I-MEDIUM-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi25)2377; RV32I-MEDIUM-NEXT:    #APP2378; RV32I-MEDIUM-NEXT:    sw zero, 0(a0)2379; RV32I-MEDIUM-NEXT:    #NO_APP2380; RV32I-MEDIUM-NEXT:    ret2381;2382; RV64I-MEDIUM-LABEL: constraint_A_with_global_1:2383; RV64I-MEDIUM:       # %bb.0:2384; RV64I-MEDIUM-NEXT:  .Lpcrel_hi25:2385; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg)2386; RV64I-MEDIUM-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi25)2387; RV64I-MEDIUM-NEXT:    #APP2388; RV64I-MEDIUM-NEXT:    sw zero, 0(a0)2389; RV64I-MEDIUM-NEXT:    #NO_APP2390; RV64I-MEDIUM-NEXT:    ret2391;2392; RV64I-LARGE-LABEL: constraint_A_with_global_1:2393; RV64I-LARGE:       # %bb.0:2394; RV64I-LARGE-NEXT:  .Lpcrel_hi25:2395; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI33_0)2396; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi25)(a0)2397; RV64I-LARGE-NEXT:    #APP2398; RV64I-LARGE-NEXT:    sw zero, 0(a0)2399; RV64I-LARGE-NEXT:    #NO_APP2400; RV64I-LARGE-NEXT:    ret2401  call void asm "sw zero, $0", "=*A"(ptr elementtype(i32) @eg)2402  ret void2403}2404 2405define void @constraint_A_with_global_2() nounwind {2406; RV32I-LABEL: constraint_A_with_global_2:2407; RV32I:       # %bb.0:2408; RV32I-NEXT:    lui a0, %hi(eg+4)2409; RV32I-NEXT:    addi a0, a0, %lo(eg+4)2410; RV32I-NEXT:    #APP2411; RV32I-NEXT:    sw zero, 0(a0)2412; RV32I-NEXT:    #NO_APP2413; RV32I-NEXT:    ret2414;2415; RV64I-LABEL: constraint_A_with_global_2:2416; RV64I:       # %bb.0:2417; RV64I-NEXT:    lui a0, %hi(eg+4)2418; RV64I-NEXT:    addi a0, a0, %lo(eg+4)2419; RV64I-NEXT:    #APP2420; RV64I-NEXT:    sw zero, 0(a0)2421; RV64I-NEXT:    #NO_APP2422; RV64I-NEXT:    ret2423;2424; RV32I-MEDIUM-LABEL: constraint_A_with_global_2:2425; RV32I-MEDIUM:       # %bb.0:2426; RV32I-MEDIUM-NEXT:  .Lpcrel_hi26:2427; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg+4)2428; RV32I-MEDIUM-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi26)2429; RV32I-MEDIUM-NEXT:    #APP2430; RV32I-MEDIUM-NEXT:    sw zero, 0(a0)2431; RV32I-MEDIUM-NEXT:    #NO_APP2432; RV32I-MEDIUM-NEXT:    ret2433;2434; RV64I-MEDIUM-LABEL: constraint_A_with_global_2:2435; RV64I-MEDIUM:       # %bb.0:2436; RV64I-MEDIUM-NEXT:  .Lpcrel_hi26:2437; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg+4)2438; RV64I-MEDIUM-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi26)2439; RV64I-MEDIUM-NEXT:    #APP2440; RV64I-MEDIUM-NEXT:    sw zero, 0(a0)2441; RV64I-MEDIUM-NEXT:    #NO_APP2442; RV64I-MEDIUM-NEXT:    ret2443;2444; RV64I-LARGE-LABEL: constraint_A_with_global_2:2445; RV64I-LARGE:       # %bb.0:2446; RV64I-LARGE-NEXT:  .Lpcrel_hi26:2447; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI34_0)2448; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi26)(a0)2449; RV64I-LARGE-NEXT:    addi a0, a0, 42450; RV64I-LARGE-NEXT:    #APP2451; RV64I-LARGE-NEXT:    sw zero, 0(a0)2452; RV64I-LARGE-NEXT:    #NO_APP2453; RV64I-LARGE-NEXT:    ret2454  call void asm "sw zero, $0", "=*A"(ptr elementtype(i32) getelementptr ([400000 x i32], ptr @eg, i32 0, i32 1))2455  ret void2456}2457 2458define void @constraint_A_with_global_3() nounwind {2459; RV32I-LABEL: constraint_A_with_global_3:2460; RV32I:       # %bb.0:2461; RV32I-NEXT:    lui a0, %hi(eg+8000)2462; RV32I-NEXT:    addi a0, a0, %lo(eg+8000)2463; RV32I-NEXT:    #APP2464; RV32I-NEXT:    sw zero, 0(a0)2465; RV32I-NEXT:    #NO_APP2466; RV32I-NEXT:    ret2467;2468; RV64I-LABEL: constraint_A_with_global_3:2469; RV64I:       # %bb.0:2470; RV64I-NEXT:    lui a0, %hi(eg+8000)2471; RV64I-NEXT:    addi a0, a0, %lo(eg+8000)2472; RV64I-NEXT:    #APP2473; RV64I-NEXT:    sw zero, 0(a0)2474; RV64I-NEXT:    #NO_APP2475; RV64I-NEXT:    ret2476;2477; RV32I-MEDIUM-LABEL: constraint_A_with_global_3:2478; RV32I-MEDIUM:       # %bb.0:2479; RV32I-MEDIUM-NEXT:  .Lpcrel_hi27:2480; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg+8000)2481; RV32I-MEDIUM-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi27)2482; RV32I-MEDIUM-NEXT:    #APP2483; RV32I-MEDIUM-NEXT:    sw zero, 0(a0)2484; RV32I-MEDIUM-NEXT:    #NO_APP2485; RV32I-MEDIUM-NEXT:    ret2486;2487; RV64I-MEDIUM-LABEL: constraint_A_with_global_3:2488; RV64I-MEDIUM:       # %bb.0:2489; RV64I-MEDIUM-NEXT:  .Lpcrel_hi27:2490; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg+8000)2491; RV64I-MEDIUM-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi27)2492; RV64I-MEDIUM-NEXT:    #APP2493; RV64I-MEDIUM-NEXT:    sw zero, 0(a0)2494; RV64I-MEDIUM-NEXT:    #NO_APP2495; RV64I-MEDIUM-NEXT:    ret2496;2497; RV64I-LARGE-LABEL: constraint_A_with_global_3:2498; RV64I-LARGE:       # %bb.0:2499; RV64I-LARGE-NEXT:  .Lpcrel_hi27:2500; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI35_0)2501; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi27)(a0)2502; RV64I-LARGE-NEXT:    lui a1, 22503; RV64I-LARGE-NEXT:    addi a1, a1, -1922504; RV64I-LARGE-NEXT:    add a0, a0, a12505; RV64I-LARGE-NEXT:    #APP2506; RV64I-LARGE-NEXT:    sw zero, 0(a0)2507; RV64I-LARGE-NEXT:    #NO_APP2508; RV64I-LARGE-NEXT:    ret2509  call void asm "sw zero, $0", "=*A"(ptr elementtype(i32) getelementptr ([400000 x i32], ptr @eg, i32 0, i32 2000))2510  ret void2511}2512 2513define void @constraint_A_with_extern_weak_global_1() nounwind {2514; RV32I-LABEL: constraint_A_with_extern_weak_global_1:2515; RV32I:       # %bb.0:2516; RV32I-NEXT:    lui a0, %hi(ewg)2517; RV32I-NEXT:    addi a0, a0, %lo(ewg)2518; RV32I-NEXT:    #APP2519; RV32I-NEXT:    sw zero, 0(a0)2520; RV32I-NEXT:    #NO_APP2521; RV32I-NEXT:    ret2522;2523; RV64I-LABEL: constraint_A_with_extern_weak_global_1:2524; RV64I:       # %bb.0:2525; RV64I-NEXT:    lui a0, %hi(ewg)2526; RV64I-NEXT:    addi a0, a0, %lo(ewg)2527; RV64I-NEXT:    #APP2528; RV64I-NEXT:    sw zero, 0(a0)2529; RV64I-NEXT:    #NO_APP2530; RV64I-NEXT:    ret2531;2532; RV32I-MEDIUM-LABEL: constraint_A_with_extern_weak_global_1:2533; RV32I-MEDIUM:       # %bb.0:2534; RV32I-MEDIUM-NEXT:  .Lpcrel_hi28:2535; RV32I-MEDIUM-NEXT:    auipc a0, %got_pcrel_hi(ewg)2536; RV32I-MEDIUM-NEXT:    lw a0, %pcrel_lo(.Lpcrel_hi28)(a0)2537; RV32I-MEDIUM-NEXT:    #APP2538; RV32I-MEDIUM-NEXT:    sw zero, 0(a0)2539; RV32I-MEDIUM-NEXT:    #NO_APP2540; RV32I-MEDIUM-NEXT:    ret2541;2542; RV64I-MEDIUM-LABEL: constraint_A_with_extern_weak_global_1:2543; RV64I-MEDIUM:       # %bb.0:2544; RV64I-MEDIUM-NEXT:  .Lpcrel_hi28:2545; RV64I-MEDIUM-NEXT:    auipc a0, %got_pcrel_hi(ewg)2546; RV64I-MEDIUM-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi28)(a0)2547; RV64I-MEDIUM-NEXT:    #APP2548; RV64I-MEDIUM-NEXT:    sw zero, 0(a0)2549; RV64I-MEDIUM-NEXT:    #NO_APP2550; RV64I-MEDIUM-NEXT:    ret2551;2552; RV64I-LARGE-LABEL: constraint_A_with_extern_weak_global_1:2553; RV64I-LARGE:       # %bb.0:2554; RV64I-LARGE-NEXT:  .Lpcrel_hi28:2555; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI36_0)2556; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi28)(a0)2557; RV64I-LARGE-NEXT:    #APP2558; RV64I-LARGE-NEXT:    sw zero, 0(a0)2559; RV64I-LARGE-NEXT:    #NO_APP2560; RV64I-LARGE-NEXT:    ret2561  call void asm "sw zero, $0", "=*A"(ptr elementtype(i32) @ewg)2562  ret void2563}2564 2565define void @constraint_A_with_extern_weak_global_2() nounwind {2566; RV32I-LABEL: constraint_A_with_extern_weak_global_2:2567; RV32I:       # %bb.0:2568; RV32I-NEXT:    lui a0, %hi(ewg+4)2569; RV32I-NEXT:    addi a0, a0, %lo(ewg+4)2570; RV32I-NEXT:    #APP2571; RV32I-NEXT:    sw zero, 0(a0)2572; RV32I-NEXT:    #NO_APP2573; RV32I-NEXT:    ret2574;2575; RV64I-LABEL: constraint_A_with_extern_weak_global_2:2576; RV64I:       # %bb.0:2577; RV64I-NEXT:    lui a0, %hi(ewg+4)2578; RV64I-NEXT:    addi a0, a0, %lo(ewg+4)2579; RV64I-NEXT:    #APP2580; RV64I-NEXT:    sw zero, 0(a0)2581; RV64I-NEXT:    #NO_APP2582; RV64I-NEXT:    ret2583;2584; RV32I-MEDIUM-LABEL: constraint_A_with_extern_weak_global_2:2585; RV32I-MEDIUM:       # %bb.0:2586; RV32I-MEDIUM-NEXT:  .Lpcrel_hi29:2587; RV32I-MEDIUM-NEXT:    auipc a0, %got_pcrel_hi(ewg)2588; RV32I-MEDIUM-NEXT:    lw a0, %pcrel_lo(.Lpcrel_hi29)(a0)2589; RV32I-MEDIUM-NEXT:    addi a0, a0, 42590; RV32I-MEDIUM-NEXT:    #APP2591; RV32I-MEDIUM-NEXT:    sw zero, 0(a0)2592; RV32I-MEDIUM-NEXT:    #NO_APP2593; RV32I-MEDIUM-NEXT:    ret2594;2595; RV64I-MEDIUM-LABEL: constraint_A_with_extern_weak_global_2:2596; RV64I-MEDIUM:       # %bb.0:2597; RV64I-MEDIUM-NEXT:  .Lpcrel_hi29:2598; RV64I-MEDIUM-NEXT:    auipc a0, %got_pcrel_hi(ewg)2599; RV64I-MEDIUM-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi29)(a0)2600; RV64I-MEDIUM-NEXT:    addi a0, a0, 42601; RV64I-MEDIUM-NEXT:    #APP2602; RV64I-MEDIUM-NEXT:    sw zero, 0(a0)2603; RV64I-MEDIUM-NEXT:    #NO_APP2604; RV64I-MEDIUM-NEXT:    ret2605;2606; RV64I-LARGE-LABEL: constraint_A_with_extern_weak_global_2:2607; RV64I-LARGE:       # %bb.0:2608; RV64I-LARGE-NEXT:  .Lpcrel_hi29:2609; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI37_0)2610; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi29)(a0)2611; RV64I-LARGE-NEXT:    addi a0, a0, 42612; RV64I-LARGE-NEXT:    #APP2613; RV64I-LARGE-NEXT:    sw zero, 0(a0)2614; RV64I-LARGE-NEXT:    #NO_APP2615; RV64I-LARGE-NEXT:    ret2616  call void asm "sw zero, $0", "=*A"(ptr elementtype(i32) getelementptr ([400000 x i32], ptr @ewg, i32 0, i32 1))2617  ret void2618}2619 2620define void @constraint_A_with_extern_weak_global_3() nounwind {2621; RV32I-LABEL: constraint_A_with_extern_weak_global_3:2622; RV32I:       # %bb.0:2623; RV32I-NEXT:    lui a0, %hi(ewg+8000)2624; RV32I-NEXT:    addi a0, a0, %lo(ewg+8000)2625; RV32I-NEXT:    #APP2626; RV32I-NEXT:    sw zero, 0(a0)2627; RV32I-NEXT:    #NO_APP2628; RV32I-NEXT:    ret2629;2630; RV64I-LABEL: constraint_A_with_extern_weak_global_3:2631; RV64I:       # %bb.0:2632; RV64I-NEXT:    lui a0, %hi(ewg+8000)2633; RV64I-NEXT:    addi a0, a0, %lo(ewg+8000)2634; RV64I-NEXT:    #APP2635; RV64I-NEXT:    sw zero, 0(a0)2636; RV64I-NEXT:    #NO_APP2637; RV64I-NEXT:    ret2638;2639; RV32I-MEDIUM-LABEL: constraint_A_with_extern_weak_global_3:2640; RV32I-MEDIUM:       # %bb.0:2641; RV32I-MEDIUM-NEXT:  .Lpcrel_hi30:2642; RV32I-MEDIUM-NEXT:    auipc a0, %got_pcrel_hi(ewg)2643; RV32I-MEDIUM-NEXT:    lw a0, %pcrel_lo(.Lpcrel_hi30)(a0)2644; RV32I-MEDIUM-NEXT:    lui a1, 22645; RV32I-MEDIUM-NEXT:    addi a1, a1, -1922646; RV32I-MEDIUM-NEXT:    add a0, a0, a12647; RV32I-MEDIUM-NEXT:    #APP2648; RV32I-MEDIUM-NEXT:    sw zero, 0(a0)2649; RV32I-MEDIUM-NEXT:    #NO_APP2650; RV32I-MEDIUM-NEXT:    ret2651;2652; RV64I-MEDIUM-LABEL: constraint_A_with_extern_weak_global_3:2653; RV64I-MEDIUM:       # %bb.0:2654; RV64I-MEDIUM-NEXT:  .Lpcrel_hi30:2655; RV64I-MEDIUM-NEXT:    auipc a0, %got_pcrel_hi(ewg)2656; RV64I-MEDIUM-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi30)(a0)2657; RV64I-MEDIUM-NEXT:    lui a1, 22658; RV64I-MEDIUM-NEXT:    addi a1, a1, -1922659; RV64I-MEDIUM-NEXT:    add a0, a0, a12660; RV64I-MEDIUM-NEXT:    #APP2661; RV64I-MEDIUM-NEXT:    sw zero, 0(a0)2662; RV64I-MEDIUM-NEXT:    #NO_APP2663; RV64I-MEDIUM-NEXT:    ret2664;2665; RV64I-LARGE-LABEL: constraint_A_with_extern_weak_global_3:2666; RV64I-LARGE:       # %bb.0:2667; RV64I-LARGE-NEXT:  .Lpcrel_hi30:2668; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI38_0)2669; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi30)(a0)2670; RV64I-LARGE-NEXT:    lui a1, 22671; RV64I-LARGE-NEXT:    addi a1, a1, -1922672; RV64I-LARGE-NEXT:    add a0, a0, a12673; RV64I-LARGE-NEXT:    #APP2674; RV64I-LARGE-NEXT:    sw zero, 0(a0)2675; RV64I-LARGE-NEXT:    #NO_APP2676; RV64I-LARGE-NEXT:    ret2677  call void asm "sw zero, $0", "=*A"(ptr elementtype(i32) getelementptr ([400000 x i32], ptr @ewg, i32 0, i32 2000))2678  ret void2679}2680 2681define void @constraint_A_with_multi_asm() nounwind {2682; RV32I-LABEL: constraint_A_with_multi_asm:2683; RV32I:       # %bb.0:2684; RV32I-NEXT:    lui a0, %hi(eg)2685; RV32I-NEXT:    addi a0, a0, %lo(eg)2686; RV32I-NEXT:    #APP2687; RV32I-NEXT:    sw zero, 0(a0)2688; RV32I-NEXT:    #NO_APP2689; RV32I-NEXT:    #APP2690; RV32I-NEXT:    sw zero, 0(a0)2691; RV32I-NEXT:    #NO_APP2692; RV32I-NEXT:    ret2693;2694; RV64I-LABEL: constraint_A_with_multi_asm:2695; RV64I:       # %bb.0:2696; RV64I-NEXT:    lui a0, %hi(eg)2697; RV64I-NEXT:    addi a0, a0, %lo(eg)2698; RV64I-NEXT:    #APP2699; RV64I-NEXT:    sw zero, 0(a0)2700; RV64I-NEXT:    #NO_APP2701; RV64I-NEXT:    #APP2702; RV64I-NEXT:    sw zero, 0(a0)2703; RV64I-NEXT:    #NO_APP2704; RV64I-NEXT:    ret2705;2706; RV32I-MEDIUM-LABEL: constraint_A_with_multi_asm:2707; RV32I-MEDIUM:       # %bb.0:2708; RV32I-MEDIUM-NEXT:  .Lpcrel_hi31:2709; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg)2710; RV32I-MEDIUM-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi31)2711; RV32I-MEDIUM-NEXT:    #APP2712; RV32I-MEDIUM-NEXT:    sw zero, 0(a0)2713; RV32I-MEDIUM-NEXT:    #NO_APP2714; RV32I-MEDIUM-NEXT:    #APP2715; RV32I-MEDIUM-NEXT:    sw zero, 0(a0)2716; RV32I-MEDIUM-NEXT:    #NO_APP2717; RV32I-MEDIUM-NEXT:    ret2718;2719; RV64I-MEDIUM-LABEL: constraint_A_with_multi_asm:2720; RV64I-MEDIUM:       # %bb.0:2721; RV64I-MEDIUM-NEXT:  .Lpcrel_hi31:2722; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg)2723; RV64I-MEDIUM-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi31)2724; RV64I-MEDIUM-NEXT:    #APP2725; RV64I-MEDIUM-NEXT:    sw zero, 0(a0)2726; RV64I-MEDIUM-NEXT:    #NO_APP2727; RV64I-MEDIUM-NEXT:    #APP2728; RV64I-MEDIUM-NEXT:    sw zero, 0(a0)2729; RV64I-MEDIUM-NEXT:    #NO_APP2730; RV64I-MEDIUM-NEXT:    ret2731;2732; RV64I-LARGE-LABEL: constraint_A_with_multi_asm:2733; RV64I-LARGE:       # %bb.0:2734; RV64I-LARGE-NEXT:  .Lpcrel_hi31:2735; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI39_0)2736; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi31)(a0)2737; RV64I-LARGE-NEXT:    #APP2738; RV64I-LARGE-NEXT:    sw zero, 0(a0)2739; RV64I-LARGE-NEXT:    #NO_APP2740; RV64I-LARGE-NEXT:    #APP2741; RV64I-LARGE-NEXT:    sw zero, 0(a0)2742; RV64I-LARGE-NEXT:    #NO_APP2743; RV64I-LARGE-NEXT:    ret2744  call void asm "sw zero, $0", "=*A"(ptr elementtype(i32) @eg)2745  call void asm "sw zero, $0", "=*A"(ptr elementtype(i32) @eg)2746  ret void2747}2748 2749define i32 @constraint_A_with_callbr_multi_operands(i32 %a) {2750; RV32I-NO-INTEGRATED-LABEL: constraint_A_with_callbr_multi_operands:2751; RV32I-NO-INTEGRATED:       # %bb.0: # %entry2752; RV32I-NO-INTEGRATED-NEXT:    lui a1, %hi(eg)2753; RV32I-NO-INTEGRATED-NEXT:    addi a1, a1, %lo(eg)2754; RV32I-NO-INTEGRATED-NEXT:    #APP2755; RV32I-NO-INTEGRATED-NEXT:    sw zero, 0(a1); sw zero, 0(a1); beqz a0, .LBB40_22756; RV32I-NO-INTEGRATED-NEXT:    #NO_APP2757; RV32I-NO-INTEGRATED-NEXT:  # %bb.1: # %normal2758; RV32I-NO-INTEGRATED-NEXT:    li a0, 02759; RV32I-NO-INTEGRATED-NEXT:    ret2760; RV32I-NO-INTEGRATED-NEXT:  .LBB40_2: # Inline asm indirect target2761; RV32I-NO-INTEGRATED-NEXT:    # %fail2762; RV32I-NO-INTEGRATED-NEXT:    # Label of block must be emitted2763; RV32I-NO-INTEGRATED-NEXT:    li a0, 12764; RV32I-NO-INTEGRATED-NEXT:    ret2765;2766; RV64I-NO-INTEGRATED-LABEL: constraint_A_with_callbr_multi_operands:2767; RV64I-NO-INTEGRATED:       # %bb.0: # %entry2768; RV64I-NO-INTEGRATED-NEXT:    lui a1, %hi(eg)2769; RV64I-NO-INTEGRATED-NEXT:    addi a1, a1, %lo(eg)2770; RV64I-NO-INTEGRATED-NEXT:    #APP2771; RV64I-NO-INTEGRATED-NEXT:    sw zero, 0(a1); sw zero, 0(a1); beqz a0, .LBB40_22772; RV64I-NO-INTEGRATED-NEXT:    #NO_APP2773; RV64I-NO-INTEGRATED-NEXT:  # %bb.1: # %normal2774; RV64I-NO-INTEGRATED-NEXT:    li a0, 02775; RV64I-NO-INTEGRATED-NEXT:    ret2776; RV64I-NO-INTEGRATED-NEXT:  .LBB40_2: # Inline asm indirect target2777; RV64I-NO-INTEGRATED-NEXT:    # %fail2778; RV64I-NO-INTEGRATED-NEXT:    # Label of block must be emitted2779; RV64I-NO-INTEGRATED-NEXT:    li a0, 12780; RV64I-NO-INTEGRATED-NEXT:    ret2781;2782; RV32I-MEDIUM-NO-INTEGRATED-LABEL: constraint_A_with_callbr_multi_operands:2783; RV32I-MEDIUM-NO-INTEGRATED:       # %bb.0: # %entry2784; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  .Lpcrel_hi32:2785; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)2786; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    addi a1, a1, %pcrel_lo(.Lpcrel_hi32)2787; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #APP2788; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, 0(a1); sw zero, 0(a1); beqz a0, .LBB40_22789; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP2790; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  # %bb.1: # %normal2791; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 02792; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    ret2793; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  .LBB40_2: # Inline asm indirect target2794; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    # %fail2795; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    # Label of block must be emitted2796; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 12797; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    ret2798;2799; RV64I-MEDIUM-NO-INTEGRATED-LABEL: constraint_A_with_callbr_multi_operands:2800; RV64I-MEDIUM-NO-INTEGRATED:       # %bb.0: # %entry2801; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  .Lpcrel_hi32:2802; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)2803; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    addi a1, a1, %pcrel_lo(.Lpcrel_hi32)2804; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #APP2805; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, 0(a1); sw zero, 0(a1); beqz a0, .LBB40_22806; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP2807; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  # %bb.1: # %normal2808; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 02809; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    ret2810; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  .LBB40_2: # Inline asm indirect target2811; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    # %fail2812; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    # Label of block must be emitted2813; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 12814; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    ret2815;2816; RV64I-LARGE-NO-INTEGRATED-LABEL: constraint_A_with_callbr_multi_operands:2817; RV64I-LARGE-NO-INTEGRATED:       # %bb.0: # %entry2818; RV64I-LARGE-NO-INTEGRATED-NEXT:  .Lpcrel_hi32:2819; RV64I-LARGE-NO-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(.LCPI40_0)2820; RV64I-LARGE-NO-INTEGRATED-NEXT:    ld a1, %pcrel_lo(.Lpcrel_hi32)(a1)2821; RV64I-LARGE-NO-INTEGRATED-NEXT:    #APP2822; RV64I-LARGE-NO-INTEGRATED-NEXT:    sw zero, 0(a1); sw zero, 0(a1); beqz a0, .LBB40_22823; RV64I-LARGE-NO-INTEGRATED-NEXT:    #NO_APP2824; RV64I-LARGE-NO-INTEGRATED-NEXT:  # %bb.1: # %normal2825; RV64I-LARGE-NO-INTEGRATED-NEXT:    li a0, 02826; RV64I-LARGE-NO-INTEGRATED-NEXT:    ret2827; RV64I-LARGE-NO-INTEGRATED-NEXT:  .LBB40_2: # Inline asm indirect target2828; RV64I-LARGE-NO-INTEGRATED-NEXT:    # %fail2829; RV64I-LARGE-NO-INTEGRATED-NEXT:    # Label of block must be emitted2830; RV64I-LARGE-NO-INTEGRATED-NEXT:    li a0, 12831; RV64I-LARGE-NO-INTEGRATED-NEXT:    ret2832;2833; RV32I-INTEGRATED-LABEL: constraint_A_with_callbr_multi_operands:2834; RV32I-INTEGRATED:       # %bb.0: # %entry2835; RV32I-INTEGRATED-NEXT:    lui a1, %hi(eg)2836; RV32I-INTEGRATED-NEXT:    addi a1, a1, %lo(eg)2837; RV32I-INTEGRATED-NEXT:    #APP2838; RV32I-INTEGRATED-NEXT:    sw zero, 0(a1)2839; RV32I-INTEGRATED-NEXT:    sw zero, 0(a1)2840; RV32I-INTEGRATED-NEXT:    beqz a0, .LBB40_22841; RV32I-INTEGRATED-NEXT:    #NO_APP2842; RV32I-INTEGRATED-NEXT:  # %bb.1: # %normal2843; RV32I-INTEGRATED-NEXT:    li a0, 02844; RV32I-INTEGRATED-NEXT:    ret2845; RV32I-INTEGRATED-NEXT:  .LBB40_2: # Inline asm indirect target2846; RV32I-INTEGRATED-NEXT:    # %fail2847; RV32I-INTEGRATED-NEXT:    # Label of block must be emitted2848; RV32I-INTEGRATED-NEXT:    li a0, 12849; RV32I-INTEGRATED-NEXT:    ret2850;2851; RV64I-INTEGRATED-LABEL: constraint_A_with_callbr_multi_operands:2852; RV64I-INTEGRATED:       # %bb.0: # %entry2853; RV64I-INTEGRATED-NEXT:    lui a1, %hi(eg)2854; RV64I-INTEGRATED-NEXT:    addi a1, a1, %lo(eg)2855; RV64I-INTEGRATED-NEXT:    #APP2856; RV64I-INTEGRATED-NEXT:    sw zero, 0(a1)2857; RV64I-INTEGRATED-NEXT:    sw zero, 0(a1)2858; RV64I-INTEGRATED-NEXT:    beqz a0, .LBB40_22859; RV64I-INTEGRATED-NEXT:    #NO_APP2860; RV64I-INTEGRATED-NEXT:  # %bb.1: # %normal2861; RV64I-INTEGRATED-NEXT:    li a0, 02862; RV64I-INTEGRATED-NEXT:    ret2863; RV64I-INTEGRATED-NEXT:  .LBB40_2: # Inline asm indirect target2864; RV64I-INTEGRATED-NEXT:    # %fail2865; RV64I-INTEGRATED-NEXT:    # Label of block must be emitted2866; RV64I-INTEGRATED-NEXT:    li a0, 12867; RV64I-INTEGRATED-NEXT:    ret2868;2869; RV32I-MEDIUM-INTEGRATED-LABEL: constraint_A_with_callbr_multi_operands:2870; RV32I-MEDIUM-INTEGRATED:       # %bb.0: # %entry2871; RV32I-MEDIUM-INTEGRATED-NEXT:  .Lpcrel_hi32:2872; RV32I-MEDIUM-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)2873; RV32I-MEDIUM-INTEGRATED-NEXT:    addi a1, a1, %pcrel_lo(.Lpcrel_hi32)2874; RV32I-MEDIUM-INTEGRATED-NEXT:    #APP2875; RV32I-MEDIUM-INTEGRATED-NEXT:    sw zero, 0(a1)2876; RV32I-MEDIUM-INTEGRATED-NEXT:    sw zero, 0(a1)2877; RV32I-MEDIUM-INTEGRATED-NEXT:    beqz a0, .LBB40_22878; RV32I-MEDIUM-INTEGRATED-NEXT:    #NO_APP2879; RV32I-MEDIUM-INTEGRATED-NEXT:  # %bb.1: # %normal2880; RV32I-MEDIUM-INTEGRATED-NEXT:    li a0, 02881; RV32I-MEDIUM-INTEGRATED-NEXT:    ret2882; RV32I-MEDIUM-INTEGRATED-NEXT:  .LBB40_2: # Inline asm indirect target2883; RV32I-MEDIUM-INTEGRATED-NEXT:    # %fail2884; RV32I-MEDIUM-INTEGRATED-NEXT:    # Label of block must be emitted2885; RV32I-MEDIUM-INTEGRATED-NEXT:    li a0, 12886; RV32I-MEDIUM-INTEGRATED-NEXT:    ret2887;2888; RV64I-MEDIUM-INTEGRATED-LABEL: constraint_A_with_callbr_multi_operands:2889; RV64I-MEDIUM-INTEGRATED:       # %bb.0: # %entry2890; RV64I-MEDIUM-INTEGRATED-NEXT:  .Lpcrel_hi32:2891; RV64I-MEDIUM-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)2892; RV64I-MEDIUM-INTEGRATED-NEXT:    addi a1, a1, %pcrel_lo(.Lpcrel_hi32)2893; RV64I-MEDIUM-INTEGRATED-NEXT:    #APP2894; RV64I-MEDIUM-INTEGRATED-NEXT:    sw zero, 0(a1)2895; RV64I-MEDIUM-INTEGRATED-NEXT:    sw zero, 0(a1)2896; RV64I-MEDIUM-INTEGRATED-NEXT:    beqz a0, .LBB40_22897; RV64I-MEDIUM-INTEGRATED-NEXT:    #NO_APP2898; RV64I-MEDIUM-INTEGRATED-NEXT:  # %bb.1: # %normal2899; RV64I-MEDIUM-INTEGRATED-NEXT:    li a0, 02900; RV64I-MEDIUM-INTEGRATED-NEXT:    ret2901; RV64I-MEDIUM-INTEGRATED-NEXT:  .LBB40_2: # Inline asm indirect target2902; RV64I-MEDIUM-INTEGRATED-NEXT:    # %fail2903; RV64I-MEDIUM-INTEGRATED-NEXT:    # Label of block must be emitted2904; RV64I-MEDIUM-INTEGRATED-NEXT:    li a0, 12905; RV64I-MEDIUM-INTEGRATED-NEXT:    ret2906;2907; RV64I-LARGE-INTEGRATED-LABEL: constraint_A_with_callbr_multi_operands:2908; RV64I-LARGE-INTEGRATED:       # %bb.0: # %entry2909; RV64I-LARGE-INTEGRATED-NEXT:  .Lpcrel_hi32:2910; RV64I-LARGE-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(.LCPI40_0)2911; RV64I-LARGE-INTEGRATED-NEXT:    ld a1, %pcrel_lo(.Lpcrel_hi32)(a1)2912; RV64I-LARGE-INTEGRATED-NEXT:    #APP2913; RV64I-LARGE-INTEGRATED-NEXT:    sw zero, 0(a1)2914; RV64I-LARGE-INTEGRATED-NEXT:    sw zero, 0(a1)2915; RV64I-LARGE-INTEGRATED-NEXT:    beqz a0, .LBB40_22916; RV64I-LARGE-INTEGRATED-NEXT:    #NO_APP2917; RV64I-LARGE-INTEGRATED-NEXT:  # %bb.1: # %normal2918; RV64I-LARGE-INTEGRATED-NEXT:    li a0, 02919; RV64I-LARGE-INTEGRATED-NEXT:    ret2920; RV64I-LARGE-INTEGRATED-NEXT:  .LBB40_2: # Inline asm indirect target2921; RV64I-LARGE-INTEGRATED-NEXT:    # %fail2922; RV64I-LARGE-INTEGRATED-NEXT:    # Label of block must be emitted2923; RV64I-LARGE-INTEGRATED-NEXT:    li a0, 12924; RV64I-LARGE-INTEGRATED-NEXT:    ret2925entry:2926  callbr void asm "sw zero, $0; sw zero, $1; beqz $2, $3", "*A,*A,r,!i"(ptr elementtype(i32) @eg, ptr elementtype(i32) @eg, i32 %a) to label %normal [label %fail]2927 2928normal:2929  ret i32 02930 2931fail:2932  ret i32 12933}2934 2935define i32 @constraint_A_with_multi_callbr_asm(i32 %a) {2936; RV32I-NO-INTEGRATED-LABEL: constraint_A_with_multi_callbr_asm:2937; RV32I-NO-INTEGRATED:       # %bb.0: # %entry2938; RV32I-NO-INTEGRATED-NEXT:    lui a1, %hi(eg)2939; RV32I-NO-INTEGRATED-NEXT:    addi a1, a1, %lo(eg)2940; RV32I-NO-INTEGRATED-NEXT:    #APP2941; RV32I-NO-INTEGRATED-NEXT:    sw zero, 0(a1); beqz a0, .LBB41_32942; RV32I-NO-INTEGRATED-NEXT:    #NO_APP2943; RV32I-NO-INTEGRATED-NEXT:  # %bb.1: # %normal02944; RV32I-NO-INTEGRATED-NEXT:    #APP2945; RV32I-NO-INTEGRATED-NEXT:    sw zero, 0(a1); beqz a0, .LBB41_32946; RV32I-NO-INTEGRATED-NEXT:    #NO_APP2947; RV32I-NO-INTEGRATED-NEXT:  # %bb.2: # %normal12948; RV32I-NO-INTEGRATED-NEXT:    li a0, 02949; RV32I-NO-INTEGRATED-NEXT:    ret2950; RV32I-NO-INTEGRATED-NEXT:  .LBB41_3: # Inline asm indirect target2951; RV32I-NO-INTEGRATED-NEXT:    # %fail2952; RV32I-NO-INTEGRATED-NEXT:    # Label of block must be emitted2953; RV32I-NO-INTEGRATED-NEXT:    li a0, 12954; RV32I-NO-INTEGRATED-NEXT:    ret2955;2956; RV64I-NO-INTEGRATED-LABEL: constraint_A_with_multi_callbr_asm:2957; RV64I-NO-INTEGRATED:       # %bb.0: # %entry2958; RV64I-NO-INTEGRATED-NEXT:    lui a1, %hi(eg)2959; RV64I-NO-INTEGRATED-NEXT:    addi a1, a1, %lo(eg)2960; RV64I-NO-INTEGRATED-NEXT:    #APP2961; RV64I-NO-INTEGRATED-NEXT:    sw zero, 0(a1); beqz a0, .LBB41_32962; RV64I-NO-INTEGRATED-NEXT:    #NO_APP2963; RV64I-NO-INTEGRATED-NEXT:  # %bb.1: # %normal02964; RV64I-NO-INTEGRATED-NEXT:    #APP2965; RV64I-NO-INTEGRATED-NEXT:    sw zero, 0(a1); beqz a0, .LBB41_32966; RV64I-NO-INTEGRATED-NEXT:    #NO_APP2967; RV64I-NO-INTEGRATED-NEXT:  # %bb.2: # %normal12968; RV64I-NO-INTEGRATED-NEXT:    li a0, 02969; RV64I-NO-INTEGRATED-NEXT:    ret2970; RV64I-NO-INTEGRATED-NEXT:  .LBB41_3: # Inline asm indirect target2971; RV64I-NO-INTEGRATED-NEXT:    # %fail2972; RV64I-NO-INTEGRATED-NEXT:    # Label of block must be emitted2973; RV64I-NO-INTEGRATED-NEXT:    li a0, 12974; RV64I-NO-INTEGRATED-NEXT:    ret2975;2976; RV32I-MEDIUM-NO-INTEGRATED-LABEL: constraint_A_with_multi_callbr_asm:2977; RV32I-MEDIUM-NO-INTEGRATED:       # %bb.0: # %entry2978; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  .Lpcrel_hi33:2979; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)2980; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    addi a1, a1, %pcrel_lo(.Lpcrel_hi33)2981; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #APP2982; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, 0(a1); beqz a0, .LBB41_32983; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP2984; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  # %bb.1: # %normal02985; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #APP2986; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, 0(a1); beqz a0, .LBB41_32987; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP2988; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  # %bb.2: # %normal12989; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 02990; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    ret2991; RV32I-MEDIUM-NO-INTEGRATED-NEXT:  .LBB41_3: # Inline asm indirect target2992; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    # %fail2993; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    # Label of block must be emitted2994; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 12995; RV32I-MEDIUM-NO-INTEGRATED-NEXT:    ret2996;2997; RV64I-MEDIUM-NO-INTEGRATED-LABEL: constraint_A_with_multi_callbr_asm:2998; RV64I-MEDIUM-NO-INTEGRATED:       # %bb.0: # %entry2999; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  .Lpcrel_hi33:3000; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)3001; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    addi a1, a1, %pcrel_lo(.Lpcrel_hi33)3002; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #APP3003; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, 0(a1); beqz a0, .LBB41_33004; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP3005; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  # %bb.1: # %normal03006; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #APP3007; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    sw zero, 0(a1); beqz a0, .LBB41_33008; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    #NO_APP3009; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  # %bb.2: # %normal13010; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 03011; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    ret3012; RV64I-MEDIUM-NO-INTEGRATED-NEXT:  .LBB41_3: # Inline asm indirect target3013; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    # %fail3014; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    # Label of block must be emitted3015; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    li a0, 13016; RV64I-MEDIUM-NO-INTEGRATED-NEXT:    ret3017;3018; RV64I-LARGE-NO-INTEGRATED-LABEL: constraint_A_with_multi_callbr_asm:3019; RV64I-LARGE-NO-INTEGRATED:       # %bb.0: # %entry3020; RV64I-LARGE-NO-INTEGRATED-NEXT:  .Lpcrel_hi33:3021; RV64I-LARGE-NO-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(.LCPI41_0)3022; RV64I-LARGE-NO-INTEGRATED-NEXT:    ld a1, %pcrel_lo(.Lpcrel_hi33)(a1)3023; RV64I-LARGE-NO-INTEGRATED-NEXT:    #APP3024; RV64I-LARGE-NO-INTEGRATED-NEXT:    sw zero, 0(a1); beqz a0, .LBB41_33025; RV64I-LARGE-NO-INTEGRATED-NEXT:    #NO_APP3026; RV64I-LARGE-NO-INTEGRATED-NEXT:  # %bb.1: # %normal03027; RV64I-LARGE-NO-INTEGRATED-NEXT:    #APP3028; RV64I-LARGE-NO-INTEGRATED-NEXT:    sw zero, 0(a1); beqz a0, .LBB41_33029; RV64I-LARGE-NO-INTEGRATED-NEXT:    #NO_APP3030; RV64I-LARGE-NO-INTEGRATED-NEXT:  # %bb.2: # %normal13031; RV64I-LARGE-NO-INTEGRATED-NEXT:    li a0, 03032; RV64I-LARGE-NO-INTEGRATED-NEXT:    ret3033; RV64I-LARGE-NO-INTEGRATED-NEXT:  .LBB41_3: # Inline asm indirect target3034; RV64I-LARGE-NO-INTEGRATED-NEXT:    # %fail3035; RV64I-LARGE-NO-INTEGRATED-NEXT:    # Label of block must be emitted3036; RV64I-LARGE-NO-INTEGRATED-NEXT:    li a0, 13037; RV64I-LARGE-NO-INTEGRATED-NEXT:    ret3038;3039; RV32I-INTEGRATED-LABEL: constraint_A_with_multi_callbr_asm:3040; RV32I-INTEGRATED:       # %bb.0: # %entry3041; RV32I-INTEGRATED-NEXT:    lui a1, %hi(eg)3042; RV32I-INTEGRATED-NEXT:    addi a1, a1, %lo(eg)3043; RV32I-INTEGRATED-NEXT:    #APP3044; RV32I-INTEGRATED-NEXT:    sw zero, 0(a1)3045; RV32I-INTEGRATED-NEXT:    beqz a0, .LBB41_33046; RV32I-INTEGRATED-NEXT:    #NO_APP3047; RV32I-INTEGRATED-NEXT:  # %bb.1: # %normal03048; RV32I-INTEGRATED-NEXT:    #APP3049; RV32I-INTEGRATED-NEXT:    sw zero, 0(a1)3050; RV32I-INTEGRATED-NEXT:    beqz a0, .LBB41_33051; RV32I-INTEGRATED-NEXT:    #NO_APP3052; RV32I-INTEGRATED-NEXT:  # %bb.2: # %normal13053; RV32I-INTEGRATED-NEXT:    li a0, 03054; RV32I-INTEGRATED-NEXT:    ret3055; RV32I-INTEGRATED-NEXT:  .LBB41_3: # Inline asm indirect target3056; RV32I-INTEGRATED-NEXT:    # %fail3057; RV32I-INTEGRATED-NEXT:    # Label of block must be emitted3058; RV32I-INTEGRATED-NEXT:    li a0, 13059; RV32I-INTEGRATED-NEXT:    ret3060;3061; RV64I-INTEGRATED-LABEL: constraint_A_with_multi_callbr_asm:3062; RV64I-INTEGRATED:       # %bb.0: # %entry3063; RV64I-INTEGRATED-NEXT:    lui a1, %hi(eg)3064; RV64I-INTEGRATED-NEXT:    addi a1, a1, %lo(eg)3065; RV64I-INTEGRATED-NEXT:    #APP3066; RV64I-INTEGRATED-NEXT:    sw zero, 0(a1)3067; RV64I-INTEGRATED-NEXT:    beqz a0, .LBB41_33068; RV64I-INTEGRATED-NEXT:    #NO_APP3069; RV64I-INTEGRATED-NEXT:  # %bb.1: # %normal03070; RV64I-INTEGRATED-NEXT:    #APP3071; RV64I-INTEGRATED-NEXT:    sw zero, 0(a1)3072; RV64I-INTEGRATED-NEXT:    beqz a0, .LBB41_33073; RV64I-INTEGRATED-NEXT:    #NO_APP3074; RV64I-INTEGRATED-NEXT:  # %bb.2: # %normal13075; RV64I-INTEGRATED-NEXT:    li a0, 03076; RV64I-INTEGRATED-NEXT:    ret3077; RV64I-INTEGRATED-NEXT:  .LBB41_3: # Inline asm indirect target3078; RV64I-INTEGRATED-NEXT:    # %fail3079; RV64I-INTEGRATED-NEXT:    # Label of block must be emitted3080; RV64I-INTEGRATED-NEXT:    li a0, 13081; RV64I-INTEGRATED-NEXT:    ret3082;3083; RV32I-MEDIUM-INTEGRATED-LABEL: constraint_A_with_multi_callbr_asm:3084; RV32I-MEDIUM-INTEGRATED:       # %bb.0: # %entry3085; RV32I-MEDIUM-INTEGRATED-NEXT:  .Lpcrel_hi33:3086; RV32I-MEDIUM-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)3087; RV32I-MEDIUM-INTEGRATED-NEXT:    addi a1, a1, %pcrel_lo(.Lpcrel_hi33)3088; RV32I-MEDIUM-INTEGRATED-NEXT:    #APP3089; RV32I-MEDIUM-INTEGRATED-NEXT:    sw zero, 0(a1)3090; RV32I-MEDIUM-INTEGRATED-NEXT:    beqz a0, .LBB41_33091; RV32I-MEDIUM-INTEGRATED-NEXT:    #NO_APP3092; RV32I-MEDIUM-INTEGRATED-NEXT:  # %bb.1: # %normal03093; RV32I-MEDIUM-INTEGRATED-NEXT:    #APP3094; RV32I-MEDIUM-INTEGRATED-NEXT:    sw zero, 0(a1)3095; RV32I-MEDIUM-INTEGRATED-NEXT:    beqz a0, .LBB41_33096; RV32I-MEDIUM-INTEGRATED-NEXT:    #NO_APP3097; RV32I-MEDIUM-INTEGRATED-NEXT:  # %bb.2: # %normal13098; RV32I-MEDIUM-INTEGRATED-NEXT:    li a0, 03099; RV32I-MEDIUM-INTEGRATED-NEXT:    ret3100; RV32I-MEDIUM-INTEGRATED-NEXT:  .LBB41_3: # Inline asm indirect target3101; RV32I-MEDIUM-INTEGRATED-NEXT:    # %fail3102; RV32I-MEDIUM-INTEGRATED-NEXT:    # Label of block must be emitted3103; RV32I-MEDIUM-INTEGRATED-NEXT:    li a0, 13104; RV32I-MEDIUM-INTEGRATED-NEXT:    ret3105;3106; RV64I-MEDIUM-INTEGRATED-LABEL: constraint_A_with_multi_callbr_asm:3107; RV64I-MEDIUM-INTEGRATED:       # %bb.0: # %entry3108; RV64I-MEDIUM-INTEGRATED-NEXT:  .Lpcrel_hi33:3109; RV64I-MEDIUM-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(eg)3110; RV64I-MEDIUM-INTEGRATED-NEXT:    addi a1, a1, %pcrel_lo(.Lpcrel_hi33)3111; RV64I-MEDIUM-INTEGRATED-NEXT:    #APP3112; RV64I-MEDIUM-INTEGRATED-NEXT:    sw zero, 0(a1)3113; RV64I-MEDIUM-INTEGRATED-NEXT:    beqz a0, .LBB41_33114; RV64I-MEDIUM-INTEGRATED-NEXT:    #NO_APP3115; RV64I-MEDIUM-INTEGRATED-NEXT:  # %bb.1: # %normal03116; RV64I-MEDIUM-INTEGRATED-NEXT:    #APP3117; RV64I-MEDIUM-INTEGRATED-NEXT:    sw zero, 0(a1)3118; RV64I-MEDIUM-INTEGRATED-NEXT:    beqz a0, .LBB41_33119; RV64I-MEDIUM-INTEGRATED-NEXT:    #NO_APP3120; RV64I-MEDIUM-INTEGRATED-NEXT:  # %bb.2: # %normal13121; RV64I-MEDIUM-INTEGRATED-NEXT:    li a0, 03122; RV64I-MEDIUM-INTEGRATED-NEXT:    ret3123; RV64I-MEDIUM-INTEGRATED-NEXT:  .LBB41_3: # Inline asm indirect target3124; RV64I-MEDIUM-INTEGRATED-NEXT:    # %fail3125; RV64I-MEDIUM-INTEGRATED-NEXT:    # Label of block must be emitted3126; RV64I-MEDIUM-INTEGRATED-NEXT:    li a0, 13127; RV64I-MEDIUM-INTEGRATED-NEXT:    ret3128;3129; RV64I-LARGE-INTEGRATED-LABEL: constraint_A_with_multi_callbr_asm:3130; RV64I-LARGE-INTEGRATED:       # %bb.0: # %entry3131; RV64I-LARGE-INTEGRATED-NEXT:  .Lpcrel_hi33:3132; RV64I-LARGE-INTEGRATED-NEXT:    auipc a1, %pcrel_hi(.LCPI41_0)3133; RV64I-LARGE-INTEGRATED-NEXT:    ld a1, %pcrel_lo(.Lpcrel_hi33)(a1)3134; RV64I-LARGE-INTEGRATED-NEXT:    #APP3135; RV64I-LARGE-INTEGRATED-NEXT:    sw zero, 0(a1)3136; RV64I-LARGE-INTEGRATED-NEXT:    beqz a0, .LBB41_33137; RV64I-LARGE-INTEGRATED-NEXT:    #NO_APP3138; RV64I-LARGE-INTEGRATED-NEXT:  # %bb.1: # %normal03139; RV64I-LARGE-INTEGRATED-NEXT:    #APP3140; RV64I-LARGE-INTEGRATED-NEXT:    sw zero, 0(a1)3141; RV64I-LARGE-INTEGRATED-NEXT:    beqz a0, .LBB41_33142; RV64I-LARGE-INTEGRATED-NEXT:    #NO_APP3143; RV64I-LARGE-INTEGRATED-NEXT:  # %bb.2: # %normal13144; RV64I-LARGE-INTEGRATED-NEXT:    li a0, 03145; RV64I-LARGE-INTEGRATED-NEXT:    ret3146; RV64I-LARGE-INTEGRATED-NEXT:  .LBB41_3: # Inline asm indirect target3147; RV64I-LARGE-INTEGRATED-NEXT:    # %fail3148; RV64I-LARGE-INTEGRATED-NEXT:    # Label of block must be emitted3149; RV64I-LARGE-INTEGRATED-NEXT:    li a0, 13150; RV64I-LARGE-INTEGRATED-NEXT:    ret3151entry:3152  callbr void asm "sw zero, $0; beqz $1, $2", "=*A,r,!i"(ptr elementtype(i32) @eg, i32 %a) to label %normal0 [label %fail]3153 3154normal0:3155  callbr void asm "sw zero, $0; beqz $1, $2", "=*A,r,!i"(ptr elementtype(i32) @eg, i32 %a) to label %normal1 [label %fail]3156 3157normal1:3158  ret i32 03159 3160fail:3161  ret i32 13162}3163 3164define void @constraint_A_with_local_1() nounwind {3165; RV32I-LABEL: constraint_A_with_local_1:3166; RV32I:       # %bb.0: # %entry3167; RV32I-NEXT:  .Ltmp6: # Block address taken3168; RV32I-NEXT:  # %bb.1: # %label3169; RV32I-NEXT:    lui a0, %hi(.Ltmp6)3170; RV32I-NEXT:    addi a0, a0, %lo(.Ltmp6)3171; RV32I-NEXT:    #APP3172; RV32I-NEXT:    lw zero, 0(a0)3173; RV32I-NEXT:    #NO_APP3174; RV32I-NEXT:    ret3175;3176; RV64I-LABEL: constraint_A_with_local_1:3177; RV64I:       # %bb.0: # %entry3178; RV64I-NEXT:  .Ltmp6: # Block address taken3179; RV64I-NEXT:  # %bb.1: # %label3180; RV64I-NEXT:    lui a0, %hi(.Ltmp6)3181; RV64I-NEXT:    addi a0, a0, %lo(.Ltmp6)3182; RV64I-NEXT:    #APP3183; RV64I-NEXT:    lw zero, 0(a0)3184; RV64I-NEXT:    #NO_APP3185; RV64I-NEXT:    ret3186;3187; RV32I-MEDIUM-LABEL: constraint_A_with_local_1:3188; RV32I-MEDIUM:       # %bb.0: # %entry3189; RV32I-MEDIUM-NEXT:  .Ltmp6: # Block address taken3190; RV32I-MEDIUM-NEXT:  # %bb.1: # %label3191; RV32I-MEDIUM-NEXT:  .Lpcrel_hi34:3192; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(.Ltmp6)3193; RV32I-MEDIUM-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi34)3194; RV32I-MEDIUM-NEXT:    #APP3195; RV32I-MEDIUM-NEXT:    lw zero, 0(a0)3196; RV32I-MEDIUM-NEXT:    #NO_APP3197; RV32I-MEDIUM-NEXT:    ret3198;3199; RV64I-MEDIUM-LABEL: constraint_A_with_local_1:3200; RV64I-MEDIUM:       # %bb.0: # %entry3201; RV64I-MEDIUM-NEXT:  .Ltmp6: # Block address taken3202; RV64I-MEDIUM-NEXT:  # %bb.1: # %label3203; RV64I-MEDIUM-NEXT:  .Lpcrel_hi34:3204; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(.Ltmp6)3205; RV64I-MEDIUM-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi34)3206; RV64I-MEDIUM-NEXT:    #APP3207; RV64I-MEDIUM-NEXT:    lw zero, 0(a0)3208; RV64I-MEDIUM-NEXT:    #NO_APP3209; RV64I-MEDIUM-NEXT:    ret3210;3211; RV64I-LARGE-LABEL: constraint_A_with_local_1:3212; RV64I-LARGE:       # %bb.0: # %entry3213; RV64I-LARGE-NEXT:  .Ltmp6: # Block address taken3214; RV64I-LARGE-NEXT:  # %bb.1: # %label3215; RV64I-LARGE-NEXT:  .Lpcrel_hi34:3216; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.Ltmp6)3217; RV64I-LARGE-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi34)3218; RV64I-LARGE-NEXT:    #APP3219; RV64I-LARGE-NEXT:    lw zero, 0(a0)3220; RV64I-LARGE-NEXT:    #NO_APP3221; RV64I-LARGE-NEXT:    ret3222entry:3223  br label %label3224 3225label:3226  tail call void asm sideeffect "lw zero, $0", "*A"(ptr elementtype(ptr) blockaddress(@constraint_A_with_local_1, %label))3227  ret void3228}3229 3230define void @constraint_A_with_local_2() nounwind {3231; RV32I-LABEL: constraint_A_with_local_2:3232; RV32I:       # %bb.0: # %entry3233; RV32I-NEXT:  .Ltmp7: # Block address taken3234; RV32I-NEXT:  # %bb.1: # %label3235; RV32I-NEXT:    lui a0, %hi(.Ltmp7+4)3236; RV32I-NEXT:    addi a0, a0, %lo(.Ltmp7+4)3237; RV32I-NEXT:    #APP3238; RV32I-NEXT:    lw zero, 0(a0)3239; RV32I-NEXT:    #NO_APP3240; RV32I-NEXT:    ret3241;3242; RV64I-LABEL: constraint_A_with_local_2:3243; RV64I:       # %bb.0: # %entry3244; RV64I-NEXT:  .Ltmp7: # Block address taken3245; RV64I-NEXT:  # %bb.1: # %label3246; RV64I-NEXT:    lui a0, %hi(.Ltmp7+4)3247; RV64I-NEXT:    addi a0, a0, %lo(.Ltmp7+4)3248; RV64I-NEXT:    #APP3249; RV64I-NEXT:    lw zero, 0(a0)3250; RV64I-NEXT:    #NO_APP3251; RV64I-NEXT:    ret3252;3253; RV32I-MEDIUM-LABEL: constraint_A_with_local_2:3254; RV32I-MEDIUM:       # %bb.0: # %entry3255; RV32I-MEDIUM-NEXT:  .Ltmp7: # Block address taken3256; RV32I-MEDIUM-NEXT:  # %bb.1: # %label3257; RV32I-MEDIUM-NEXT:  .Lpcrel_hi35:3258; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(.Ltmp7+4)3259; RV32I-MEDIUM-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi35)3260; RV32I-MEDIUM-NEXT:    #APP3261; RV32I-MEDIUM-NEXT:    lw zero, 0(a0)3262; RV32I-MEDIUM-NEXT:    #NO_APP3263; RV32I-MEDIUM-NEXT:    ret3264;3265; RV64I-MEDIUM-LABEL: constraint_A_with_local_2:3266; RV64I-MEDIUM:       # %bb.0: # %entry3267; RV64I-MEDIUM-NEXT:  .Ltmp7: # Block address taken3268; RV64I-MEDIUM-NEXT:  # %bb.1: # %label3269; RV64I-MEDIUM-NEXT:  .Lpcrel_hi35:3270; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(.Ltmp7+4)3271; RV64I-MEDIUM-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi35)3272; RV64I-MEDIUM-NEXT:    #APP3273; RV64I-MEDIUM-NEXT:    lw zero, 0(a0)3274; RV64I-MEDIUM-NEXT:    #NO_APP3275; RV64I-MEDIUM-NEXT:    ret3276;3277; RV64I-LARGE-LABEL: constraint_A_with_local_2:3278; RV64I-LARGE:       # %bb.0: # %entry3279; RV64I-LARGE-NEXT:  .Ltmp7: # Block address taken3280; RV64I-LARGE-NEXT:  # %bb.1: # %label3281; RV64I-LARGE-NEXT:  .Lpcrel_hi35:3282; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.Ltmp7+4)3283; RV64I-LARGE-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi35)3284; RV64I-LARGE-NEXT:    #APP3285; RV64I-LARGE-NEXT:    lw zero, 0(a0)3286; RV64I-LARGE-NEXT:    #NO_APP3287; RV64I-LARGE-NEXT:    ret3288entry:3289  br label %label3290 3291label:3292  call void asm "lw zero, $0", "*A"(ptr elementtype(i32) getelementptr (i8, ptr blockaddress(@constraint_A_with_local_2, %label), i32 4))3293  ret void3294}3295 3296define void @constraint_A_with_local_3() nounwind {3297; RV32I-LABEL: constraint_A_with_local_3:3298; RV32I:       # %bb.0: # %entry3299; RV32I-NEXT:  .Ltmp8: # Block address taken3300; RV32I-NEXT:  # %bb.1: # %label3301; RV32I-NEXT:    lui a0, %hi(.Ltmp8+2000)3302; RV32I-NEXT:    addi a0, a0, %lo(.Ltmp8+2000)3303; RV32I-NEXT:    #APP3304; RV32I-NEXT:    lw zero, 0(a0)3305; RV32I-NEXT:    #NO_APP3306; RV32I-NEXT:    ret3307;3308; RV64I-LABEL: constraint_A_with_local_3:3309; RV64I:       # %bb.0: # %entry3310; RV64I-NEXT:  .Ltmp8: # Block address taken3311; RV64I-NEXT:  # %bb.1: # %label3312; RV64I-NEXT:    lui a0, %hi(.Ltmp8+2000)3313; RV64I-NEXT:    addi a0, a0, %lo(.Ltmp8+2000)3314; RV64I-NEXT:    #APP3315; RV64I-NEXT:    lw zero, 0(a0)3316; RV64I-NEXT:    #NO_APP3317; RV64I-NEXT:    ret3318;3319; RV32I-MEDIUM-LABEL: constraint_A_with_local_3:3320; RV32I-MEDIUM:       # %bb.0: # %entry3321; RV32I-MEDIUM-NEXT:  .Ltmp8: # Block address taken3322; RV32I-MEDIUM-NEXT:  # %bb.1: # %label3323; RV32I-MEDIUM-NEXT:  .Lpcrel_hi36:3324; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(.Ltmp8+2000)3325; RV32I-MEDIUM-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi36)3326; RV32I-MEDIUM-NEXT:    #APP3327; RV32I-MEDIUM-NEXT:    lw zero, 0(a0)3328; RV32I-MEDIUM-NEXT:    #NO_APP3329; RV32I-MEDIUM-NEXT:    ret3330;3331; RV64I-MEDIUM-LABEL: constraint_A_with_local_3:3332; RV64I-MEDIUM:       # %bb.0: # %entry3333; RV64I-MEDIUM-NEXT:  .Ltmp8: # Block address taken3334; RV64I-MEDIUM-NEXT:  # %bb.1: # %label3335; RV64I-MEDIUM-NEXT:  .Lpcrel_hi36:3336; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(.Ltmp8+2000)3337; RV64I-MEDIUM-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi36)3338; RV64I-MEDIUM-NEXT:    #APP3339; RV64I-MEDIUM-NEXT:    lw zero, 0(a0)3340; RV64I-MEDIUM-NEXT:    #NO_APP3341; RV64I-MEDIUM-NEXT:    ret3342;3343; RV64I-LARGE-LABEL: constraint_A_with_local_3:3344; RV64I-LARGE:       # %bb.0: # %entry3345; RV64I-LARGE-NEXT:  .Ltmp8: # Block address taken3346; RV64I-LARGE-NEXT:  # %bb.1: # %label3347; RV64I-LARGE-NEXT:  .Lpcrel_hi36:3348; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.Ltmp8+2000)3349; RV64I-LARGE-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi36)3350; RV64I-LARGE-NEXT:    #APP3351; RV64I-LARGE-NEXT:    lw zero, 0(a0)3352; RV64I-LARGE-NEXT:    #NO_APP3353; RV64I-LARGE-NEXT:    ret3354entry:3355  br label %label3356 3357label:3358  call void asm "lw zero, $0", "*A"(ptr elementtype(i32) getelementptr (i8, ptr blockaddress(@constraint_A_with_local_3, %label), i32 2000))3359  ret void3360}3361 3362@_ZN5repro9MY_BUFFER17hb0f674501d5980a6E = external global <{ [16 x i8] }>3363 3364; Address is not used by a memory constraint.3365define void @should_not_fold() {3366; RV32I-LABEL: should_not_fold:3367; RV32I:       # %bb.0: # %start3368; RV32I-NEXT:    lui a0, %hi(_ZN5repro9MY_BUFFER17hb0f674501d5980a6E)3369; RV32I-NEXT:    addi a0, a0, %lo(_ZN5repro9MY_BUFFER17hb0f674501d5980a6E)3370; RV32I-NEXT:    #APP3371; RV32I-NEXT:    ecall3372; RV32I-NEXT:    #NO_APP3373; RV32I-NEXT:    ret3374;3375; RV64I-LABEL: should_not_fold:3376; RV64I:       # %bb.0: # %start3377; RV64I-NEXT:    lui a0, %hi(_ZN5repro9MY_BUFFER17hb0f674501d5980a6E)3378; RV64I-NEXT:    addi a0, a0, %lo(_ZN5repro9MY_BUFFER17hb0f674501d5980a6E)3379; RV64I-NEXT:    #APP3380; RV64I-NEXT:    ecall3381; RV64I-NEXT:    #NO_APP3382; RV64I-NEXT:    ret3383;3384; RV32I-MEDIUM-LABEL: should_not_fold:3385; RV32I-MEDIUM:       # %bb.0: # %start3386; RV32I-MEDIUM-NEXT:  .Lpcrel_hi37:3387; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(_ZN5repro9MY_BUFFER17hb0f674501d5980a6E)3388; RV32I-MEDIUM-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi37)3389; RV32I-MEDIUM-NEXT:    #APP3390; RV32I-MEDIUM-NEXT:    ecall3391; RV32I-MEDIUM-NEXT:    #NO_APP3392; RV32I-MEDIUM-NEXT:    ret3393;3394; RV64I-MEDIUM-LABEL: should_not_fold:3395; RV64I-MEDIUM:       # %bb.0: # %start3396; RV64I-MEDIUM-NEXT:  .Lpcrel_hi37:3397; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(_ZN5repro9MY_BUFFER17hb0f674501d5980a6E)3398; RV64I-MEDIUM-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi37)3399; RV64I-MEDIUM-NEXT:    #APP3400; RV64I-MEDIUM-NEXT:    ecall3401; RV64I-MEDIUM-NEXT:    #NO_APP3402; RV64I-MEDIUM-NEXT:    ret3403;3404; RV64I-LARGE-LABEL: should_not_fold:3405; RV64I-LARGE:       # %bb.0: # %start3406; RV64I-LARGE-NEXT:  .Lpcrel_hi37:3407; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI45_0)3408; RV64I-LARGE-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi37)(a0)3409; RV64I-LARGE-NEXT:    #APP3410; RV64I-LARGE-NEXT:    ecall3411; RV64I-LARGE-NEXT:    #NO_APP3412; RV64I-LARGE-NEXT:    ret3413start:3414  %0 = tail call ptr asm sideeffect alignstack "ecall", "=&{x10},0,~{vtype},~{vl},~{vxsat},~{vxrm},~{memory}"(ptr @_ZN5repro9MY_BUFFER17hb0f674501d5980a6E)3415  ret void3416}3417