brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · beea6d3 Raw
144 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown | FileCheck %s --check-prefix=X863; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefix=X644 5define i32 @mask_add_sext_i32_i64(ptr %base, i32 %i) {6; X86-LABEL: mask_add_sext_i32_i64:7; X86:       # %bb.0:8; X86-NEXT:    movsbl {{[0-9]+}}(%esp), %eax9; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx10; X86-NEXT:    movl 12(%ecx,%eax,4), %eax11; X86-NEXT:    retl12;13; X64-LABEL: mask_add_sext_i32_i64:14; X64:       # %bb.0:15; X64-NEXT:    sarl $24, %esi16; X64-NEXT:    movslq %esi, %rax17; X64-NEXT:    movl 12(%rdi,%rax,4), %eax18; X64-NEXT:    retq19  %mask = ashr i32 %i, 2420  %offset = add i32 %mask, 321  %sext = sext i32 %offset to i6422  %gep = getelementptr i32, ptr %base, i64 %sext23  %ret = load i32, ptr %gep24  ret i32 %ret25}26 27define i32 @mask_add_zext_i32_i64(ptr %base, i32 %i) {28; X86-LABEL: mask_add_zext_i32_i64:29; X86:       # %bb.0:30; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax31; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx32; X86-NEXT:    andl $15, %ecx33; X86-NEXT:    movl 12(%eax,%ecx,4), %eax34; X86-NEXT:    retl35;36; X64-LABEL: mask_add_zext_i32_i64:37; X64:       # %bb.0:38; X64-NEXT:    # kill: def $esi killed $esi def $rsi39; X64-NEXT:    andl $15, %esi40; X64-NEXT:    movl 12(%rdi,%rsi,4), %eax41; X64-NEXT:    retq42  %mask = and i32 %i, 1543  %offset = add i32 %mask, 344  %zext = zext i32 %offset to i6445  %gep = getelementptr i32, ptr %base, i64 %zext46  %ret = load i32, ptr %gep47  ret i32 %ret48}49 50define i32 @mask_offset_scale_zext_i32_i64(ptr %base, i32 %i) {51; X86-LABEL: mask_offset_scale_zext_i32_i64:52; X86:       # %bb.0:53; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax54; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx55; X86-NEXT:    shll $11, %ecx56; X86-NEXT:    movl 48(%eax,%ecx), %eax57; X86-NEXT:    retl58;59; X64-LABEL: mask_offset_scale_zext_i32_i64:60; X64:       # %bb.0:61; X64-NEXT:    # kill: def $esi killed $esi def $rsi62; X64-NEXT:    andl $65280, %esi # imm = 0xFF0063; X64-NEXT:    movl 48(%rdi,%rsi,8), %eax64; X64-NEXT:    retq65  %mask = and i32 %i, 6528066  %offset = or i32 %mask, 667  %scale = shl i32 %offset, 168  %idxprom = zext i32 %scale to i6469  %arrayidx = getelementptr inbounds i32, ptr %base, i64 %idxprom70  %load = load i32, ptr %arrayidx, align 471  ret i32 %load72}73 74; PR97533 - multiple uses of shl node (add + gep) in the same dependency chain.75define i64 @add_shl_zext(ptr %ptr, i8 %arg) nounwind {76; X86-LABEL: add_shl_zext:77; X86:       # %bb.0:78; X86-NEXT:    pushl %esi79; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx80; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi81; X86-NEXT:    movl 4(%esi,%ecx,4), %edx82; X86-NEXT:    leal (,%ecx,8), %eax83; X86-NEXT:    addl (%esi,%ecx,4), %eax84; X86-NEXT:    adcl $0, %edx85; X86-NEXT:    popl %esi86; X86-NEXT:    retl87;88; X64-LABEL: add_shl_zext:89; X64:       # %bb.0:90; X64-NEXT:    movzbl %sil, %eax91; X64-NEXT:    shll $3, %eax92; X64-NEXT:    addq (%rdi,%rax), %rax93; X64-NEXT:    retq94  %idx = zext i8 %arg to i6495  %gep = getelementptr ptr, ptr %ptr, i64 %idx96  %val = load i64, ptr %gep, align 897  %shl = shl i64 %idx, 398  %sum = add i64 %val, %shl99  ret i64 %sum100}101 102define i32 @PR55714_i32(i32 %n, i32 %q) {103; X86-LABEL: PR55714_i32:104; X86:       # %bb.0:105; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx106; X86-NEXT:    leal (,%ecx,8), %eax107; X86-NEXT:    addl {{[0-9]+}}(%esp), %eax108; X86-NEXT:    subl %ecx, %eax109; X86-NEXT:    retl110;111; X64-LABEL: PR55714_i32:112; X64:       # %bb.0:113; X64-NEXT:    # kill: def $esi killed $esi def $rsi114; X64-NEXT:    # kill: def $edi killed $edi def $rdi115; X64-NEXT:    leal (%rdi,%rsi,8), %eax116; X64-NEXT:    subl %esi, %eax117; X64-NEXT:    retq118  %mul = mul i32 %q, 7119  %add = add i32 %mul, %n120  ret i32 %add121}122 123define i64 @PR55714_i64(i64 %n, i64 %q) {124; X86-LABEL: PR55714_i64:125; X86:       # %bb.0:126; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx127; X86-NEXT:    movl $7, %eax128; X86-NEXT:    mull {{[0-9]+}}(%esp)129; X86-NEXT:    leal (%edx,%ecx,8), %edx130; X86-NEXT:    subl %ecx, %edx131; X86-NEXT:    addl {{[0-9]+}}(%esp), %eax132; X86-NEXT:    adcl {{[0-9]+}}(%esp), %edx133; X86-NEXT:    retl134;135; X64-LABEL: PR55714_i64:136; X64:       # %bb.0:137; X64-NEXT:    leaq (%rdi,%rsi,8), %rax138; X64-NEXT:    subq %rsi, %rax139; X64-NEXT:    retq140  %mul = mul i64 %q, 7141  %add = add i64 %mul, %n142  ret i64 %add143}144