brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.8 KiB · fa8a4fc Raw
357 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42target datalayout = "e-m:e-i64:64-n32:64"3target triple = "powerpc64le-unknown-linux-gnu"4; This file mainly tests that one of the ISEL instruction in the group uses the same register for operand RT, RA, RB5; This redundant ISEL is introduced during register coalescing stage.6 7; Register coalescing first create the foldable ISEL instruction as we have seen in expand-foldable-isel.ll:8; %vreg85<def> = ISEL8 %vreg83, %vreg83, %vreg33:sub_eq9 10; Later the register coalescer figures out it could further coalesce %vreg85 with %vreg83:11; merge %vreg85:1@2288r into %vreg83:5@400B --> @400B12; erased:	2288r	%vreg85<def> = COPY %vreg8313 14; After that we have:15; updated: 1504B	%vreg83<def> = ISEL8 %vreg83, %vreg83, %vreg33:sub_eq16 17; RUN: llc -verify-machineinstrs -O2 -ppc-asm-full-reg-names -mcpu=pwr7 -mattr=+isel < %s | FileCheck %s --check-prefix=CHECK-GEN-ISEL-TRUE18; RUN: llc -verify-machineinstrs -O2 -ppc-asm-full-reg-names -mcpu=pwr7 -mattr=-isel < %s | FileCheck %s --implicit-check-not isel19 20@.str = private unnamed_addr constant [3 x i8] c"]]\00", align 121@.str.1 = private unnamed_addr constant [35 x i8] c"Index < Length && \22Invalid index!\22\00", align 122@.str.2 = private unnamed_addr constant [50 x i8] c"/home/jtony/src/llvm/include/llvm/ADT/StringRef.h\00", align 123@__PRETTY_FUNCTION__._ZNK4llvm9StringRefixEm = private unnamed_addr constant [47 x i8] c"char llvm::StringRef::operator[](size_t) const\00", align 124@.str.3 = private unnamed_addr constant [95 x i8] c"(data || length == 0) && \22StringRef cannot be built from a NULL argument with non-null length\22\00", align 125@__PRETTY_FUNCTION__._ZN4llvm9StringRefC2EPKcm = private unnamed_addr constant [49 x i8] c"llvm::StringRef::StringRef(const char *, size_t)\00", align 126define i64 @_Z3fn1N4llvm9StringRefE([2 x i64] %Str.coerce) {27; CHECK-GEN-ISEL-TRUE-LABEL: _Z3fn1N4llvm9StringRefE:28; CHECK-GEN-ISEL-TRUE:       # %bb.0: # %entry29; CHECK-GEN-ISEL-TRUE-NEXT:    mflr r030; CHECK-GEN-ISEL-TRUE-NEXT:    stdu r1, -32(r1)31; CHECK-GEN-ISEL-TRUE-NEXT:    std r0, 48(r1)32; CHECK-GEN-ISEL-TRUE-NEXT:    .cfi_def_cfa_offset 3233; CHECK-GEN-ISEL-TRUE-NEXT:    .cfi_offset lr, 1634; CHECK-GEN-ISEL-TRUE-NEXT:    li r5, 235; CHECK-GEN-ISEL-TRUE-NEXT:    # implicit-def: $x636; CHECK-GEN-ISEL-TRUE-NEXT:    b .LBB0_337; CHECK-GEN-ISEL-TRUE-NEXT:    .p2align 438; CHECK-GEN-ISEL-TRUE-NEXT:  .LBB0_1: # %_ZNK4llvm9StringRefixEm.exit39; CHECK-GEN-ISEL-TRUE-NEXT:    #40; CHECK-GEN-ISEL-TRUE-NEXT:    cmplwi r7, 9341; CHECK-GEN-ISEL-TRUE-NEXT:    addi r7, r6, -142; CHECK-GEN-ISEL-TRUE-NEXT:    iseleq r6, r7, r643; CHECK-GEN-ISEL-TRUE-NEXT:  .LBB0_2: # %_ZNK4llvm9StringRef6substrEmm.exit44; CHECK-GEN-ISEL-TRUE-NEXT:    #45; CHECK-GEN-ISEL-TRUE-NEXT:    addi r4, r4, -146; CHECK-GEN-ISEL-TRUE-NEXT:    addi r3, r3, 147; CHECK-GEN-ISEL-TRUE-NEXT:  .LBB0_3: # %while.cond.outer48; CHECK-GEN-ISEL-TRUE-NEXT:    # =>This Loop Header: Depth=149; CHECK-GEN-ISEL-TRUE-NEXT:    # Child Loop BB0_5 Depth 250; CHECK-GEN-ISEL-TRUE-NEXT:    # Child Loop BB0_8 Depth 251; CHECK-GEN-ISEL-TRUE-NEXT:    cmpldi r6, 052; CHECK-GEN-ISEL-TRUE-NEXT:    beq cr0, .LBB0_853; CHECK-GEN-ISEL-TRUE-NEXT:  # %bb.4: # %while.cond.preheader54; CHECK-GEN-ISEL-TRUE-NEXT:    #55; CHECK-GEN-ISEL-TRUE-NEXT:    cmpldi r4, 056; CHECK-GEN-ISEL-TRUE-NEXT:    beq- cr0, .LBB0_1557; CHECK-GEN-ISEL-TRUE-NEXT:    .p2align 558; CHECK-GEN-ISEL-TRUE-NEXT:  .LBB0_5: # %_ZNK4llvm9StringRefixEm.exit59; CHECK-GEN-ISEL-TRUE-NEXT:    # Parent Loop BB0_3 Depth=160; CHECK-GEN-ISEL-TRUE-NEXT:    # => This Inner Loop Header: Depth=261; CHECK-GEN-ISEL-TRUE-NEXT:    lbz r7, 0(r3)62; CHECK-GEN-ISEL-TRUE-NEXT:    cmplwi r7, 9263; CHECK-GEN-ISEL-TRUE-NEXT:    bne cr0, .LBB0_164; CHECK-GEN-ISEL-TRUE-NEXT:  # %bb.6: # %if.then465; CHECK-GEN-ISEL-TRUE-NEXT:    #66; CHECK-GEN-ISEL-TRUE-NEXT:    cmpldi r4, 267; CHECK-GEN-ISEL-TRUE-NEXT:    isellt r7, r4, r568; CHECK-GEN-ISEL-TRUE-NEXT:    add r3, r3, r769; CHECK-GEN-ISEL-TRUE-NEXT:    sub. r4, r4, r770; CHECK-GEN-ISEL-TRUE-NEXT:    bne+ cr0, .LBB0_571; CHECK-GEN-ISEL-TRUE-NEXT:    b .LBB0_1572; CHECK-GEN-ISEL-TRUE-NEXT:    .p2align 573; CHECK-GEN-ISEL-TRUE-NEXT:  .LBB0_7: # %if.then4.us74; CHECK-GEN-ISEL-TRUE-NEXT:    #75; CHECK-GEN-ISEL-TRUE-NEXT:    isellt r6, r4, r576; CHECK-GEN-ISEL-TRUE-NEXT:    add r3, r3, r677; CHECK-GEN-ISEL-TRUE-NEXT:    sub r4, r4, r678; CHECK-GEN-ISEL-TRUE-NEXT:  .LBB0_8: # %while.cond.us79; CHECK-GEN-ISEL-TRUE-NEXT:    # Parent Loop BB0_3 Depth=180; CHECK-GEN-ISEL-TRUE-NEXT:    # => This Inner Loop Header: Depth=281; CHECK-GEN-ISEL-TRUE-NEXT:    cmpldi r4, 282; CHECK-GEN-ISEL-TRUE-NEXT:    bge cr0, .LBB0_1083; CHECK-GEN-ISEL-TRUE-NEXT:  # %bb.9: # %if.end.us84; CHECK-GEN-ISEL-TRUE-NEXT:    #85; CHECK-GEN-ISEL-TRUE-NEXT:    cmpldi cr1, r4, 086; CHECK-GEN-ISEL-TRUE-NEXT:    bne+ cr1, .LBB0_1187; CHECK-GEN-ISEL-TRUE-NEXT:    b .LBB0_1588; CHECK-GEN-ISEL-TRUE-NEXT:    .p2align 589; CHECK-GEN-ISEL-TRUE-NEXT:  .LBB0_10: # %if.end.i.i.us90; CHECK-GEN-ISEL-TRUE-NEXT:    #91; CHECK-GEN-ISEL-TRUE-NEXT:    lhz r6, 0(r3)92; CHECK-GEN-ISEL-TRUE-NEXT:    cmplwi cr1, r6, 2390193; CHECK-GEN-ISEL-TRUE-NEXT:    beq cr1, .LBB0_1494; CHECK-GEN-ISEL-TRUE-NEXT:  .LBB0_11: # %_ZNK4llvm9StringRefixEm.exit.us95; CHECK-GEN-ISEL-TRUE-NEXT:    #96; CHECK-GEN-ISEL-TRUE-NEXT:    lbz r6, 0(r3)97; CHECK-GEN-ISEL-TRUE-NEXT:    cmplwi cr1, r6, 9298; CHECK-GEN-ISEL-TRUE-NEXT:    beq cr1, .LBB0_799; CHECK-GEN-ISEL-TRUE-NEXT:  # %bb.12: # %_ZNK4llvm9StringRefixEm.exit.us100; CHECK-GEN-ISEL-TRUE-NEXT:    #101; CHECK-GEN-ISEL-TRUE-NEXT:    cmplwi r6, 93102; CHECK-GEN-ISEL-TRUE-NEXT:    beq cr0, .LBB0_16103; CHECK-GEN-ISEL-TRUE-NEXT:  # %bb.13: # %_ZNK4llvm9StringRef6substrEmm.exit.loopexit104; CHECK-GEN-ISEL-TRUE-NEXT:    #105; CHECK-GEN-ISEL-TRUE-NEXT:    li r6, 0106; CHECK-GEN-ISEL-TRUE-NEXT:    b .LBB0_2107; CHECK-GEN-ISEL-TRUE-NEXT:  .LBB0_14: # %if.then108; CHECK-GEN-ISEL-TRUE-NEXT:    addi r1, r1, 32109; CHECK-GEN-ISEL-TRUE-NEXT:    ld r0, 16(r1)110; CHECK-GEN-ISEL-TRUE-NEXT:    mtlr r0111; CHECK-GEN-ISEL-TRUE-NEXT:    blr112; CHECK-GEN-ISEL-TRUE-NEXT:  .LBB0_15: # %cond.false.i113; CHECK-GEN-ISEL-TRUE-NEXT:    addis r3, r2, .L_MergedGlobals@toc@ha114; CHECK-GEN-ISEL-TRUE-NEXT:    addi r5, r3, .L_MergedGlobals@toc@l115; CHECK-GEN-ISEL-TRUE-NEXT:    addi r3, r5, 3116; CHECK-GEN-ISEL-TRUE-NEXT:    addi r4, r5, 134117; CHECK-GEN-ISEL-TRUE-NEXT:    addi r6, r5, 38118; CHECK-GEN-ISEL-TRUE-NEXT:    li r5, 225119; CHECK-GEN-ISEL-TRUE-NEXT:    bl __assert_fail120; CHECK-GEN-ISEL-TRUE-NEXT:    nop121; CHECK-GEN-ISEL-TRUE-NEXT:  .LBB0_16: # %if.then9122; CHECK-GEN-ISEL-TRUE-NEXT:    li r3, 1123; CHECK-GEN-ISEL-TRUE-NEXT:    bl exit124; CHECK-GEN-ISEL-TRUE-NEXT:    nop125;126; CHECK-LABEL: _Z3fn1N4llvm9StringRefE:127; CHECK:       # %bb.0: # %entry128; CHECK-NEXT:    mflr r0129; CHECK-NEXT:    stdu r1, -32(r1)130; CHECK-NEXT:    std r0, 48(r1)131; CHECK-NEXT:    .cfi_def_cfa_offset 32132; CHECK-NEXT:    .cfi_offset lr, 16133; CHECK-NEXT:    # implicit-def: $x5134; CHECK-NEXT:    b .LBB0_2135; CHECK-NEXT:    .p2align 4136; CHECK-NEXT:  .LBB0_1: # %_ZNK4llvm9StringRef6substrEmm.exit137; CHECK-NEXT:    #138; CHECK-NEXT:    addi r4, r4, -1139; CHECK-NEXT:    addi r3, r3, 1140; CHECK-NEXT:  .LBB0_2: # %while.cond.outer141; CHECK-NEXT:    # =>This Loop Header: Depth=1142; CHECK-NEXT:    # Child Loop BB0_5 Depth 2143; CHECK-NEXT:    # Child Loop BB0_9 Depth 2144; CHECK-NEXT:    cmpldi r5, 0145; CHECK-NEXT:    beq cr0, .LBB0_9146; CHECK-NEXT:  # %bb.3: # %while.cond.preheader147; CHECK-NEXT:    #148; CHECK-NEXT:    cmpldi r4, 0149; CHECK-NEXT:    bne+ cr0, .LBB0_5150; CHECK-NEXT:    b .LBB0_20151; CHECK-NEXT:    .p2align 5152; CHECK-NEXT:  .LBB0_4: # %if.then4153; CHECK-NEXT:    #154; CHECK-NEXT:    add r3, r3, r6155; CHECK-NEXT:    sub. r4, r4, r6156; CHECK-NEXT:    beq- cr0, .LBB0_20157; CHECK-NEXT:  .LBB0_5: # %_ZNK4llvm9StringRefixEm.exit158; CHECK-NEXT:    # Parent Loop BB0_2 Depth=1159; CHECK-NEXT:    # => This Inner Loop Header: Depth=2160; CHECK-NEXT:    lbz r6, 0(r3)161; CHECK-NEXT:    cmplwi r6, 92162; CHECK-NEXT:    bne cr0, .LBB0_15163; CHECK-NEXT:  # %bb.6: # %if.then4164; CHECK-NEXT:    #165; CHECK-NEXT:    cmpldi r4, 2166; CHECK-NEXT:    mr r6, r4167; CHECK-NEXT:    blt cr0, .LBB0_4168; CHECK-NEXT:  # %bb.7: # %if.then4169; CHECK-NEXT:    #170; CHECK-NEXT:    li r6, 2171; CHECK-NEXT:    b .LBB0_4172; CHECK-NEXT:    .p2align 5173; CHECK-NEXT:  .LBB0_8: # %if.then4.us174; CHECK-NEXT:    #175; CHECK-NEXT:    add r3, r3, r5176; CHECK-NEXT:    sub r4, r4, r5177; CHECK-NEXT:  .LBB0_9: # %while.cond.us178; CHECK-NEXT:    # Parent Loop BB0_2 Depth=1179; CHECK-NEXT:    # => This Inner Loop Header: Depth=2180; CHECK-NEXT:    cmpldi r4, 2181; CHECK-NEXT:    bge cr0, .LBB0_11182; CHECK-NEXT:  # %bb.10: # %if.end.us183; CHECK-NEXT:    #184; CHECK-NEXT:    cmpldi cr1, r4, 0185; CHECK-NEXT:    bne+ cr1, .LBB0_12186; CHECK-NEXT:    b .LBB0_20187; CHECK-NEXT:    .p2align 5188; CHECK-NEXT:  .LBB0_11: # %if.end.i.i.us189; CHECK-NEXT:    #190; CHECK-NEXT:    lhz r5, 0(r3)191; CHECK-NEXT:    cmplwi cr1, r5, 23901192; CHECK-NEXT:    beq cr1, .LBB0_19193; CHECK-NEXT:  .LBB0_12: # %_ZNK4llvm9StringRefixEm.exit.us194; CHECK-NEXT:    #195; CHECK-NEXT:    lbz r5, 0(r3)196; CHECK-NEXT:    cmplwi cr1, r5, 92197; CHECK-NEXT:    bne cr1, .LBB0_17198; CHECK-NEXT:  # %bb.13: # %if.then4.us199; CHECK-NEXT:    #200; CHECK-NEXT:    mr r5, r4201; CHECK-NEXT:    bc 12, lt, .LBB0_8202; CHECK-NEXT:  # %bb.14: # %if.then4.us203; CHECK-NEXT:    #204; CHECK-NEXT:    li r5, 2205; CHECK-NEXT:    b .LBB0_8206; CHECK-NEXT:    .p2align 4207; CHECK-NEXT:  .LBB0_15: # %_ZNK4llvm9StringRefixEm.exit208; CHECK-NEXT:    #209; CHECK-NEXT:    cmplwi r6, 93210; CHECK-NEXT:    bne cr0, .LBB0_1211; CHECK-NEXT:  # %bb.16: # %if.end10212; CHECK-NEXT:    #213; CHECK-NEXT:    addi r5, r5, -1214; CHECK-NEXT:    b .LBB0_1215; CHECK-NEXT:    .p2align 4216; CHECK-NEXT:  .LBB0_17: # %_ZNK4llvm9StringRefixEm.exit.us217; CHECK-NEXT:    #218; CHECK-NEXT:    cmplwi r5, 93219; CHECK-NEXT:    beq cr0, .LBB0_21220; CHECK-NEXT:  # %bb.18: # %_ZNK4llvm9StringRef6substrEmm.exit.loopexit221; CHECK-NEXT:    #222; CHECK-NEXT:    li r5, 0223; CHECK-NEXT:    b .LBB0_1224; CHECK-NEXT:  .LBB0_19: # %if.then225; CHECK-NEXT:    addi r1, r1, 32226; CHECK-NEXT:    ld r0, 16(r1)227; CHECK-NEXT:    mtlr r0228; CHECK-NEXT:    blr229; CHECK-NEXT:  .LBB0_20: # %cond.false.i230; CHECK-NEXT:    addis r3, r2, .L_MergedGlobals@toc@ha231; CHECK-NEXT:    addi r5, r3, .L_MergedGlobals@toc@l232; CHECK-NEXT:    addi r3, r5, 3233; CHECK-NEXT:    addi r4, r5, 134234; CHECK-NEXT:    addi r6, r5, 38235; CHECK-NEXT:    li r5, 225236; CHECK-NEXT:    bl __assert_fail237; CHECK-NEXT:    nop238; CHECK-NEXT:  .LBB0_21: # %if.then9239; CHECK-NEXT:    li r3, 1240; CHECK-NEXT:    bl exit241; CHECK-NEXT:    nop242entry:243  %Str.coerce.fca.0.extract = extractvalue [2 x i64] %Str.coerce, 0244  %Str.coerce.fca.1.extract = extractvalue [2 x i64] %Str.coerce, 1245  br label %while.cond.outer246while.cond.outer:247  %Str.sroa.0.0.ph = phi i64 [ %8, %_ZNK4llvm9StringRef6substrEmm.exit ], [ %Str.coerce.fca.0.extract, %entry ]248  %.sink.ph = phi i64 [ %sub.i, %_ZNK4llvm9StringRef6substrEmm.exit ], [ %Str.coerce.fca.1.extract, %entry ]249  %BracketDepth.0.ph = phi i64 [ %BracketDepth.1, %_ZNK4llvm9StringRef6substrEmm.exit ], [ undef, %entry ]250  %cmp65 = icmp eq i64 %BracketDepth.0.ph, 0251  br i1 %cmp65, label %while.cond.us.preheader, label %while.cond.preheader252while.cond.us.preheader:253  br label %while.cond.us254while.cond.preheader:255  %cmp.i34129 = icmp eq i64 %.sink.ph, 0256  br i1 %cmp.i34129, label %cond.false.i.loopexit135, label %_ZNK4llvm9StringRefixEm.exit.preheader257_ZNK4llvm9StringRefixEm.exit.preheader:258  br label %_ZNK4llvm9StringRefixEm.exit259while.cond.us:260  %Str.sroa.0.0.us = phi i64 [ %3, %_ZNK4llvm9StringRef6substrEmm.exit50.us ], [ %Str.sroa.0.0.ph, %while.cond.us.preheader ]261  %.sink.us = phi i64 [ %sub.i41.us, %_ZNK4llvm9StringRef6substrEmm.exit50.us ], [ %.sink.ph, %while.cond.us.preheader ]262  %cmp.i30.us = icmp ult i64 %.sink.us, 2263  br i1 %cmp.i30.us, label %if.end.us, label %if.end.i.i.us264if.end.i.i.us:265  %0 = inttoptr i64 %Str.sroa.0.0.us to ptr266  %call.i.i.us = tail call signext i32 @memcmp(ptr %0, ptr @.str, i64 2)267  %phitmp.i.us = icmp eq i32 %call.i.i.us, 0268  br i1 %phitmp.i.us, label %if.then, label %_ZNK4llvm9StringRefixEm.exit.us269if.end.us:270  %cmp.i34.us = icmp eq i64 %.sink.us, 0271  br i1 %cmp.i34.us, label %cond.false.i.loopexit, label %_ZNK4llvm9StringRefixEm.exit.us272_ZNK4llvm9StringRefixEm.exit.us:273  %1 = inttoptr i64 %Str.sroa.0.0.us to ptr274  %2 = load i8, ptr %1, align 1275  switch i8 %2, label %_ZNK4llvm9StringRef6substrEmm.exit.loopexit [276    i8 92, label %if.then4.us277    i8 93, label %if.then9278  ]279if.then4.us:280  %.sroa.speculated12.i38.us = select i1 %cmp.i30.us, i64 %.sink.us, i64 2281  %add.ptr.i40.us = getelementptr inbounds i8, ptr %1, i64 %.sroa.speculated12.i38.us282  %sub.i41.us = sub i64 %.sink.us, %.sroa.speculated12.i38.us283  %tobool.i.i44.us = icmp ne ptr %add.ptr.i40.us, null284  %cmp.i4.i45.us = icmp eq i64 %sub.i41.us, 0285  %or.cond.i.i46.us = or i1 %tobool.i.i44.us, %cmp.i4.i45.us286  br i1 %or.cond.i.i46.us, label %_ZNK4llvm9StringRef6substrEmm.exit50.us, label %cond.false.i.i47.loopexit287_ZNK4llvm9StringRef6substrEmm.exit50.us:288  %3 = ptrtoint ptr %add.ptr.i40.us to i64289  br label %while.cond.us290if.then:291  ret i64 undef292cond.false.i.loopexit:293  br label %cond.false.i294cond.false.i.loopexit134:295  br label %cond.false.i296cond.false.i.loopexit135:297  br label %cond.false.i298cond.false.i:299  tail call void @__assert_fail(ptr @.str.1, ptr @.str.2, i32 zeroext 225, ptr @__PRETTY_FUNCTION__._ZNK4llvm9StringRefixEm)300  unreachable301_ZNK4llvm9StringRefixEm.exit:302  %.sink131 = phi i64 [ %sub.i41, %_ZNK4llvm9StringRef6substrEmm.exit50 ], [ %.sink.ph, %_ZNK4llvm9StringRefixEm.exit.preheader ]303  %Str.sroa.0.0130 = phi i64 [ %6, %_ZNK4llvm9StringRef6substrEmm.exit50 ], [ %Str.sroa.0.0.ph, %_ZNK4llvm9StringRefixEm.exit.preheader ]304  %4 = inttoptr i64 %Str.sroa.0.0130 to ptr305  %5 = load i8, ptr %4, align 1306  switch i8 %5, label %_ZNK4llvm9StringRef6substrEmm.exit.loopexit132 [307    i8 92, label %if.then4308    i8 93, label %if.end10309  ]310if.then4:311  %cmp.i.i37 = icmp ult i64 %.sink131, 2312  %.sroa.speculated12.i38 = select i1 %cmp.i.i37, i64 %.sink131, i64 2313  %add.ptr.i40 = getelementptr inbounds i8, ptr %4, i64 %.sroa.speculated12.i38314  %sub.i41 = sub i64 %.sink131, %.sroa.speculated12.i38315  %tobool.i.i44 = icmp ne ptr %add.ptr.i40, null316  %cmp.i4.i45 = icmp eq i64 %sub.i41, 0317  %or.cond.i.i46 = or i1 %tobool.i.i44, %cmp.i4.i45318  br i1 %or.cond.i.i46, label %_ZNK4llvm9StringRef6substrEmm.exit50, label %cond.false.i.i47.loopexit133319cond.false.i.i47.loopexit:320  br label %cond.false.i.i47321cond.false.i.i47.loopexit133:322  br label %cond.false.i.i47323cond.false.i.i47:324  tail call void @__assert_fail(ptr @.str.3, ptr @.str.2, i32 zeroext 90, ptr @__PRETTY_FUNCTION__._ZN4llvm9StringRefC2EPKcm)325  unreachable326_ZNK4llvm9StringRef6substrEmm.exit50:327  %6 = ptrtoint ptr %add.ptr.i40 to i64328  %cmp.i34 = icmp eq i64 %sub.i41, 0329  br i1 %cmp.i34, label %cond.false.i.loopexit134, label %_ZNK4llvm9StringRefixEm.exit330if.then9:331  tail call void @exit(i32 signext 1)332  unreachable333if.end10:334  %dec = add i64 %BracketDepth.0.ph, -1335  br label %_ZNK4llvm9StringRef6substrEmm.exit336_ZNK4llvm9StringRef6substrEmm.exit.loopexit:337  br label %_ZNK4llvm9StringRef6substrEmm.exit338_ZNK4llvm9StringRef6substrEmm.exit.loopexit132:339  br label %_ZNK4llvm9StringRef6substrEmm.exit340_ZNK4llvm9StringRef6substrEmm.exit:341  %.sink76 = phi i64 [ %.sink131, %if.end10 ], [ %.sink.us, %_ZNK4llvm9StringRef6substrEmm.exit.loopexit ], [ %.sink131, %_ZNK4llvm9StringRef6substrEmm.exit.loopexit132 ]342  %7 = phi ptr [ %4, %if.end10 ], [ %1, %_ZNK4llvm9StringRef6substrEmm.exit.loopexit ], [ %4, %_ZNK4llvm9StringRef6substrEmm.exit.loopexit132 ]343  %BracketDepth.1 = phi i64 [ %dec, %if.end10 ], [ 0, %_ZNK4llvm9StringRef6substrEmm.exit.loopexit ], [ %BracketDepth.0.ph, %_ZNK4llvm9StringRef6substrEmm.exit.loopexit132 ]344  %sub.i = add i64 %.sink76, -1345  %add.ptr.i = getelementptr inbounds i8, ptr %7, i64 1346  %8 = ptrtoint ptr %add.ptr.i to i64347  br label %while.cond.outer348 349; Unecessary ISEL (all the registers are the same) is always removed350}351 352 353 354declare void @exit(i32 signext)355declare signext i32 @memcmp(ptr nocapture, ptr nocapture, i64)356declare void @__assert_fail(ptr, ptr, i32 zeroext, ptr)357