1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-unknown | FileCheck %s --check-prefix=X32 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefix=X64 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; Use movzbl to avoid partial-register updates. 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine i32 @foo(i32 %p, i8 zeroext %x) nounwind { 8*9880d681SAndroid Build Coastguard Worker; X32-LABEL: foo: 9*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 10*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movzbl {{[0-9]+}}(%esp), %eax 11*9880d681SAndroid Build Coastguard Worker; X32-NEXT: # kill: %EAX<def> %EAX<kill> %AX<def> 12*9880d681SAndroid Build Coastguard Worker; X32-NEXT: divb {{[0-9]+}}(%esp) 13*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movzbl %al, %eax 14*9880d681SAndroid Build Coastguard Worker; X32-NEXT: andl $1, %eax 15*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 16*9880d681SAndroid Build Coastguard Worker; 17*9880d681SAndroid Build Coastguard Worker; X64-LABEL: foo: 18*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 19*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movzbl %dil, %eax 20*9880d681SAndroid Build Coastguard Worker; X64-NEXT: # kill: %EAX<def> %EAX<kill> %AX<def> 21*9880d681SAndroid Build Coastguard Worker; X64-NEXT: divb %sil 22*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movzbl %al, %eax 23*9880d681SAndroid Build Coastguard Worker; X64-NEXT: andl $1, %eax 24*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 25*9880d681SAndroid Build Coastguard Worker %q = trunc i32 %p to i8 26*9880d681SAndroid Build Coastguard Worker %r = udiv i8 %q, %x 27*9880d681SAndroid Build Coastguard Worker %s = zext i8 %r to i32 28*9880d681SAndroid Build Coastguard Worker %t = and i32 %s, 1 29*9880d681SAndroid Build Coastguard Worker ret i32 %t 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerdefine i32 @bar(i32 %p, i16 zeroext %x) nounwind { 33*9880d681SAndroid Build Coastguard Worker; X32-LABEL: bar: 34*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 35*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movzwl {{[0-9]+}}(%esp), %eax 36*9880d681SAndroid Build Coastguard Worker; X32-NEXT: xorl %edx, %edx 37*9880d681SAndroid Build Coastguard Worker; X32-NEXT: divw {{[0-9]+}}(%esp) 38*9880d681SAndroid Build Coastguard Worker; X32-NEXT: # kill: %AX<def> %AX<kill> %EAX<def> 39*9880d681SAndroid Build Coastguard Worker; X32-NEXT: andl $1, %eax 40*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 41*9880d681SAndroid Build Coastguard Worker; 42*9880d681SAndroid Build Coastguard Worker; X64-LABEL: bar: 43*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 44*9880d681SAndroid Build Coastguard Worker; X64-NEXT: xorl %edx, %edx 45*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movl %edi, %eax 46*9880d681SAndroid Build Coastguard Worker; X64-NEXT: divw %si 47*9880d681SAndroid Build Coastguard Worker; X64-NEXT: # kill: %AX<def> %AX<kill> %EAX<def> 48*9880d681SAndroid Build Coastguard Worker; X64-NEXT: andl $1, %eax 49*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 50*9880d681SAndroid Build Coastguard Worker %q = trunc i32 %p to i16 51*9880d681SAndroid Build Coastguard Worker %r = udiv i16 %q, %x 52*9880d681SAndroid Build Coastguard Worker %s = zext i16 %r to i32 53*9880d681SAndroid Build Coastguard Worker %t = and i32 %s, 1 54*9880d681SAndroid Build Coastguard Worker ret i32 %t 55*9880d681SAndroid Build Coastguard Worker} 56