brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.3 KiB · 6a0c135 Raw
338 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O2 -mtriple=i386-unknown-linux-gnu -verify-machineinstrs -o - %s | FileCheck %s3@.str = external dso_local unnamed_addr constant [6 x i8], align 14@a = external dso_local local_unnamed_addr global i32, align 45@h = external dso_local local_unnamed_addr global i32, align 46@g = external dso_local local_unnamed_addr global i8, align 17 8define dso_local void @fn() {9; CHECK-LABEL: fn:10; CHECK:       # %bb.0: # %entry11; CHECK-NEXT:    pushl %ebp12; CHECK-NEXT:    .cfi_def_cfa_offset 813; CHECK-NEXT:    pushl %ebx14; CHECK-NEXT:    .cfi_def_cfa_offset 1215; CHECK-NEXT:    pushl %edi16; CHECK-NEXT:    .cfi_def_cfa_offset 1617; CHECK-NEXT:    pushl %esi18; CHECK-NEXT:    .cfi_def_cfa_offset 2019; CHECK-NEXT:    subl $28, %esp20; CHECK-NEXT:    .cfi_def_cfa_offset 4821; CHECK-NEXT:    .cfi_offset %esi, -2022; CHECK-NEXT:    .cfi_offset %edi, -1623; CHECK-NEXT:    .cfi_offset %ebx, -1224; CHECK-NEXT:    .cfi_offset %ebp, -825; CHECK-NEXT:    xorl %ebx, %ebx26; CHECK-NEXT:    # implicit-def: $ecx27; CHECK-NEXT:    # implicit-def: $edi28; CHECK-NEXT:    # implicit-def: $dh29; CHECK-NEXT:    # implicit-def: $al30; CHECK-NEXT:    # kill: killed $al31; CHECK-NEXT:    # implicit-def: $ebp32; CHECK-NEXT:    jmp .LBB0_133; CHECK-NEXT:    .p2align 434; CHECK-NEXT:  .LBB0_15: # %for.inc35; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=136; CHECK-NEXT:    movb %dl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill37; CHECK-NEXT:  .LBB0_1: # %for.cond38; CHECK-NEXT:    # =>This Loop Header: Depth=139; CHECK-NEXT:    # Child Loop BB0_19 Depth 240; CHECK-NEXT:    testb %bl, %bl41; CHECK-NEXT:    jne .LBB0_342; CHECK-NEXT:  # %bb.2: # %if.then43; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=144; CHECK-NEXT:    movb %dh, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill45; CHECK-NEXT:    movl $.str, (%esp)46; CHECK-NEXT:    calll printf47; CHECK-NEXT:    # implicit-def: $eax48; CHECK-NEXT:    movzbl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 1-byte Folded Reload49; CHECK-NEXT:    testl %edi, %edi50; CHECK-NEXT:    jne .LBB0_1051; CHECK-NEXT:    jmp .LBB0_652; CHECK-NEXT:    .p2align 453; CHECK-NEXT:  .LBB0_3: # %if.end54; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=155; CHECK-NEXT:    movl %ecx, %eax56; CHECK-NEXT:    cltd57; CHECK-NEXT:    idivl a58; CHECK-NEXT:    movl %ecx, %edx59; CHECK-NEXT:    movl $0, h60; CHECK-NEXT:    movb {{[-0-9]+}}(%e{{[sb]}}p), %dh # 1-byte Reload61; CHECK-NEXT:    cmpb $8, %dh62; CHECK-NEXT:    jg .LBB0_763; CHECK-NEXT:  # %bb.4: # %if.then1364; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=165; CHECK-NEXT:    movl %eax, %esi66; CHECK-NEXT:    movl $.str, (%esp)67; CHECK-NEXT:    movb %dl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill68; CHECK-NEXT:    calll printf69; CHECK-NEXT:    movb {{[-0-9]+}}(%e{{[sb]}}p), %dh # 1-byte Reload70; CHECK-NEXT:    movb {{[-0-9]+}}(%e{{[sb]}}p), %dl # 1-byte Reload71; CHECK-NEXT:    testb %bl, %bl72; CHECK-NEXT:    movl %esi, %ecx73; CHECK-NEXT:    # implicit-def: $eax74; CHECK-NEXT:    movb %dh, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill75; CHECK-NEXT:    jne .LBB0_1576; CHECK-NEXT:    .p2align 477; CHECK-NEXT:  # %bb.5: # %for.cond3578; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=179; CHECK-NEXT:    testl %edi, %edi80; CHECK-NEXT:    je .LBB0_681; CHECK-NEXT:  .LBB0_10: # %af82; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=183; CHECK-NEXT:    testb %bl, %bl84; CHECK-NEXT:    jne .LBB0_1185; CHECK-NEXT:  .LBB0_16: # %if.end3986; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=187; CHECK-NEXT:    testl %eax, %eax88; CHECK-NEXT:    je .LBB0_1889; CHECK-NEXT:  # %bb.17: # %if.then4190; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=191; CHECK-NEXT:    movl $0, {{[0-9]+}}(%esp)92; CHECK-NEXT:    movl $fn, {{[0-9]+}}(%esp)93; CHECK-NEXT:    movl $.str, (%esp)94; CHECK-NEXT:    calll printf95; CHECK-NEXT:  .LBB0_18: # %for.end4696; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=197; CHECK-NEXT:    # implicit-def: $dh98; CHECK-NEXT:    # implicit-def: $dl99; CHECK-NEXT:    # implicit-def: $ebp100; CHECK-NEXT:    jmp .LBB0_19101; CHECK-NEXT:    .p2align 4102; CHECK-NEXT:  .LBB0_7: # %if.end21103; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=1104; CHECK-NEXT:    # implicit-def: $ebp105; CHECK-NEXT:    jmp .LBB0_8106; CHECK-NEXT:    .p2align 4107; CHECK-NEXT:  .LBB0_6: # in Loop: Header=BB0_1 Depth=1108; CHECK-NEXT:    xorl %edi, %edi109; CHECK-NEXT:    movb {{[-0-9]+}}(%e{{[sb]}}p), %dh # 1-byte Reload110; CHECK-NEXT:    .p2align 4111; CHECK-NEXT:  .LBB0_19: # %for.cond47112; CHECK-NEXT:    # Parent Loop BB0_1 Depth=1113; CHECK-NEXT:    # => This Inner Loop Header: Depth=2114; CHECK-NEXT:    testb %bl, %bl115; CHECK-NEXT:    jne .LBB0_19116; CHECK-NEXT:  .LBB0_8: # %ae117; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=1118; CHECK-NEXT:    testb %bl, %bl119; CHECK-NEXT:    jne .LBB0_9120; CHECK-NEXT:  # %bb.12: # %if.end26121; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=1122; CHECK-NEXT:    xorl %ecx, %ecx123; CHECK-NEXT:    testb %dh, %dh124; CHECK-NEXT:    je .LBB0_15125; CHECK-NEXT:  # %bb.13: # %if.end26126; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=1127; CHECK-NEXT:    testl %ebp, %ebp128; CHECK-NEXT:    jne .LBB0_15129; CHECK-NEXT:  # %bb.14: # %if.then31130; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=1131; CHECK-NEXT:    xorl %ecx, %ecx132; CHECK-NEXT:    xorl %ebp, %ebp133; CHECK-NEXT:    jmp .LBB0_15134; CHECK-NEXT:    .p2align 4135; CHECK-NEXT:  .LBB0_9: # in Loop: Header=BB0_1 Depth=1136; CHECK-NEXT:    # implicit-def: $eax137; CHECK-NEXT:    testb %bl, %bl138; CHECK-NEXT:    je .LBB0_16139; CHECK-NEXT:  .LBB0_11: # in Loop: Header=BB0_1 Depth=1140; CHECK-NEXT:    # implicit-def: $edi141; CHECK-NEXT:    # implicit-def: $cl142; CHECK-NEXT:    # kill: killed $cl143; CHECK-NEXT:    # implicit-def: $dl144; CHECK-NEXT:    # implicit-def: $ebp145; CHECK-NEXT:    testl %edi, %edi146; CHECK-NEXT:    jne .LBB0_10147; CHECK-NEXT:    jmp .LBB0_6148entry:149  br label %for.cond150 151for.cond:                                         ; preds = %for.inc, %entry152  %l.0 = phi i16 [ undef, %entry ], [ 0, %for.inc ]153  %m.0 = phi i32 [ undef, %entry ], [ %m.2, %for.inc ]154  %i.0 = phi i32 [ undef, %entry ], [ %i.2, %for.inc ]155  %p.0 = phi i8 [ undef, %entry ], [ %p.2, %for.inc ]156  %k.0 = phi i8 [ undef, %entry ], [ %k.2, %for.inc ]157  %q.0 = phi i32 [ undef, %entry ], [ %q.2, %for.inc ]158  %cmp = icmp ugt i8 %k.0, 8159  %or.cond61 = or i1 %cmp, undef160  br i1 %or.cond61, label %if.then, label %if.end161 162if.then:                                          ; preds = %for.cond163  tail call void (ptr, ...) @printf(ptr @.str, i64 undef)164  br label %for.cond35165 166if.end:                                           ; preds = %for.cond167  %0 = load i32, ptr @a, align 4168  %div = sdiv i32 %m.0, %0169  br label %ac170 171ac:                                               ; preds = %ac, %if.end172  br i1 undef, label %if.end9, label %ac173 174if.end9:                                          ; preds = %ac175  %conv3 = trunc i32 %m.0 to i8176  %conv5 = sext i16 %l.0 to i32177  store i32 %conv5, ptr @h, align 4178  %cmp11 = icmp slt i8 %k.0, 9179  br i1 %cmp11, label %if.then13, label %if.end21180 181if.then13:                                        ; preds = %if.end9182  tail call void (ptr, ...) @printf(ptr @.str, i64 undef)183  br i1 undef, label %for.inc, label %for.cond35184 185if.end21:                                         ; preds = %if.end9186  %1 = load i8, ptr @g, align 1187  br label %ae188 189ae:                                               ; preds = %for.cond47, %if.end21190  %l.2 = phi i16 [ undef, %if.end21 ], [ 0, %for.cond47 ]191  %i.1 = phi i32 [ %i.0, %if.end21 ], [ %i.5, %for.cond47 ]192  %p.1 = phi i8 [ %k.0, %if.end21 ], [ %p.6, %for.cond47 ]193  %k.1 = phi i8 [ %conv3, %if.end21 ], [ %k.6, %for.cond47 ]194  %q.1 = phi i32 [ undef, %if.end21 ], [ %q.5, %for.cond47 ]195  br i1 undef, label %if.end26, label %af196 197if.end26:                                         ; preds = %ae198  %tobool27 = icmp eq i32 %q.1, 0199  %tobool30 = icmp ne i8 %p.1, 0200  %or.cond = and i1 %tobool30, %tobool27201  br i1 %or.cond, label %if.then31, label %for.inc202 203if.then31:                                        ; preds = %if.end26204  br label %for.inc205 206for.inc:                                          ; preds = %if.then31, %if.end26, %if.then13207  %m.2 = phi i32 [ 0, %if.then31 ], [ 0, %if.end26 ], [ %div, %if.then13 ]208  %i.2 = phi i32 [ %i.1, %if.then31 ], [ %i.1, %if.end26 ], [ %i.0, %if.then13 ]209  %p.2 = phi i8 [ %p.1, %if.then31 ], [ %p.1, %if.end26 ], [ undef, %if.then13 ]210  %k.2 = phi i8 [ %k.1, %if.then31 ], [ %k.1, %if.end26 ], [ %conv3, %if.then13 ]211  %q.2 = phi i32 [ 0, %if.then31 ], [ %q.1, %if.end26 ], [ %q.0, %if.then13 ]212  %2 = load i32, ptr @h, align 4213  br label %for.cond214 215for.cond35:                                       ; preds = %for.inc44, %if.then13, %if.then216  %i.3 = phi i32 [ undef, %for.inc44 ], [ %i.0, %if.then ], [ %i.0, %if.then13 ]217  %o.2 = phi i32 [ %o.3, %for.inc44 ], [ undef, %if.then ], [ undef, %if.then13 ]218  %p.4 = phi i8 [ undef, %for.inc44 ], [ %p.0, %if.then ], [ %k.0, %if.then13 ]219  %k.4 = phi i8 [ undef, %for.inc44 ], [ %k.0, %if.then ], [ %conv3, %if.then13 ]220  %q.3 = phi i32 [ undef, %for.inc44 ], [ %q.0, %if.then ], [ %q.0, %if.then13 ]221  %tobool36 = icmp eq i32 %i.3, 0222  br i1 %tobool36, label %for.end46, label %af223 224af:                                               ; preds = %for.cond35, %ae225  %i.4 = phi i32 [ %i.3, %for.cond35 ], [ %i.1, %ae ]226  %o.3 = phi i32 [ %o.2, %for.cond35 ], [ undef, %ae ]227  br i1 undef, label %if.end39, label %for.inc44228 229if.end39:                                         ; preds = %af230  %tobool40 = icmp eq i32 %o.3, 0231  br i1 %tobool40, label %for.end46, label %if.then41232 233if.then41:                                        ; preds = %if.end39234  tail call void (ptr, ...) @printf(ptr @.str, i64 ptrtoint (ptr @fn to i64))235  br label %for.end46236 237for.inc44:                                        ; preds = %af238  br label %for.cond35239 240for.end46:                                        ; preds = %if.then41, %if.end39, %for.cond35241  %i.5 = phi i32 [ %i.4, %if.then41 ], [ %i.4, %if.end39 ], [ 0, %for.cond35 ]242  %p.6 = phi i8 [ undef, %if.then41 ], [ undef, %if.end39 ], [ %p.4, %for.cond35 ]243  %k.6 = phi i8 [ undef, %if.then41 ], [ undef, %if.end39 ], [ %k.4, %for.cond35 ]244  %q.5 = phi i32 [ undef, %if.then41 ], [ undef, %if.end39 ], [ %q.3, %for.cond35 ]245  br label %for.cond47246 247for.cond47:                                       ; preds = %for.cond47, %for.end46248  %brmerge = or i1 false, undef249  br i1 %brmerge, label %for.cond47, label %ae250}251 252declare dso_local void @printf(ptr nocapture readonly, ...) local_unnamed_addr253 254 255; Testcase used to fail -verify-coalescing, reduced IR test which256; failed.257define void @verifier_error_reduced_issue38788(i1 %cmp11) {258; CHECK-LABEL: verifier_error_reduced_issue38788:259; CHECK:       # %bb.0: # %entry260; CHECK-NEXT:    pushl %ebx261; CHECK-NEXT:    .cfi_def_cfa_offset 8262; CHECK-NEXT:    .cfi_offset %ebx, -8263; CHECK-NEXT:    xorl %ecx, %ecx264; CHECK-NEXT:    xorl %ebx, %ebx265; CHECK-NEXT:    jmp .LBB1_1266; CHECK-NEXT:    .p2align 4267; CHECK-NEXT:  .LBB1_7: # %if.end26268; CHECK-NEXT:    # in Loop: Header=BB1_1 Depth=1269; CHECK-NEXT:    movl %ecx, %edx270; CHECK-NEXT:  .LBB1_8: # %for.inc271; CHECK-NEXT:    # in Loop: Header=BB1_1 Depth=1272; CHECK-NEXT:    movl %eax, %ecx273; CHECK-NEXT:    movl %edx, %ebx274; CHECK-NEXT:  .LBB1_1: # %for.cond275; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1276; CHECK-NEXT:    testb $1, {{[0-9]+}}(%esp)277; CHECK-NEXT:    je .LBB1_3278; CHECK-NEXT:  # %bb.2: # in Loop: Header=BB1_1 Depth=1279; CHECK-NEXT:    xorl %eax, %eax280; CHECK-NEXT:    jmp .LBB1_5281; CHECK-NEXT:    .p2align 4282; CHECK-NEXT:  .LBB1_3: # %if.end283; CHECK-NEXT:    # in Loop: Header=BB1_1 Depth=1284; CHECK-NEXT:    je .LBB1_4285; CHECK-NEXT:  # %bb.9: # %if.then13286; CHECK-NEXT:    # in Loop: Header=BB1_1 Depth=1287; CHECK-NEXT:    xorl %edx, %edx288; CHECK-NEXT:    testb $1, {{[0-9]+}}(%esp)289; CHECK-NEXT:    movl %ebx, %eax290; CHECK-NEXT:    movl $0, %ebx291; CHECK-NEXT:    jne .LBB1_8292; CHECK-NEXT:    jmp .LBB1_5293; CHECK-NEXT:    .p2align 4294; CHECK-NEXT:  .LBB1_4: # in Loop: Header=BB1_1 Depth=1295; CHECK-NEXT:    movl %ebx, %eax296; CHECK-NEXT:    xorl %ebx, %ebx297; CHECK-NEXT:  .LBB1_5: # %if.end26298; CHECK-NEXT:    # in Loop: Header=BB1_1 Depth=1299; CHECK-NEXT:    testb %cl, %cl300; CHECK-NEXT:    je .LBB1_7301; CHECK-NEXT:  # %bb.6: # %if.end26302; CHECK-NEXT:    # in Loop: Header=BB1_1 Depth=1303; CHECK-NEXT:    movl %ebx, %ecx304; CHECK-NEXT:    jmp .LBB1_7305entry:306  br label %for.cond307 308for.cond:                                         ; preds = %for.inc, %entry309  %p.0 = phi i8 [ 0, %entry ], [ %p.2, %for.inc ]310  %k.0 = phi i8 [ 0, %entry ], [ %k.2, %for.inc ]311  br i1 %cmp11, label %for.cond35, label %if.end312 313if.end:                                           ; preds = %for.cond314  br i1 %cmp11, label %if.then13, label %if.end26315 316if.then13:                                        ; preds = %if.end317  br i1 %cmp11, label %for.inc, label %for.cond35318 319if.end26:                                         ; preds = %for.cond35, %if.end320  %p.1 = phi i8 [ %p.4, %for.cond35 ], [ %k.0, %if.end ]321  %k.1 = phi i8 [ %k.4, %for.cond35 ], [ 0, %if.end ]322  %tobool30 = icmp ne i8 %p.0, 0323  %spec.select1 = select i1 %tobool30, i8 %k.1, i8 0324  br label %for.inc325 326for.inc:                                          ; preds = %if.end26, %if.then13327  %p.2 = phi i8 [ poison, %if.then13 ], [ %p.1, %if.end26 ]328  %k.2 = phi i8 [ 0, %if.then13 ], [ %spec.select1, %if.end26 ]329  %0 = load i32, ptr null, align 4330  br label %for.cond331 332for.cond35:                                       ; preds = %if.then13, %for.cond333  %p.4 = phi i8 [ %k.0, %if.then13 ], [ 0, %for.cond ]334  %k.4 = phi i8 [ 0, %if.then13 ], [ %k.0, %for.cond ]335  %tobool36 = icmp eq i32 0, 0336  br label %if.end26337}338