[LLVMbugs] [Bug 7279] New: GVN emits expensive BitCast
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Tue Jun 1 21:05:27 PDT 2010
http://llvm.org/bugs/show_bug.cgi?id=7279
Summary: GVN emits expensive BitCast
Product: libraries
Version: trunk
Platform: PC
OS/Version: Windows NT
Status: NEW
Severity: normal
Priority: P
Component: Scalar Optimizations
AssignedTo: unassignedbugs at nondot.org
ReportedBy: geek4civic at gmail.com
CC: llvmbugs at cs.uiuc.edu, geek4civic at gmail.com
; ---- a testcase
target datalayout =
"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32"
target triple = "i386-mingw32"
define void @xg(i8* %p, i8* %q) nounwind {
entry:
%0 = bitcast i8* %p to double*
%1 = load double* %0, align 8
%2 = bitcast i8* %q to double*
%3 = load double* %2, align 8
%4 = fcmp olt double %1, %3
br i1 %4, label %return, label %bb
bb:
%5 = load i8* %p, align 1
%6 = load i8* %q, align 1
store i8 %6, i8* %p, align 1
store i8 %5, i8* %q, align 1
%7 = getelementptr inbounds i8* %p, i32 1
%8 = load i8* %7, align 1
%9 = getelementptr inbounds i8* %q, i32 1
%10 = load i8* %9, align 1
%11 = getelementptr inbounds i8* %p, i32 1
store i8 %10, i8* %11, align 1
%12 = getelementptr inbounds i8* %q, i32 1
store i8 %8, i8* %12, align 1
ret void
return:
ret void
}
---- after -gvn
define void @xg(i8* %p, i8* %q) nounwind {
entry:
%0 = bitcast i8* %p to double*
%1 = load double* %0, align 8
%2 = bitcast i8* %q to double*
%3 = load double* %2, align 8
%4 = fcmp olt double %1, %3
%tmp = bitcast double %1 to i64 ;!!!
%tmp1 = trunc i64 %tmp to i8
%tmp2 = bitcast double %3 to i64 ;!!!
%tmp3 = trunc i64 %tmp2 to i8
br i1 %4, label %return, label %bb
bb:
store i8 %tmp3, i8* %p, align 1
store i8 %tmp1, i8* %q, align 1
%5 = getelementptr inbounds i8* %p, i32 1
%6 = load i8* %5, align 1
%7 = getelementptr inbounds i8* %q, i32 1
%8 = load i8* %7, align 1
store i8 %8, i8* %5, align 1
store i8 %6, i8* %7, align 1
ret void
return:
ret void
}
---- llc-generated code
_xg: # @xg
# BB#0: # %entry
subl $20, %esp
movl 24(%esp), %eax
movsd (%eax), %xmm0
movsd %xmm0, 8(%esp) ;!!!
movl 28(%esp), %ecx
movsd (%ecx), %xmm1
movsd %xmm1, (%esp) ;!!!
ucomisd %xmm0, %xmm1
ja LBB0_2
# BB#1: # %bb
movb (%esp), %dl ;...
movb 8(%esp), %dh ;...
movb %dl, (%eax)
movb %dh, (%ecx)
movb 1(%eax), %dl
movb 1(%ecx), %dh
movb %dh, 1(%eax)
movb %dl, 1(%ecx)
LBB0_2: # %return
addl $20, %esp
ret
----
BitCast double to i64 would be expensive.
(Core2 and Nehalem could do efficiently with movd xmm to gpr)
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
More information about the llvm-bugs
mailing list