LLVM backend for 6502
Go to file
Chris Lattner a80d668215 Implement rdar://6480391, extending of equality icmp's to avoid a truncation.
I noticed this in the code compiled for a routine using std::map, which produced
this code:
	%25 = tail call i32 @memcmp(i8* %24, i8* %23, i32 6) nounwind readonly
	%.lobit.i = lshr i32 %25, 31		; <i32> [#uses=1]
	%tmp.i = trunc i32 %.lobit.i to i8		; <i8> [#uses=1]
	%toBool = icmp eq i8 %tmp.i, 0		; <i1> [#uses=1]
	br i1 %toBool, label %bb3, label %bb4
which compiled to:

	call	L_memcmp$stub
	shrl	$31, %eax
	testb	%al, %al
	jne	LBB1_11	## 

with this change, we compile it to:

	call	L_memcmp$stub
	testl	%eax, %eax
	js	LBB1_11

This triggers all the time in common code, with patters like this:

	%169 = and i32 %ply, 1		; <i32> [#uses=1]
	%170 = trunc i32 %169 to i8		; <i8> [#uses=1]
	%toBool = icmp ne i8 %170, 0		; <i1> [#uses=1]

 	%7 = lshr i32 %6, 24		; <i32> [#uses=1]
	%9 = trunc i32 %7 to i8		; <i8> [#uses=1]
	%10 = icmp ne i8 %9, 0		; <i1> [#uses=1]

etc



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61985 91177308-0d34-0410-b5e6-96231b3b80d8
2009-01-09 07:47:06 +00:00
autoconf
bindings
cmake CMake: replace `rm' with portable invocations of cmake. 2009-01-07 19:24:44 +00:00
docs Get rid of the tagging functions and use PointerIntPair. 2009-01-05 16:05:32 +00:00
examples
include add a helper method. 2009-01-09 05:27:40 +00:00
lib Implement rdar://6480391, extending of equality icmp's to avoid a truncation. 2009-01-09 07:47:06 +00:00
projects
runtime
test Implement rdar://6480391, extending of equality icmp's to avoid a truncation. 2009-01-09 07:47:06 +00:00
tools CMake: replace `rm' with portable invocations of cmake. 2009-01-07 19:24:44 +00:00
unittests Some generic clean-ups. Also make the StringMapEntryInitializer specialization apply only to the tests that are actually testing it. 2009-01-08 09:31:36 +00:00
utils remove some exclusions that don't exist anymore. 2009-01-08 19:02:03 +00:00
website
win32
Xcode
build-for-llvm-top.sh
CMakeLists.txt
configure Regenerate. 2009-01-04 23:12:30 +00:00
CREDITS.TXT * Moved author attribution to CREDITS.TXT 2009-01-08 16:40:25 +00:00
LICENSE.TXT Renamed Google Test license file from COPYING to LICENSE.TXT to match LLVM 2009-01-05 17:42:15 +00:00
llvm.spec.in
Makefile Removed trailing whitespace. 2009-01-08 02:11:55 +00:00
Makefile.common
Makefile.config.in
Makefile.rules Removed trailing whitespace. 2009-01-08 02:11:55 +00:00
ModuleInfo.txt
README.txt

Low Level Virtual Machine (LLVM)
================================

This directory and its subdirectories contain source code for the Low Level 
Virtual Machine, a toolkit for the construction of highly optimized compilers,
optimizers, and runtime environments. 

LLVM is open source software. You may freely distribute it under the terms of
the license agreement found in LICENSE.txt.

Please see the HTML documentation provided in docs/index.html for further
assistance with LLVM.