brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · 921b4e3 Raw
106 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-- | FileCheck %s3; PR9644 5define ptr @FindChar(ptr %CurPtr) {6; CHECK-LABEL: FindChar:7; CHECK:       # %bb.0: # %entry8; CHECK-NEXT:    pushl %edi9; CHECK-NEXT:    .cfi_def_cfa_offset 810; CHECK-NEXT:    pushl %esi11; CHECK-NEXT:    .cfi_def_cfa_offset 1212; CHECK-NEXT:    .cfi_offset %esi, -1213; CHECK-NEXT:    .cfi_offset %edi, -814; CHECK-NEXT:    xorl %edi, %edi15; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %esi16; CHECK-NEXT:    .p2align 417; CHECK-NEXT:  .LBB0_1: # %bb18; CHECK-NEXT:    # =>This Inner Loop Header: Depth=119; CHECK-NEXT:    movzbl (%esi,%edi), %eax20; CHECK-NEXT:    incl %edi21; CHECK-NEXT:    cmpl $120, %eax22; CHECK-NEXT:    je .LBB0_323; CHECK-NEXT:  # %bb.2: # %bb24; CHECK-NEXT:    # in Loop: Header=BB0_1 Depth=125; CHECK-NEXT:    testl %eax, %eax26; CHECK-NEXT:    jne .LBB0_127; CHECK-NEXT:  .LBB0_3: # %bb728; CHECK-NEXT:    movzbl %al, %eax29; CHECK-NEXT:    pushl %eax30; CHECK-NEXT:    .cfi_adjust_cfa_offset 431; CHECK-NEXT:    calll foo@PLT32; CHECK-NEXT:    addl $4, %esp33; CHECK-NEXT:    .cfi_adjust_cfa_offset -434; CHECK-NEXT:    addl %edi, %esi35; CHECK-NEXT:    movl %esi, %eax36; CHECK-NEXT:    popl %esi37; CHECK-NEXT:    .cfi_def_cfa_offset 838; CHECK-NEXT:    popl %edi39; CHECK-NEXT:    .cfi_def_cfa_offset 440; CHECK-NEXT:    retl41entry:42        br label %bb43 44bb:             ; preds = %bb, %entry45        %indvar = phi i32 [ 0, %entry ], [ %indvar.next, %bb ]          ; <i32> [#uses=3]46        %CurPtr_addr.0.rec = bitcast i32 %indvar to i32         ; <i32> [#uses=1]47        %gep.upgrd.1 = zext i32 %indvar to i64          ; <i64> [#uses=1]48        %CurPtr_addr.0 = getelementptr i8, ptr %CurPtr, i64 %gep.upgrd.1            ; <ptr> [#uses=1]49        %tmp = load i8, ptr %CurPtr_addr.0          ; <i8> [#uses=3]50        %tmp2.rec = add i32 %CurPtr_addr.0.rec, 1               ; <i32> [#uses=1]51        %tmp2 = getelementptr i8, ptr %CurPtr, i32 %tmp2.rec                ; <ptr> [#uses=1]52        %indvar.next = add i32 %indvar, 1               ; <i32> [#uses=1]53        switch i8 %tmp, label %bb [54                 i8 0, label %bb755                 i8 120, label %bb756        ]57 58bb7:            ; preds = %bb, %bb59        tail call void @foo( i8 %tmp )60        ret ptr %tmp261}62 63declare void @foo(i8)64 65; PR5008066; The important part of this test is that we emit only 1 bit test rather than67; 2 since the default BB of the switch is unreachable.68define i32 @baz(i32 %0) {69; CHECK-LABEL: baz:70; CHECK:       # %bb.0:71; CHECK-NEXT:    xorl %eax, %eax72; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %ecx73; CHECK-NEXT:    movl $13056, %edx # imm = 0x330074; CHECK-NEXT:    btl %ecx, %edx75; CHECK-NEXT:    jae .LBB1_176; CHECK-NEXT:  # %bb.2: # %return77; CHECK-NEXT:    retl78; CHECK-NEXT:  .LBB1_1: # %sw.epilog879; CHECK-NEXT:    movl $1, %eax80; CHECK-NEXT:    retl81  switch i32 %0, label %if.then.unreachabledefault [82    i32 4, label %sw.epilog883    i32 5, label %sw.epilog884    i32 8, label %sw.bb285    i32 9, label %sw.bb286    i32 12, label %sw.bb487    i32 13, label %sw.bb488  ]89 90sw.bb2:91  br label %return92 93sw.bb4:94  br label %return95 96sw.epilog8:97  br label %return98 99if.then.unreachabledefault:100  unreachable101 102return:103  %retval.0 = phi i32 [ 1, %sw.epilog8 ], [ 0, %sw.bb2 ], [ 0, %sw.bb4 ]104  ret i32 %retval.0105}106