1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-unknown-linux -enable-misched=false | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker;; Simple case 4*9880d681SAndroid Build Coastguard Workerdefine i32 @test1(i8 %x) nounwind readnone { 5*9880d681SAndroid Build Coastguard Worker %A = and i8 %x, -32 6*9880d681SAndroid Build Coastguard Worker %B = zext i8 %A to i32 7*9880d681SAndroid Build Coastguard Worker ret i32 %B 8*9880d681SAndroid Build Coastguard Worker} 9*9880d681SAndroid Build Coastguard Worker; CHECK: test1 10*9880d681SAndroid Build Coastguard Worker; CHECK: movzbl 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl {{.*}}224 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker;; Multiple uses of %x but easily extensible. 14*9880d681SAndroid Build Coastguard Workerdefine i32 @test2(i8 %x) nounwind readnone { 15*9880d681SAndroid Build Coastguard Worker %A = and i8 %x, -32 16*9880d681SAndroid Build Coastguard Worker %B = zext i8 %A to i32 17*9880d681SAndroid Build Coastguard Worker %C = or i8 %x, 63 18*9880d681SAndroid Build Coastguard Worker %D = zext i8 %C to i32 19*9880d681SAndroid Build Coastguard Worker %E = add i32 %B, %D 20*9880d681SAndroid Build Coastguard Worker ret i32 %E 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Worker; CHECK: test2 23*9880d681SAndroid Build Coastguard Worker; CHECK: movzbl 24*9880d681SAndroid Build Coastguard Worker; CHECK: andl $224 25*9880d681SAndroid Build Coastguard Worker; CHECK: orl $63 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerdeclare void @use(i32, i8) 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Worker;; Multiple uses of %x where we shouldn't extend the load. 30*9880d681SAndroid Build Coastguard Workerdefine void @test3(i8 %x) nounwind readnone { 31*9880d681SAndroid Build Coastguard Worker %A = and i8 %x, -32 32*9880d681SAndroid Build Coastguard Worker %B = zext i8 %A to i32 33*9880d681SAndroid Build Coastguard Worker call void @use(i32 %B, i8 %x) 34*9880d681SAndroid Build Coastguard Worker ret void 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker; CHECK: test3 37*9880d681SAndroid Build Coastguard Worker; CHECK: movzbl {{[0-9]+}}(%esp), [[REGISTER:%e[a-z]{2}]] 38*9880d681SAndroid Build Coastguard Worker; CHECK: subl $8, %esp 39*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pushl [[REGISTER]] 40*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl $224, [[REGISTER]] 41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pushl [[REGISTER]] 42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call{{.*}}use 43