brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.0 KiB · 0d9332e Raw
309 lines · plain
1; RUN: llc < %s -mtriple=x86_64-apple-macosx -regalloc=greedy | FileCheck %s2 3; This testing case is reduced from 197.parser prune_match function.4; We make sure register copies are not generated on isupper.exit blocks.5 6; isupper.exit and isupper.exit223 get tail-duplicated into all their7; predecessors.8; CHECK: cond.true.i.i9; CHECK-NEXT: in Loop10; Mem-move11; CHECK-NEXT: movl12; CHECK-NEXT: andl13; CHECK-NEXT: testl14; CHECK-NEXT: jne15; CHECK: cond.true.i.i21716; CHECK-NEXT: in Loop17; Mem-move18; CHECK-NEXT: movl19; CHECK-NEXT: andl20; CHECK-NEXT: testl21; CHECK-NEXT: je22; CHECK: cond.false.i.i23; CHECK: maskrune24; CHECK-NEXT: movzbl25; CHECK-NEXT: movq26; CHECK-NEXT: testl27; CHECK-NEXT: je28; CHECK: cond.false.i.i21929; CHECK: maskrune30; CHECK-NEXT: movzbl31; CHECK-NEXT: movq32; CHECK-NEXT: testl33; CHECK-NEXT: jne34 35%struct.List_o_links_struct = type { i32, i32, i32, ptr }36%struct.Connector_struct = type { i16, i16, i8, i8, ptr, ptr }37%struct._RuneLocale = type { [8 x i8], [32 x i8], ptr, ptr, i32, [256 x i32], [256 x i32], [256 x i32], %struct._RuneRange, %struct._RuneRange, %struct._RuneRange, ptr, i32, i32, ptr }38%struct._RuneRange = type { i32, ptr }39%struct._RuneEntry = type { i32, i32, i32, ptr }40%struct._RuneCharClass = type { [14 x i8], i32 }41%struct.Exp_struct = type { i8, i8, i8, i8, %union.anon }42%union.anon = type { ptr }43%struct.E_list_struct = type { ptr, ptr }44%struct.domain_struct = type { ptr, i32, ptr, i32, i32, ptr, ptr }45%struct.d_tree_leaf_struct = type { ptr, i32, ptr }46@_DefaultRuneLocale = external global %struct._RuneLocale47declare i32 @__maskrune(i32, i64) #748define fastcc i32 @prune_match(ptr nocapture readonly %a, ptr nocapture readonly %b) #9 {49entry:50  %0 = load i16, ptr %a, align 251  %1 = load i16, ptr %b, align 252  %cmp = icmp eq i16 %0, %153  br i1 %cmp, label %if.end, label %return, !prof !98854if.end:55  %priority = getelementptr inbounds %struct.Connector_struct, ptr %a, i64 0, i32 256  %2 = load i8, ptr %priority, align 157  %priority5 = getelementptr inbounds %struct.Connector_struct, ptr %b, i64 0, i32 258  %3 = load i8, ptr %priority5, align 159  %string = getelementptr inbounds %struct.Connector_struct, ptr %a, i64 0, i32 560  %4 = load ptr, ptr %string, align 861  %string7 = getelementptr inbounds %struct.Connector_struct, ptr %b, i64 0, i32 562  %5 = load ptr, ptr %string7, align 863  br label %while.cond64while.cond:65  %lsr.iv27 = phi i64 [ %lsr.iv.next28, %if.end17 ], [ 0, %if.end ]66  %scevgep55 = getelementptr i8, ptr %4, i64 %lsr.iv2767  %6 = load i8, ptr %scevgep55, align 168  %idxprom.i.i = sext i8 %6 to i6469  %isascii.i.i224 = icmp sgt i8 %6, -170  br i1 %isascii.i.i224, label %cond.true.i.i, label %cond.false.i.i, !prof !18171cond.true.i.i:72  %arrayidx.i.i = getelementptr inbounds %struct._RuneLocale, ptr @_DefaultRuneLocale, i64 0, i32 5, i64 %idxprom.i.i73  %7 = load i32, ptr %arrayidx.i.i, align 474  %and.i.i = and i32 %7, 3276875  br label %isupper.exit76cond.false.i.i:77  %8 = trunc i64 %idxprom.i.i to i878  %conv8 = sext i8 %8 to i3279  %call3.i.i = tail call i32 @__maskrune(i32 %conv8, i64 32768) #380  br label %isupper.exit81isupper.exit:82  %tobool1.sink.i.in.i = phi i32 [ %and.i.i, %cond.true.i.i ], [ %call3.i.i, %cond.false.i.i ]83  %tobool1.sink.i.i = icmp eq i32 %tobool1.sink.i.in.i, 084  br i1 %tobool1.sink.i.i, label %lor.rhs, label %while.body, !prof !98985lor.rhs:86  %sunkaddr = ptrtoint ptr %5 to i6487  %sunkaddr58 = add i64 %sunkaddr, %lsr.iv2788  %sunkaddr59 = inttoptr i64 %sunkaddr58 to ptr89  %9 = load i8, ptr %sunkaddr59, align 190  %idxprom.i.i214 = sext i8 %9 to i6491  %isascii.i.i213225 = icmp sgt i8 %9, -192  br i1 %isascii.i.i213225, label %cond.true.i.i217, label %cond.false.i.i219, !prof !18193cond.true.i.i217:94  %arrayidx.i.i215 = getelementptr inbounds %struct._RuneLocale, ptr @_DefaultRuneLocale, i64 0, i32 5, i64 %idxprom.i.i21495  %10 = load i32, ptr %arrayidx.i.i215, align 496  %and.i.i216 = and i32 %10, 3276897  br label %isupper.exit22398cond.false.i.i219:99  %11 = trunc i64 %idxprom.i.i214 to i8100  %conv9 = sext i8 %11 to i32101  %call3.i.i218 = tail call i32 @__maskrune(i32 %conv9, i64 32768) #3102  br label %isupper.exit223103isupper.exit223:104  %tobool1.sink.i.in.i220 = phi i32 [ %and.i.i216, %cond.true.i.i217 ], [ %call3.i.i218, %cond.false.i.i219 ]105  %tobool1.sink.i.i221 = icmp eq i32 %tobool1.sink.i.in.i220, 0106  br i1 %tobool1.sink.i.i221, label %while.end, label %while.body, !prof !990107while.body:108  %sunkaddr60 = ptrtoint ptr %4 to i64109  %sunkaddr61 = add i64 %sunkaddr60, %lsr.iv27110  %sunkaddr62 = inttoptr i64 %sunkaddr61 to ptr111  %12 = load i8, ptr %sunkaddr62, align 1112  %sunkaddr63 = ptrtoint ptr %5 to i64113  %sunkaddr64 = add i64 %sunkaddr63, %lsr.iv27114  %sunkaddr65 = inttoptr i64 %sunkaddr64 to ptr115  %13 = load i8, ptr %sunkaddr65, align 1116  %cmp14 = icmp eq i8 %12, %13117  br i1 %cmp14, label %if.end17, label %return, !prof !991118if.end17:119  %lsr.iv.next28 = add i64 %lsr.iv27, 1120  br label %while.cond121while.end:122  %14 = or i8 %3, %2123  %15 = icmp eq i8 %14, 0124  br i1 %15, label %if.then23, label %if.else88, !prof !992125if.then23:126  %sunkaddr66 = ptrtoint ptr %a to i64127  %sunkaddr67 = add i64 %sunkaddr66, 16128  %sunkaddr68 = inttoptr i64 %sunkaddr67 to ptr129  %16 = load ptr, ptr %sunkaddr68, align 8130  %17 = load i8, ptr %16, align 1131  %cmp26 = icmp eq i8 %17, 83132  %sunkaddr69 = ptrtoint ptr %4 to i64133  %sunkaddr70 = add i64 %sunkaddr69, %lsr.iv27134  %sunkaddr71 = inttoptr i64 %sunkaddr70 to ptr135  %18 = load i8, ptr %sunkaddr71, align 1136  br i1 %cmp26, label %land.lhs.true28, label %while.cond59.preheader, !prof !993137land.lhs.true28:138  switch i8 %18, label %land.rhs.preheader [139    i8 112, label %land.lhs.true35140    i8 0, label %return141  ], !prof !994142land.lhs.true35:143  %sunkaddr72 = ptrtoint ptr %5 to i64144  %sunkaddr73 = add i64 %sunkaddr72, %lsr.iv27145  %sunkaddr74 = inttoptr i64 %sunkaddr73 to ptr146  %19 = load i8, ptr %sunkaddr74, align 1147  switch i8 %19, label %land.rhs.preheader [148    i8 112, label %land.lhs.true43149  ], !prof !995150land.lhs.true43:151  %20 = ptrtoint ptr %16 to i64152  %21 = sub i64 0, %20153  %scevgep52 = getelementptr i8, ptr %4, i64 %21154  %scevgep53 = getelementptr i8, ptr %scevgep52, i64 %lsr.iv27155  %scevgep54 = getelementptr i8, ptr %scevgep53, i64 -1156  %cmp45 = icmp eq ptr %scevgep54, null157  br i1 %cmp45, label %return, label %lor.lhs.false47, !prof !996158lor.lhs.false47:159  %22 = ptrtoint ptr %16 to i64160  %23 = sub i64 0, %22161  %scevgep47 = getelementptr i8, ptr %4, i64 %23162  %scevgep48 = getelementptr i8, ptr %scevgep47, i64 %lsr.iv27163  %scevgep49 = getelementptr i8, ptr %scevgep48, i64 -2164  %cmp50 = icmp eq ptr %scevgep49, null165  br i1 %cmp50, label %land.lhs.true52, label %while.cond59.preheader, !prof !997166land.lhs.true52:167  %sunkaddr75 = ptrtoint ptr %4 to i64168  %sunkaddr76 = add i64 %sunkaddr75, %lsr.iv27169  %sunkaddr77 = add i64 %sunkaddr76, -1170  %sunkaddr78 = inttoptr i64 %sunkaddr77 to ptr171  %24 = load i8, ptr %sunkaddr78, align 1172  %cmp55 = icmp eq i8 %24, 73173  %cmp61233 = icmp eq i8 %18, 0174  %or.cond265 = or i1 %cmp55, %cmp61233175  br i1 %or.cond265, label %return, label %land.rhs.preheader, !prof !998176while.cond59.preheader:177  %cmp61233.old = icmp eq i8 %18, 0178  br i1 %cmp61233.old, label %return, label %land.rhs.preheader, !prof !999179land.rhs.preheader:180  %scevgep33 = getelementptr i8, ptr %5, i64 %lsr.iv27181  %scevgep43 = getelementptr i8, ptr %4, i64 %lsr.iv27182  br label %land.rhs183land.rhs:184  %lsr.iv = phi i64 [ 0, %land.rhs.preheader ], [ %lsr.iv.next, %if.then83 ]185  %25 = phi i8 [ %27, %if.then83 ], [ %18, %land.rhs.preheader ]186  %scevgep34 = getelementptr i8, ptr %scevgep33, i64 %lsr.iv187  %26 = load i8, ptr %scevgep34, align 1188  %cmp64 = icmp eq i8 %26, 0189  br i1 %cmp64, label %return, label %while.body66, !prof !1000190while.body66:191  %cmp68 = icmp eq i8 %25, 42192  %cmp72 = icmp eq i8 %26, 42193  %or.cond = or i1 %cmp68, %cmp72194  br i1 %or.cond, label %if.then83, label %lor.lhs.false74, !prof !1001195lor.lhs.false74:196  %cmp77 = icmp ne i8 %25, %26197  %cmp81 = icmp eq i8 %25, 94198  %or.cond208 = or i1 %cmp77, %cmp81199  br i1 %or.cond208, label %return, label %if.then83, !prof !1002200if.then83:201  %scevgep44 = getelementptr i8, ptr %scevgep43, i64 %lsr.iv202  %scevgep45 = getelementptr i8, ptr %scevgep44, i64 1203  %27 = load i8, ptr %scevgep45, align 1204  %cmp61 = icmp eq i8 %27, 0205  %lsr.iv.next = add i64 %lsr.iv, 1206  br i1 %cmp61, label %return, label %land.rhs, !prof !999207if.else88:208  %cmp89 = icmp eq i8 %2, 1209  %cmp92 = icmp eq i8 %3, 2210  %or.cond159 = and i1 %cmp89, %cmp92211  br i1 %or.cond159, label %while.cond95.preheader, label %if.else123, !prof !1003212while.cond95.preheader:213  %sunkaddr79 = ptrtoint ptr %4 to i64214  %sunkaddr80 = add i64 %sunkaddr79, %lsr.iv27215  %sunkaddr81 = inttoptr i64 %sunkaddr80 to ptr216  %28 = load i8, ptr %sunkaddr81, align 1217  %cmp97238 = icmp eq i8 %28, 0218  br i1 %cmp97238, label %return, label %land.rhs99.preheader, !prof !1004219land.rhs99.preheader:220  %scevgep31 = getelementptr i8, ptr %5, i64 %lsr.iv27221  %scevgep40 = getelementptr i8, ptr %4, i64 %lsr.iv27222  br label %land.rhs99223land.rhs99:224  %lsr.iv17 = phi i64 [ 0, %land.rhs99.preheader ], [ %lsr.iv.next18, %if.then117 ]225  %29 = phi i8 [ %31, %if.then117 ], [ %28, %land.rhs99.preheader ]226  %scevgep32 = getelementptr i8, ptr %scevgep31, i64 %lsr.iv17227  %30 = load i8, ptr %scevgep32, align 1228  %cmp101 = icmp eq i8 %30, 0229  br i1 %cmp101, label %return, label %while.body104, !prof !1005230while.body104:231  %cmp107 = icmp eq i8 %29, %30232  %cmp111 = icmp eq i8 %29, 42233  %or.cond209 = or i1 %cmp107, %cmp111234  %cmp115 = icmp eq i8 %30, 94235  %or.cond210 = or i1 %or.cond209, %cmp115236  br i1 %or.cond210, label %if.then117, label %return, !prof !1006237if.then117:238  %scevgep41 = getelementptr i8, ptr %scevgep40, i64 %lsr.iv17239  %scevgep42 = getelementptr i8, ptr %scevgep41, i64 1240  %31 = load i8, ptr %scevgep42, align 1241  %cmp97 = icmp eq i8 %31, 0242  %lsr.iv.next18 = add i64 %lsr.iv17, 1243  br i1 %cmp97, label %return, label %land.rhs99, !prof !1004244if.else123:245  %cmp124 = icmp eq i8 %3, 1246  %cmp127 = icmp eq i8 %2, 2247  %or.cond160 = and i1 %cmp124, %cmp127248  br i1 %or.cond160, label %while.cond130.preheader, label %return, !prof !1007249while.cond130.preheader:250  %sunkaddr82 = ptrtoint ptr %4 to i64251  %sunkaddr83 = add i64 %sunkaddr82, %lsr.iv27252  %sunkaddr84 = inttoptr i64 %sunkaddr83 to ptr253  %32 = load i8, ptr %sunkaddr84, align 1254  %cmp132244 = icmp eq i8 %32, 0255  br i1 %cmp132244, label %return, label %land.rhs134.preheader, !prof !1008256land.rhs134.preheader:257  %scevgep29 = getelementptr i8, ptr %5, i64 %lsr.iv27258  %scevgep37 = getelementptr i8, ptr %4, i64 %lsr.iv27259  br label %land.rhs134260land.rhs134:261  %lsr.iv22 = phi i64 [ 0, %land.rhs134.preheader ], [ %lsr.iv.next23, %if.then152 ]262  %33 = phi i8 [ %35, %if.then152 ], [ %32, %land.rhs134.preheader ]263  %scevgep30 = getelementptr i8, ptr %scevgep29, i64 %lsr.iv22264  %34 = load i8, ptr %scevgep30, align 1265  %cmp136 = icmp eq i8 %34, 0266  br i1 %cmp136, label %return, label %while.body139, !prof !1009267while.body139:268  %cmp142 = icmp eq i8 %33, %34269  %cmp146 = icmp eq i8 %34, 42270  %or.cond211 = or i1 %cmp142, %cmp146271  %cmp150 = icmp eq i8 %33, 94272  %or.cond212 = or i1 %or.cond211, %cmp150273  br i1 %or.cond212, label %if.then152, label %return, !prof !1010274if.then152:275  %scevgep38 = getelementptr i8, ptr %scevgep37, i64 %lsr.iv22276  %scevgep39 = getelementptr i8, ptr %scevgep38, i64 1277  %35 = load i8, ptr %scevgep39, align 1278  %cmp132 = icmp eq i8 %35, 0279  %lsr.iv.next23 = add i64 %lsr.iv22, 1280  br i1 %cmp132, label %return, label %land.rhs134, !prof !1008281return:282  %retval.0 = phi i32 [ 0, %entry ], [ 1, %land.lhs.true52 ], [ 1, %land.lhs.true43 ], [ 0, %if.else123 ], [ 1, %while.cond59.preheader ], [ 1, %while.cond95.preheader ], [ 1, %while.cond130.preheader ], [ 1, %land.lhs.true28 ], [ 1, %if.then83 ], [ 0, %lor.lhs.false74 ], [ 1, %land.rhs ], [ 1, %if.then117 ], [ 0, %while.body104 ], [ 1, %land.rhs99 ], [ 1, %if.then152 ], [ 0, %while.body139 ], [ 1, %land.rhs134 ], [ 0, %while.body ]283  ret i32 %retval.0284}285!181 = !{!"branch_weights", i32 662038, i32 1}286!988 = !{!"branch_weights", i32 12091450, i32 1916}287!989 = !{!"branch_weights", i32 7564670, i32 4526781}288!990 = !{!"branch_weights", i32 7484958, i32 13283499}289!991 = !{!"branch_weights", i32 8677007, i32 4606493}290!992 = !{!"branch_weights", i32 -1172426948, i32 145094705}291!993 = !{!"branch_weights", i32 1468914, i32 5683688}292!994 = !{!"branch_weights", i32 114025221, i32 -1217548794, i32 -1199521551}293!995 = !{!"branch_weights", i32 1853716452, i32 -444717951}294!996 = !{!"branch_weights", i32 1004870, i32 20259}295!997 = !{!"branch_weights", i32 20071, i32 189}296!998 = !{!"branch_weights", i32 -1020255939, i32 572177766}297!999 = !{!"branch_weights", i32 2666513, i32 3466431}298!1000 = !{!"branch_weights", i32 5117635, i32 1859780}299!1001 = !{!"branch_weights", i32 354902465, i32 -1444604407}300!1002 = !{!"branch_weights", i32 -1762419279, i32 1592770684}301!1003 = !{!"branch_weights", i32 1435905930, i32 -1951930624}302!1004 = !{!"branch_weights", i32 1, i32 504888}303!1005 = !{!"branch_weights", i32 94662, i32 504888}304!1006 = !{!"branch_weights", i32 -1897793104, i32 160196332}305!1007 = !{!"branch_weights", i32 2074643678, i32 -29579071}306!1008 = !{!"branch_weights", i32 1, i32 226163}307!1009 = !{!"branch_weights", i32 58357, i32 226163}308!1010 = !{!"branch_weights", i32 -2072848646, i32 92907517}309