162 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-pc-linux-gnu | FileCheck %s --check-prefix=X863; RUN: llc < %s -mtriple=x86_64-pc-linux-gnu | FileCheck %s --check-prefix=X644 5define i32 @from_cmpeq(i32 %xx, i32 %y) {6; X86-LABEL: from_cmpeq:7; X86: # %bb.0:8; X86-NEXT: xorl %eax, %eax9; X86-NEXT: cmpl $9, {{[0-9]+}}(%esp)10; X86-NEXT: sete %al11; X86-NEXT: andl {{[0-9]+}}(%esp), %eax12; X86-NEXT: retl13;14; X64-LABEL: from_cmpeq:15; X64: # %bb.0:16; X64-NEXT: xorl %eax, %eax17; X64-NEXT: cmpl $9, %edi18; X64-NEXT: sete %al19; X64-NEXT: andl %esi, %eax20; X64-NEXT: retq21 %x = icmp eq i32 %xx, 922 %masked = and i32 %y, 123 24 %r = select i1 %x, i32 %masked, i32 025 ret i32 %r26}27 28define i32 @from_cmpeq_fail_bad_andmask(i32 %xx, i32 %y) {29; X86-LABEL: from_cmpeq_fail_bad_andmask:30; X86: # %bb.0:31; X86-NEXT: cmpl $9, {{[0-9]+}}(%esp)32; X86-NEXT: je .LBB1_133; X86-NEXT: # %bb.2:34; X86-NEXT: xorl %eax, %eax35; X86-NEXT: retl36; X86-NEXT: .LBB1_1:37; X86-NEXT: movl {{[0-9]+}}(%esp), %eax38; X86-NEXT: andl $3, %eax39; X86-NEXT: retl40;41; X64-LABEL: from_cmpeq_fail_bad_andmask:42; X64: # %bb.0:43; X64-NEXT: andl $3, %esi44; X64-NEXT: xorl %eax, %eax45; X64-NEXT: cmpl $9, %edi46; X64-NEXT: cmovel %esi, %eax47; X64-NEXT: retq48 %x = icmp eq i32 %xx, 949 %masked = and i32 %y, 350 %r = select i1 %x, i32 %masked, i32 051 ret i32 %r52}53 54define i32 @from_i1(i1 %x, i32 %y) {55; X86-LABEL: from_i1:56; X86: # %bb.0:57; X86-NEXT: movl {{[0-9]+}}(%esp), %eax58; X86-NEXT: andl {{[0-9]+}}(%esp), %eax59; X86-NEXT: andl $1, %eax60; X86-NEXT: retl61;62; X64-LABEL: from_i1:63; X64: # %bb.0:64; X64-NEXT: movl %edi, %eax65; X64-NEXT: andl %esi, %eax66; X64-NEXT: andl $1, %eax67; X64-NEXT: retq68 %masked = and i32 %y, 169 %r = select i1 %x, i32 %masked, i32 070 ret i32 %r71}72 73define i32 @from_trunc_i8(i8 %xx, i32 %y) {74; X86-LABEL: from_trunc_i8:75; X86: # %bb.0:76; X86-NEXT: movl {{[0-9]+}}(%esp), %eax77; X86-NEXT: andl {{[0-9]+}}(%esp), %eax78; X86-NEXT: andl $1, %eax79; X86-NEXT: retl80;81; X64-LABEL: from_trunc_i8:82; X64: # %bb.0:83; X64-NEXT: movl %edi, %eax84; X64-NEXT: andl %esi, %eax85; X64-NEXT: andl $1, %eax86; X64-NEXT: retq87 %masked = and i32 %y, 188 %x = trunc i8 %xx to i189 %r = select i1 %x, i32 %masked, i32 090 ret i32 %r91}92 93define i32 @from_trunc_i64(i64 %xx, i32 %y) {94; X86-LABEL: from_trunc_i64:95; X86: # %bb.0:96; X86-NEXT: movl {{[0-9]+}}(%esp), %eax97; X86-NEXT: andl {{[0-9]+}}(%esp), %eax98; X86-NEXT: andl $1, %eax99; X86-NEXT: retl100;101; X64-LABEL: from_trunc_i64:102; X64: # %bb.0:103; X64-NEXT: movq %rdi, %rax104; X64-NEXT: andl %esi, %eax105; X64-NEXT: andl $1, %eax106; X64-NEXT: # kill: def $eax killed $eax killed $rax107; X64-NEXT: retq108 %masked = and i32 %y, 1109 %x = trunc i64 %xx to i1110 %r = select i1 %x, i32 %masked, i32 0111 ret i32 %r112}113 114define i32 @from_i1_fail_bad_select0(i1 %x, i32 %y) {115; X86-LABEL: from_i1_fail_bad_select0:116; X86: # %bb.0:117; X86-NEXT: testb $1, {{[0-9]+}}(%esp)118; X86-NEXT: jne .LBB5_1119; X86-NEXT: # %bb.2:120; X86-NEXT: movl $1, %eax121; X86-NEXT: retl122; X86-NEXT: .LBB5_1:123; X86-NEXT: movl {{[0-9]+}}(%esp), %eax124; X86-NEXT: andl $1, %eax125; X86-NEXT: retl126;127; X64-LABEL: from_i1_fail_bad_select0:128; X64: # %bb.0:129; X64-NEXT: andl $1, %esi130; X64-NEXT: testb $1, %dil131; X64-NEXT: movl $1, %eax132; X64-NEXT: cmovnel %esi, %eax133; X64-NEXT: retq134 %masked = and i32 %y, 1135 %r = select i1 %x, i32 %masked, i32 1136 ret i32 %r137}138 139define i32 @from_i1_fail_bad_select1(i1 %x, i32 %y) {140; X86-LABEL: from_i1_fail_bad_select1:141; X86: # %bb.0:142; X86-NEXT: xorl %eax, %eax143; X86-NEXT: testb $1, {{[0-9]+}}(%esp)144; X86-NEXT: jne .LBB6_2145; X86-NEXT: # %bb.1:146; X86-NEXT: movl {{[0-9]+}}(%esp), %eax147; X86-NEXT: andl $1, %eax148; X86-NEXT: .LBB6_2:149; X86-NEXT: retl150;151; X64-LABEL: from_i1_fail_bad_select1:152; X64: # %bb.0:153; X64-NEXT: andl $1, %esi154; X64-NEXT: xorl %eax, %eax155; X64-NEXT: testb $1, %dil156; X64-NEXT: cmovel %esi, %eax157; X64-NEXT: retq158 %masked = and i32 %y, 1159 %r = select i1 %x, i32 0, i32 %masked160 ret i32 %r161}162