Changeset View
Changeset View
Standalone View
Standalone View
test/CodeGen/X86/fold-tied-op.ll
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | |||||
; RUN: llc -verify-machineinstrs -mtriple=i386--netbsd < %s | FileCheck %s | ; RUN: llc -verify-machineinstrs -mtriple=i386--netbsd < %s | FileCheck %s | ||||
; Regression test for http://reviews.llvm.org/D5701 | ; Regression test for http://reviews.llvm.org/D5701 | ||||
; ModuleID = 'xxhash.i' | ; ModuleID = 'xxhash.i' | ||||
target datalayout = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128" | target datalayout = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128" | ||||
target triple = "i386--netbsd" | target triple = "i386--netbsd" | ||||
; CHECK-LABEL: fn1 | ; CHECK-LABEL: fn1 | ||||
; CHECK: orl {{.*#+}} 4-byte Folded Reload | ; CHECK: orl {{.*#+}} 4-byte Folded Reload | ||||
; CHECK: addl {{.*#+}} 4-byte Folded Reload | ; CHECK: addl {{.*#+}} 4-byte Folded Reload | ||||
; CHECK: xorl {{.*#+}} 4-byte Folded Reload | ; CHECK: xorl {{.*#+}} 4-byte Folded Reload | ||||
; CHECK: xorl {{.*#+}} 4-byte Folded Reload | ; CHECK: xorl {{.*#+}} 4-byte Folded Reload | ||||
; CHECK: retl | ; CHECK: retl | ||||
%struct.XXH_state64_t = type { i32, i32, i64, i64, i64 } | %struct.XXH_state64_t = type { i32, i32, i64, i64, i64 } | ||||
@a = common global i32 0, align 4 | @a = common global i32 0, align 4 | ||||
@b = common global i64 0, align 8 | @b = common global i64 0, align 8 | ||||
; Function Attrs: nounwind uwtable | ; Function Attrs: nounwind uwtable | ||||
define i64 @fn1() #0 { | define i64 @fn1() #0 { | ||||
; CHECK-LABEL: fn1: | |||||
; CHECK: # %bb.0: # %entry | |||||
; CHECK-NEXT: pushl %ebp | |||||
; CHECK-NEXT: .cfi_def_cfa_offset 8 | |||||
; CHECK-NEXT: .cfi_offset %ebp, -8 | |||||
; CHECK-NEXT: movl %esp, %ebp | |||||
; CHECK-NEXT: .cfi_def_cfa_register %ebp | |||||
; CHECK-NEXT: pushl %ebx | |||||
; CHECK-NEXT: pushl %edi | |||||
; CHECK-NEXT: pushl %esi | |||||
; CHECK-NEXT: subl $12, %esp | |||||
; CHECK-NEXT: .cfi_offset %esi, -20 | |||||
; CHECK-NEXT: .cfi_offset %edi, -16 | |||||
; CHECK-NEXT: .cfi_offset %ebx, -12 | |||||
; CHECK-NEXT: movl $-1028477379, %edi # imm = 0xC2B2AE3D | |||||
; CHECK-NEXT: movl $668265295, %ecx # imm = 0x27D4EB4F | |||||
; CHECK-NEXT: movl a, %ebx | |||||
; CHECK-NEXT: cmpl $0, (%ebx) | |||||
; CHECK-NEXT: je .LBB0_2 | |||||
; CHECK-NEXT: # %bb.1: # %if.then | |||||
; CHECK-NEXT: movl 8(%ebx), %edx | |||||
; CHECK-NEXT: movl 12(%ebx), %edi | |||||
; CHECK-NEXT: movl %edi, %esi | |||||
; CHECK-NEXT: shldl $1, %edx, %esi | |||||
; CHECK-NEXT: orl %edi, %esi | |||||
; CHECK-NEXT: leal (%edx,%edx), %eax | |||||
; CHECK-NEXT: orl %edx, %eax | |||||
; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill | |||||
; CHECK-NEXT: movl 16(%ebx), %edi | |||||
; CHECK-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill | |||||
; CHECK-NEXT: movl 20(%ebx), %eax | |||||
; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill | |||||
; CHECK-NEXT: movl %eax, %edx | |||||
; CHECK-NEXT: shldl $2, %edi, %edx | |||||
; CHECK-NEXT: movl %eax, %edi | |||||
; CHECK-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload | |||||
; CHECK-NEXT: shldl $31, %eax, %edi | |||||
; CHECK-NEXT: shll $2, %eax | |||||
; CHECK-NEXT: orl %edi, %eax | |||||
; CHECK-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload | |||||
; CHECK-NEXT: shrl %edi | |||||
; CHECK-NEXT: orl %edx, %edi | |||||
; CHECK-NEXT: addl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload | |||||
; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill | |||||
; CHECK-NEXT: adcl %esi, %edi | |||||
; CHECK-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill | |||||
; CHECK-NEXT: movl 28(%ebx), %edi | |||||
; CHECK-NEXT: movl 24(%ebx), %eax | |||||
; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill | |||||
; CHECK-NEXT: movl $-1028477379, %ebx # imm = 0xC2B2AE3D | |||||
; CHECK-NEXT: imull %eax, %ebx | |||||
; CHECK-NEXT: mull %ecx | |||||
; CHECK-NEXT: movl %eax, %esi | |||||
; CHECK-NEXT: imull %edi, %ecx | |||||
; CHECK-NEXT: addl %ebx, %ecx | |||||
; CHECK-NEXT: addl %edx, %ecx | |||||
; CHECK-NEXT: imull $1336530590, %edi, %edi # imm = 0x4FA9D69E | |||||
; CHECK-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload | |||||
; CHECK-NEXT: imull $-2056954758, %eax, %edx # imm = 0x85655C7A | |||||
; CHECK-NEXT: addl %edx, %edi | |||||
; CHECK-NEXT: movl $1336530590, %edx # imm = 0x4FA9D69E | |||||
; CHECK-NEXT: mull %edx | |||||
; CHECK-NEXT: addl %edx, %edi | |||||
; CHECK-NEXT: shrdl $3, %ecx, %esi | |||||
; CHECK-NEXT: sarl $3, %ecx | |||||
; CHECK-NEXT: orl %edi, %ecx | |||||
; CHECK-NEXT: orl %eax, %esi | |||||
; CHECK-NEXT: imull $326129324, %esi, %eax # imm = 0x137056AC | |||||
; CHECK-NEXT: imull $-66860409, %ecx, %ecx # imm = 0xFC03CA87 | |||||
; CHECK-NEXT: addl %eax, %ecx | |||||
; CHECK-NEXT: movl $-66860409, %edi # imm = 0xFC03CA87 | |||||
; CHECK-NEXT: movl %esi, %eax | |||||
; CHECK-NEXT: mull %edi | |||||
; CHECK-NEXT: addl %edx, %ecx | |||||
; CHECK-NEXT: xorl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload | |||||
; CHECK-NEXT: xorl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload | |||||
; CHECK-NEXT: movl %ecx, b+4 | |||||
; CHECK-NEXT: imull $326129324, %eax, %edx # imm = 0x137056AC | |||||
; CHECK-NEXT: imull $-66860409, %ecx, %ecx # imm = 0xFC03CA87 | |||||
; CHECK-NEXT: addl %edx, %ecx | |||||
; CHECK-NEXT: movl %eax, b | |||||
; CHECK-NEXT: mull %edi | |||||
; CHECK-NEXT: jmp .LBB0_3 | |||||
; CHECK-NEXT: .LBB0_2: # %if.else | |||||
; CHECK-NEXT: xorl b+4, %edi | |||||
; CHECK-NEXT: xorl b, %ecx | |||||
; CHECK-NEXT: movl $1419758215, %edx # imm = 0x549FCA87 | |||||
; CHECK-NEXT: movl %ecx, %eax | |||||
; CHECK-NEXT: mull %edx | |||||
; CHECK-NEXT: imull $93298681, %ecx, %esi # imm = 0x58F9FF9 | |||||
; CHECK-NEXT: imull $1419758215, %edi, %ecx # imm = 0x549FCA87 | |||||
; CHECK-NEXT: addl %esi, %ecx | |||||
; CHECK-NEXT: .LBB0_3: # %if.end | |||||
; CHECK-NEXT: addl %edx, %ecx | |||||
; CHECK-NEXT: addl $-1028477341, %eax # imm = 0xC2B2AE63 | |||||
; CHECK-NEXT: adcl $-2048144777, %ecx # imm = 0x85EBCA77 | |||||
; CHECK-NEXT: movl %eax, b | |||||
; CHECK-NEXT: movl %ecx, b+4 | |||||
; CHECK-NEXT: addl $12, %esp | |||||
; CHECK-NEXT: popl %esi | |||||
; CHECK-NEXT: popl %edi | |||||
; CHECK-NEXT: popl %ebx | |||||
; CHECK-NEXT: popl %ebp | |||||
; CHECK-NEXT: .cfi_def_cfa %esp, 4 | |||||
; CHECK-NEXT: retl | |||||
entry: | entry: | ||||
%0 = load i32, i32* @a, align 4, !tbaa !1 | %0 = load i32, i32* @a, align 4, !tbaa !1 | ||||
%1 = inttoptr i32 %0 to %struct.XXH_state64_t* | %1 = inttoptr i32 %0 to %struct.XXH_state64_t* | ||||
%total_len = getelementptr inbounds %struct.XXH_state64_t, %struct.XXH_state64_t* %1, i32 0, i32 0 | %total_len = getelementptr inbounds %struct.XXH_state64_t, %struct.XXH_state64_t* %1, i32 0, i32 0 | ||||
%2 = load i32, i32* %total_len, align 4, !tbaa !5 | %2 = load i32, i32* %total_len, align 4, !tbaa !5 | ||||
%tobool = icmp eq i32 %2, 0 | %tobool = icmp eq i32 %2, 0 | ||||
br i1 %tobool, label %if.else, label %if.then | br i1 %tobool, label %if.else, label %if.then | ||||
▲ Show 20 Lines • Show All 52 Lines • Show Last 20 Lines |