brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.6 KiB · 1e96216 Raw
131 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mcpu=generic -mtriple=i686-- -post-RA-scheduler=false | FileCheck %s3; rdar://72267974 5; LLVM should omit the testl and use the flags result from the orl.6 7define void @or(ptr %A, i32 %IA, i32 %N) nounwind {8; CHECK-LABEL: or:9; CHECK:       # %bb.0: # %entry10; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax11; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %ecx12; CHECK-NEXT:    movl %eax, %edx13; CHECK-NEXT:    andl $3, %edx14; CHECK-NEXT:    xorl $1, %ecx15; CHECK-NEXT:    orl %edx, %ecx16; CHECK-NEXT:    je .LBB0_217; CHECK-NEXT:  # %bb.1: # %bb18; CHECK-NEXT:    movl $0, (%eax)19; CHECK-NEXT:  .LBB0_2: # %return20; CHECK-NEXT:    retl21entry:22  %0 = ptrtoint ptr %A to i32                  ; <i32> [#uses=1]23  %1 = and i32 %0, 3                              ; <i32> [#uses=1]24  %2 = xor i32 %IA, 1                             ; <i32> [#uses=1]25  %3 = or i32 %2, %1                              ; <i32> [#uses=1]26  %4 = icmp eq i32 %3, 0                          ; <i1> [#uses=1]27  br i1 %4, label %return, label %bb28 29bb:                                               ; preds = %entry30  store float 0.000000e+00, ptr %A, align 431  ret void32 33return:                                           ; preds = %entry34  ret void35}36 37define void @xor(ptr %A, i32 %IA, i32 %N) nounwind {38; CHECK-LABEL: xor:39; CHECK:       # %bb.0: # %entry40; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax41; CHECK-NEXT:    movl %eax, %ecx42; CHECK-NEXT:    andl $3, %ecx43; CHECK-NEXT:    xorl {{[0-9]+}}(%esp), %ecx44; CHECK-NEXT:    cmpl $1, %ecx45; CHECK-NEXT:    je .LBB1_246; CHECK-NEXT:  # %bb.1: # %bb47; CHECK-NEXT:    movl $0, (%eax)48; CHECK-NEXT:  .LBB1_2: # %return49; CHECK-NEXT:    retl50entry:51  %0 = ptrtoint ptr %A to i32                  ; <i32> [#uses=1]52  %1 = and i32 %0, 3                              ; <i32> [#uses=1]53  %2 = xor i32 %IA, 1                             ; <i32> [#uses=1]54  %3 = xor i32 %2, %1                              ; <i32> [#uses=1]55  %4 = icmp eq i32 %3, 0                          ; <i1> [#uses=1]56  br i1 %4, label %return, label %bb57 58bb:                                               ; preds = %entry59  store float 0.000000e+00, ptr %A, align 460  ret void61 62return:                                           ; preds = %entry63  ret void64}65 66define void @and(ptr %A, i32 %IA, i32 %N, ptr %p) nounwind {67; CHECK-LABEL: and:68; CHECK:       # %bb.0: # %entry69; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %ecx70; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax71; CHECK-NEXT:    xorl $1, %eax72; CHECK-NEXT:    andl {{[0-9]+}}(%esp), %eax73; CHECK-NEXT:    andl $3, %eax74; CHECK-NEXT:    movb %al, (%ecx)75; CHECK-NEXT:    je .LBB2_276; CHECK-NEXT:  # %bb.1: # %bb77; CHECK-NEXT:    movl $0, 078; CHECK-NEXT:  .LBB2_2: # %return79; CHECK-NEXT:    retl80entry:81  store i8 0, ptr %p82  %0 = ptrtoint ptr %A to i32                  ; <i32> [#uses=1]83  %1 = and i32 %0, 3                              ; <i32> [#uses=1]84  %2 = xor i32 %IA, 1                             ; <i32> [#uses=1]85  %3 = and i32 %2, %1                              ; <i32> [#uses=1]86  %t = trunc i32 %3 to i887  store i8 %t, ptr %p88  %4 = icmp eq i32 %3, 0                          ; <i1> [#uses=1]89  br i1 %4, label %return, label %bb90 91bb:                                               ; preds = %entry92  store float 0.000000e+00, ptr null, align 493  ret void94 95return:                                           ; preds = %entry96  ret void97}98 99; Just like @and, but without the trunc+store. This should use a testb100; instead of an andl.101define void @test(ptr %A, i32 %IA, i32 %N, ptr %p) nounwind {102; CHECK-LABEL: test:103; CHECK:       # %bb.0: # %entry104; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax105; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %ecx106; CHECK-NEXT:    movb $0, (%ecx)107; CHECK-NEXT:    xorl $1, %eax108; CHECK-NEXT:    andl {{[0-9]+}}(%esp), %eax109; CHECK-NEXT:    testb $3, %al110; CHECK-NEXT:    je .LBB3_2111; CHECK-NEXT:  # %bb.1: # %bb112; CHECK-NEXT:    movl $0, 0113; CHECK-NEXT:  .LBB3_2: # %return114; CHECK-NEXT:    retl115entry:116  store i8 0, ptr %p117  %0 = ptrtoint ptr %A to i32                  ; <i32> [#uses=1]118  %1 = and i32 %0, 3                              ; <i32> [#uses=1]119  %2 = xor i32 %IA, 1                             ; <i32> [#uses=1]120  %3 = and i32 %2, %1                              ; <i32> [#uses=1]121  %4 = icmp eq i32 %3, 0                          ; <i1> [#uses=1]122  br i1 %4, label %return, label %bb123 124bb:                                               ; preds = %entry125  store float 0.000000e+00, ptr null, align 4126  ret void127 128return:                                           ; preds = %entry129  ret void130}131