brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · a40ad8f Raw
107 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=X644 5define i32 @sext_known_nonzero(i16 %xx) {6; X86-LABEL: sext_known_nonzero:7; X86:       # %bb.0:8; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx9; X86-NEXT:    movl $256, %eax # imm = 0x10010; X86-NEXT:    shll %cl, %eax11; X86-NEXT:    cwtl12; X86-NEXT:    bsfl %eax, %ecx13; X86-NEXT:    movl $32, %eax14; X86-NEXT:    cmovnel %ecx, %eax15; X86-NEXT:    retl16;17; X64-LABEL: sext_known_nonzero:18; X64:       # %bb.0:19; X64-NEXT:    movl %edi, %ecx20; X64-NEXT:    movl $256, %eax # imm = 0x10021; X64-NEXT:    # kill: def $cl killed $cl killed $ecx22; X64-NEXT:    shll %cl, %eax23; X64-NEXT:    movswl %ax, %ecx24; X64-NEXT:    movl $32, %eax25; X64-NEXT:    rep bsfl %ecx, %eax26; X64-NEXT:    retq27  %x = shl i16 256, %xx28  %z = sext i16 %x to i3229  %r = call i32 @llvm.cttz.i32(i32 %z, i1 false)30  ret i32 %r31}32 33define i32 @sext_known_nonzero_nuw(i16 %xx) {34; X86-LABEL: sext_known_nonzero_nuw:35; X86:       # %bb.0:36; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx37; X86-NEXT:    movl $256, %eax # imm = 0x10038; X86-NEXT:    shll %cl, %eax39; X86-NEXT:    cwtl40; X86-NEXT:    rep bsfl %eax, %eax41; X86-NEXT:    retl42;43; X64-LABEL: sext_known_nonzero_nuw:44; X64:       # %bb.0:45; X64-NEXT:    movl %edi, %ecx46; X64-NEXT:    movl $256, %eax # imm = 0x10047; X64-NEXT:    # kill: def $cl killed $cl killed $ecx48; X64-NEXT:    shll %cl, %eax49; X64-NEXT:    cwtl50; X64-NEXT:    rep bsfl %eax, %eax51; X64-NEXT:    retq52  %x = shl nuw i16 256, %xx53  %z = sext i16 %x to i3254  %r = call i32 @llvm.cttz.i32(i32 %z, i1 false)55  ret i32 %r56}57 58define i32 @sext_known_nonzero_nsw(i16 %xx) {59; X86-LABEL: sext_known_nonzero_nsw:60; X86:       # %bb.0:61; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx62; X86-NEXT:    movl $256, %eax # imm = 0x10063; X86-NEXT:    shll %cl, %eax64; X86-NEXT:    movzwl %ax, %eax65; X86-NEXT:    rep bsfl %eax, %eax66; X86-NEXT:    retl67;68; X64-LABEL: sext_known_nonzero_nsw:69; X64:       # %bb.0:70; X64-NEXT:    movl %edi, %ecx71; X64-NEXT:    movl $256, %eax # imm = 0x10072; X64-NEXT:    # kill: def $cl killed $cl killed $ecx73; X64-NEXT:    shll %cl, %eax74; X64-NEXT:    movzwl %ax, %eax75; X64-NEXT:    rep bsfl %eax, %eax76; X64-NEXT:    retq77  %x = shl nsw i16 256, %xx78  %z = sext i16 %x to i3279  %r = call i32 @llvm.cttz.i32(i32 %z, i1 false)80  ret i32 %r81}82 83define i32 @sext_known_nonzero_nuw_nsw(i16 %xx) {84; X86-LABEL: sext_known_nonzero_nuw_nsw:85; X86:       # %bb.0:86; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx87; X86-NEXT:    movl $256, %eax # imm = 0x10088; X86-NEXT:    shll %cl, %eax89; X86-NEXT:    movzwl %ax, %eax90; X86-NEXT:    rep bsfl %eax, %eax91; X86-NEXT:    retl92;93; X64-LABEL: sext_known_nonzero_nuw_nsw:94; X64:       # %bb.0:95; X64-NEXT:    movl %edi, %ecx96; X64-NEXT:    movl $256, %eax # imm = 0x10097; X64-NEXT:    # kill: def $cl killed $cl killed $ecx98; X64-NEXT:    shll %cl, %eax99; X64-NEXT:    movzwl %ax, %eax100; X64-NEXT:    rep bsfl %eax, %eax101; X64-NEXT:    retq102  %x = shl nuw nsw i16 256, %xx103  %z = sext i16 %x to i32104  %r = call i32 @llvm.cttz.i32(i32 %z, i1 false)105  ret i32 %r106}107