1; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s -check-prefix=X64 2; X64: mov 3; X64-NEXT: movb %ah, (%rsi) 4; X64: mov 5; X64-NEXT: movb %ah, (%rsi) 6; X64: mov 7; X64-NEXT: movb %ah, (%rsi) 8; X64-NOT: mov 9 10; RUN: llc < %s -mtriple=x86_64-linux-gnux32 | FileCheck %s -check-prefix=X32 11; X32: mov 12; X32-NEXT: movb %ah, (%esi) 13; X32: mov 14; X32-NEXT: movb %ah, (%esi) 15; X32: mov 16; X32-NEXT: movb %ah, (%esi) 17; X32-NOT: mov 18 19; RUN: llc < %s -mtriple=x86_64-win32 | FileCheck %s -check-prefix=W64 20; W64-NOT: mov 21; W64: movb %ch, (%rdx) 22; W64-NOT: mov 23; W64: movb %ch, (%rdx) 24; W64-NOT: mov 25; W64: movb %ch, (%rdx) 26; W64-NOT: mov 27 28; RUN: llc < %s -march=x86 | FileCheck %s -check-prefix=X86 29; X86-NOT: mov 30; X86: movb %ah, (%e 31; X86-NOT: mov 32; X86: movb %ah, (%e 33; X86-NOT: mov 34; X86: movb %ah, (%e 35; X86-NOT: mov 36 37; Use h-register extract and store. 38 39define void @foo16(i16 inreg %p, i8* inreg %z) nounwind { 40 %q = lshr i16 %p, 8 41 %t = trunc i16 %q to i8 42 store i8 %t, i8* %z 43 ret void 44} 45define void @foo32(i32 inreg %p, i8* inreg %z) nounwind { 46 %q = lshr i32 %p, 8 47 %t = trunc i32 %q to i8 48 store i8 %t, i8* %z 49 ret void 50} 51define void @foo64(i64 inreg %p, i8* inreg %z) nounwind { 52 %q = lshr i64 %p, 8 53 %t = trunc i64 %q to i8 54 store i8 %t, i8* %z 55 ret void 56} 57