brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · a2aaea3 Raw
141 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s --check-prefixes=X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefixes=X644 5define i32 @PR40483_add1(ptr, i32) nounwind {6; X86-LABEL: PR40483_add1:7; X86:       # %bb.0:8; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx9; X86-NEXT:    movl (%ecx), %eax10; X86-NEXT:    addl {{[0-9]+}}(%esp), %eax11; X86-NEXT:    movl %eax, (%ecx)12; X86-NEXT:    jae .LBB0_213; X86-NEXT:  # %bb.1:14; X86-NEXT:    xorl %eax, %eax15; X86-NEXT:  .LBB0_2:16; X86-NEXT:    retl17;18; X64-LABEL: PR40483_add1:19; X64:       # %bb.0:20; X64-NEXT:    xorl %eax, %eax21; X64-NEXT:    addl (%rdi), %esi22; X64-NEXT:    movl %esi, (%rdi)23; X64-NEXT:    cmovael %esi, %eax24; X64-NEXT:    retq25  %3 = load i32, ptr %0, align 826  %4 = tail call { i8, i32 } @llvm.x86.addcarry.32(i8 0, i32 %3, i32 %1)27  %5 = extractvalue { i8, i32 } %4, 128  store i32 %5, ptr %0, align 829  %6 = extractvalue { i8, i32 } %4, 030  %7 = icmp eq i8 %6, 031  %8 = add i32 %1, %332  %9 = or i32 %5, %833  %10 = select i1 %7, i32 %9, i32 034  ret i32 %1035}36 37define i32 @PR40483_add2(ptr, i32) nounwind {38; X86-LABEL: PR40483_add2:39; X86:       # %bb.0:40; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx41; X86-NEXT:    movl (%edx), %ecx42; X86-NEXT:    xorl %eax, %eax43; X86-NEXT:    addl {{[0-9]+}}(%esp), %ecx44; X86-NEXT:    movl %ecx, (%edx)45; X86-NEXT:    jae .LBB1_246; X86-NEXT:  # %bb.1:47; X86-NEXT:    movl %ecx, %eax48; X86-NEXT:  .LBB1_2:49; X86-NEXT:    retl50;51; X64-LABEL: PR40483_add2:52; X64:       # %bb.0:53; X64-NEXT:    xorl %eax, %eax54; X64-NEXT:    addl (%rdi), %esi55; X64-NEXT:    movl %esi, (%rdi)56; X64-NEXT:    cmovbl %esi, %eax57; X64-NEXT:    retq58  %3 = load i32, ptr %0, align 859  %4 = tail call { i8, i32 } @llvm.x86.addcarry.32(i8 0, i32 %3, i32 %1)60  %5 = extractvalue { i8, i32 } %4, 161  store i32 %5, ptr %0, align 862  %6 = extractvalue { i8, i32 } %4, 063  %7 = icmp eq i8 %6, 064  %8 = add i32 %3, %165  %9 = or i32 %5, %866  %10 = select i1 %7, i32 0, i32 %967  ret i32 %1068}69 70define i32 @adc_merge_constants(i32 %a0) nounwind {71; X86-LABEL: adc_merge_constants:72; X86:       # %bb.0:73; X86-NEXT:    xorl %eax, %eax74; X86-NEXT:    btl $11, {{[0-9]+}}(%esp)75; X86-NEXT:    adcl $54, %eax76; X86-NEXT:    retl77;78; X64-LABEL: adc_merge_constants:79; X64:       # %bb.0:80; X64-NEXT:    xorl %eax, %eax81; X64-NEXT:    btl $11, %edi82; X64-NEXT:    adcl $54, %eax83; X64-NEXT:    retq84  %bit = lshr i32 %a0, 1185  %mask = and i32 %bit, 186  %isz = trunc i32 %mask to i887  %adc = tail call { i8, i32 } @llvm.x86.addcarry.32(i8 %isz, i32 55, i32 -1)88  %sum = extractvalue { i8, i32 } %adc, 189  ret i32 %sum90}91 92define i32 @adc_merge_sub(i32 %a0) nounwind {93; X86-LABEL: adc_merge_sub:94; X86:       # %bb.0:95; X86-NEXT:    pushl %edi96; X86-NEXT:    pushl %esi97; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi98; X86-NEXT:    xorl %eax, %eax99; X86-NEXT:    addl $42, %edi100; X86-NEXT:    setb %al101; X86-NEXT:    movl %edi, %esi102; X86-NEXT:    negl %esi103; X86-NEXT:    pushl %eax104; X86-NEXT:    calll use@PLT105; X86-NEXT:    addl $4, %esp106; X86-NEXT:    xorl %edi, %esi107; X86-NEXT:    movl %esi, %eax108; X86-NEXT:    popl %esi109; X86-NEXT:    popl %edi110; X86-NEXT:    retl111;112; X64-LABEL: adc_merge_sub:113; X64:       # %bb.0:114; X64-NEXT:    pushq %rbp115; X64-NEXT:    pushq %rbx116; X64-NEXT:    pushq %rax117; X64-NEXT:    movl %edi, %ebx118; X64-NEXT:    xorl %edi, %edi119; X64-NEXT:    addl $42, %ebx120; X64-NEXT:    setb %dil121; X64-NEXT:    movl %ebx, %ebp122; X64-NEXT:    negl %ebp123; X64-NEXT:    callq use@PLT124; X64-NEXT:    xorl %ebx, %ebp125; X64-NEXT:    movl %ebp, %eax126; X64-NEXT:    addq $8, %rsp127; X64-NEXT:    popq %rbx128; X64-NEXT:    popq %rbp129; X64-NEXT:    retq130  %adc = tail call { i8, i32 } @llvm.x86.addcarry.32(i8 0, i32 %a0, i32 42)131  %carry = extractvalue { i8, i32 } %adc, 0132  call void @use(i8 %carry)133  %sum = extractvalue { i8, i32 } %adc, 1134  %sub = sub i32 -42, %a0135  %result = xor i32 %sum, %sub136  ret i32 %result137}138 139declare { i8, i32 } @llvm.x86.addcarry.32(i8, i32, i32)140declare void @use(i8)141