111 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s3 4define i8 @t1(ptr %X, i64 %i) {5; CHECK-LABEL: t1:6; CHECK: # %bb.0: # %entry7; CHECK-NEXT: andq $-255, %rsi8; CHECK-NEXT: movzbl (%rdi,%rsi,4), %eax9; CHECK-NEXT: retq10 11entry:12 %tmp2 = shl i64 %i, 213 %tmp4 = and i64 %tmp2, -102014 %tmp7 = getelementptr i8, ptr %X, i64 %tmp415 %tmp9 = load i8, ptr %tmp716 ret i8 %tmp917}18 19define i8 @t2(ptr %X, i64 %i) {20; CHECK-LABEL: t2:21; CHECK: # %bb.0: # %entry22; CHECK-NEXT: andq $-14, %rsi23; CHECK-NEXT: movzbl (%rdi,%rsi,4), %eax24; CHECK-NEXT: retq25 26entry:27 %tmp2 = shl i64 %i, 228 %tmp4 = and i64 %tmp2, -5629 %tmp7 = getelementptr i8, ptr %X, i64 %tmp430 %tmp9 = load i8, ptr %tmp731 ret i8 %tmp932}33 34define i8 @t3(ptr %X, i64 %i) {35; CHECK-LABEL: t3:36; CHECK: # %bb.0: # %entry37; CHECK-NEXT: movl %esi, %eax38; CHECK-NEXT: movzbl (%rdi,%rax,4), %eax39; CHECK-NEXT: retq40 41entry:42 %tmp2 = shl i64 %i, 243 %tmp4 = and i64 %tmp2, 1717986918044 %tmp7 = getelementptr i8, ptr %X, i64 %tmp445 %tmp9 = load i8, ptr %tmp746 ret i8 %tmp947}48 49define i8 @t4(ptr %X, i64 %i) {50; CHECK-LABEL: t4:51; CHECK: # %bb.0: # %entry52; CHECK-NEXT: andl $-2, %esi53; CHECK-NEXT: movzbl (%rdi,%rsi,4), %eax54; CHECK-NEXT: retq55 56entry:57 %tmp2 = shl i64 %i, 258 %tmp4 = and i64 %tmp2, 1717986917659 %tmp7 = getelementptr i8, ptr %X, i64 %tmp460 %tmp9 = load i8, ptr %tmp761 ret i8 %tmp962}63 64define i8 @t5(ptr %X, i64 %i) {65; CHECK-LABEL: t5:66; CHECK: # %bb.0: # %entry67; CHECK-NEXT: andl $-250002, %esi # imm = 0xFFFC2F6E68; CHECK-NEXT: movzbl (%rdi,%rsi,4), %eax69; CHECK-NEXT: retq70 71entry:72 %tmp2 = shl i64 %i, 273 %tmp4 = and i64 %tmp2, 1717886917674 %tmp7 = getelementptr i8, ptr %X, i64 %tmp475 %tmp9 = load i8, ptr %tmp776 ret i8 %tmp977}78 79define i8 @t6(ptr %X, i32 %i) {80; CHECK-LABEL: t6:81; CHECK: # %bb.0: # %entry82; CHECK-NEXT: # kill: def $esi killed $esi def $rsi83; CHECK-NEXT: andl $15, %esi84; CHECK-NEXT: movzbl (%rdi,%rsi,4), %eax85; CHECK-NEXT: retq86entry:87 %tmp2 = shl i32 %i, 288 %tmp3 = zext i32 %tmp2 to i6489 %tmp4 = and i64 %tmp3, 6090 %tmp7 = getelementptr i8, ptr %X, i64 %tmp491 %tmp9 = load i8, ptr %tmp792 ret i8 %tmp993}94 95define i32 @t7(<16 x i8> %a0, ptr %p0) {96; CHECK-LABEL: t7:97; CHECK: # %bb.0:98; CHECK-NEXT: pmovmskb %xmm0, %eax99; CHECK-NEXT: shrl $3, %eax100; CHECK-NEXT: movzbl (%rdi,%rax,4), %eax101; CHECK-NEXT: retq102 %i = call i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8> %a0)103 %index = lshr i32 %i, 1104 %mask = and i32 %index, 16777212105 %val.ptr = getelementptr inbounds i8, ptr %p0, i32 %mask106 %val = load i8, ptr %val.ptr107 %ext = zext i8 %val to i32108 ret i32 %ext109}110declare i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8>)111