1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mattr=-bmi < %s -mtriple=x86_64-linux | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mattr=-bmi < %s -mtriple=x86_64-linux-gnux32 | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; LLVM creates virtual registers for values live across blocks 5*9880d681SAndroid Build Coastguard Worker; based on the type of the value. Make sure that the extracts 6*9880d681SAndroid Build Coastguard Worker; here use the GR64_NOREX register class for their result, 7*9880d681SAndroid Build Coastguard Worker; instead of plain GR64. 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker; CHECK: foo: 10*9880d681SAndroid Build Coastguard Worker; CHECK: movzbl %{{[abcd]}}h, %e 11*9880d681SAndroid Build Coastguard Worker; CHECK: movzbl %{{[abcd]}}h, %e 12*9880d681SAndroid Build Coastguard Worker; CHECK: movzbl %{{[abcd]}}h, %e 13*9880d681SAndroid Build Coastguard Worker; CHECK: movzbl %{{[abcd]}}h, %e 14*9880d681SAndroid Build Coastguard Worker; CHECK: movzbl %{{[abcd]}}h, %e 15*9880d681SAndroid Build Coastguard Worker; CHECK: movzbl %{{[abcd]}}h, %e 16*9880d681SAndroid Build Coastguard Worker; CHECK: movzbl %{{[abcd]}}h, %e 17*9880d681SAndroid Build Coastguard Worker; CHECK: movzbl %{{[abcd]}}h, %e 18*9880d681SAndroid Build Coastguard Worker; CHECK: ret 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine i64 @foo(i64 %a, i64 %b, i64 %c, i64 %d, 21*9880d681SAndroid Build Coastguard Worker i64 %e, i64 %f, i64 %g, i64 %h) { 22*9880d681SAndroid Build Coastguard Worker %sa = lshr i64 %a, 8 23*9880d681SAndroid Build Coastguard Worker %A = and i64 %sa, 255 24*9880d681SAndroid Build Coastguard Worker %sb = lshr i64 %b, 8 25*9880d681SAndroid Build Coastguard Worker %B = and i64 %sb, 255 26*9880d681SAndroid Build Coastguard Worker %sc = lshr i64 %c, 8 27*9880d681SAndroid Build Coastguard Worker %C = and i64 %sc, 255 28*9880d681SAndroid Build Coastguard Worker %sd = lshr i64 %d, 8 29*9880d681SAndroid Build Coastguard Worker %D = and i64 %sd, 255 30*9880d681SAndroid Build Coastguard Worker %se = lshr i64 %e, 8 31*9880d681SAndroid Build Coastguard Worker %E = and i64 %se, 255 32*9880d681SAndroid Build Coastguard Worker %sf = lshr i64 %f, 8 33*9880d681SAndroid Build Coastguard Worker %F = and i64 %sf, 255 34*9880d681SAndroid Build Coastguard Worker %sg = lshr i64 %g, 8 35*9880d681SAndroid Build Coastguard Worker %G = and i64 %sg, 255 36*9880d681SAndroid Build Coastguard Worker %sh = lshr i64 %h, 8 37*9880d681SAndroid Build Coastguard Worker %H = and i64 %sh, 255 38*9880d681SAndroid Build Coastguard Worker br label %next 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workernext: 41*9880d681SAndroid Build Coastguard Worker %u = add i64 %A, %B 42*9880d681SAndroid Build Coastguard Worker %v = add i64 %C, %D 43*9880d681SAndroid Build Coastguard Worker %w = add i64 %E, %F 44*9880d681SAndroid Build Coastguard Worker %x = add i64 %G, %H 45*9880d681SAndroid Build Coastguard Worker %y = add i64 %u, %v 46*9880d681SAndroid Build Coastguard Worker %z = add i64 %w, %x 47*9880d681SAndroid Build Coastguard Worker %t = add i64 %y, %z 48*9880d681SAndroid Build Coastguard Worker ret i64 %t 49*9880d681SAndroid Build Coastguard Worker} 50