xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/h-registers-1.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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