From anton at korobeynikov.info Mon Nov 29 01:06:38 2010 From: anton at korobeynikov.info (Anton Korobeynikov) Date: Mon, 29 Nov 2010 10:06:38 +0300 Subject: [llvm-commits] [llvm] r120225 - in /llvm/trunk: lib/Target/X86/X86ISelLowering.cpp lib/Target/X86/X86ISelLowering.h lib/Target/X86/X86InstrCompiler.td test/CodeGen/X86/2009-04-24.ll test/CodeGen/X86/2009-12-11-TLSNoRedZone.ll test/CodeGen/X86/tls Message-ID: >> ? ? MachineBasicBlock *EmitLoweredTLSCall(MachineInstr *MI, >> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? MachineBasicBlock *BB) const; >> >> + ? ?MachineBasicBlock *emitLoweredTLSAddr(MachineInstr *MI, >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?MachineBasicBlock *BB) const; > > BTW: I think what Anton was talking about was the upper to lower case > difference between these two functions not matching. Yeah, exactly. Sorry I was not clear enough :) -- With best regards, Anton Korobeynikov Faculty of Mathematics and Mechanics, Saint Petersburg State University From geek4civic at gmail.com Mon Nov 29 01:58:32 2010 From: geek4civic at gmail.com (NAKAMURA Takumi) Date: Mon, 29 Nov 2010 07:58:32 -0000 Subject: [llvm-commits] [llvm] r120282 - in /llvm/trunk/test: Analysis/Profiling/profiling-tool-chain.ll BugPoint/crash-narrowfunctiontest.ll BugPoint/metadata.ll BugPoint/remove_arguments_test.ll Feature/load_module.ll Message-ID: <20101129075833.04F592A6C12D@llvm.org> Author: chapuni Date: Mon Nov 29 01:58:32 2010 New Revision: 120282 URL: http://llvm.org/viewvc/llvm-project?rev=120282&view=rev Log: test: Check the feature 'loadable_module' with load modules in %llvmshlibdir. %llvmshlibdir should be 'bin' on Cygming. Modified: llvm/trunk/test/Analysis/Profiling/profiling-tool-chain.ll llvm/trunk/test/BugPoint/crash-narrowfunctiontest.ll llvm/trunk/test/BugPoint/metadata.ll llvm/trunk/test/BugPoint/remove_arguments_test.ll llvm/trunk/test/Feature/load_module.ll Modified: llvm/trunk/test/Analysis/Profiling/profiling-tool-chain.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Profiling/profiling-tool-chain.ll?rev=120282&r1=120281&r2=120282&view=diff ============================================================================== --- llvm/trunk/test/Analysis/Profiling/profiling-tool-chain.ll (original) +++ llvm/trunk/test/Analysis/Profiling/profiling-tool-chain.ll Mon Nov 29 01:58:32 2010 @@ -9,8 +9,8 @@ ; Test the creation, reading and displaying of profile ; RUX: rm -f llvmprof.out -; RUX: lli -load %llvmlibsdir/profile_rt%shlibext %t2 -; RUX: lli -load %llvmlibsdir/profile_rt%shlibext %t2 1 2 +; RUX: lli -load %llvmshlibdir/profile_rt%shlibext %t2 +; RUX: lli -load %llvmshlibdir/profile_rt%shlibext %t2 1 2 ; RUX: llvm-prof -print-all-code %t1 | FileCheck --check-prefix=PROF %s ; Test the loaded profile also with verifier. Modified: llvm/trunk/test/BugPoint/crash-narrowfunctiontest.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/BugPoint/crash-narrowfunctiontest.ll?rev=120282&r1=120281&r2=120282&view=diff ============================================================================== --- llvm/trunk/test/BugPoint/crash-narrowfunctiontest.ll (original) +++ llvm/trunk/test/BugPoint/crash-narrowfunctiontest.ll Mon Nov 29 01:58:32 2010 @@ -1,8 +1,7 @@ ; Test that bugpoint can narrow down the testcase to the important function -; FIXME: This likely fails on windows ; -; RUN: bugpoint -load %llvmlibsdir/BugpointPasses%shlibext %s -output-prefix %t -bugpoint-crashcalls -silence-passes > /dev/null -; XFAIL: mingw +; RUN: bugpoint -load %llvmshlibdir/BugpointPasses%shlibext %s -output-prefix %t -bugpoint-crashcalls -silence-passes > /dev/null +; REQUIRES: loadable_module define i32 @foo() { ret i32 1 } Modified: llvm/trunk/test/BugPoint/metadata.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/BugPoint/metadata.ll?rev=120282&r1=120281&r2=120282&view=diff ============================================================================== --- llvm/trunk/test/BugPoint/metadata.ll (original) +++ llvm/trunk/test/BugPoint/metadata.ll Mon Nov 29 01:58:32 2010 @@ -1,6 +1,6 @@ -; RUN: bugpoint -load %llvmlibsdir/BugpointPasses%shlibext %s -output-prefix %t -bugpoint-crashcalls -silence-passes > /dev/null +; RUN: bugpoint -load %llvmshlibdir/BugpointPasses%shlibext %s -output-prefix %t -bugpoint-crashcalls -silence-passes > /dev/null ; RUN: llvm-dis %t-reduced-simplified.bc -o - | FileCheck %s -; XFAIL: mingw +; REQUIRES: loadable_module ; Bugpoint should keep the call's metadata attached to the call. Modified: llvm/trunk/test/BugPoint/remove_arguments_test.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/BugPoint/remove_arguments_test.ll?rev=120282&r1=120281&r2=120282&view=diff ============================================================================== --- llvm/trunk/test/BugPoint/remove_arguments_test.ll (original) +++ llvm/trunk/test/BugPoint/remove_arguments_test.ll Mon Nov 29 01:58:32 2010 @@ -1,7 +1,6 @@ -; FIXME: This likely fails on windows -; RUN: bugpoint -load %llvmlibsdir/BugpointPasses%shlibext %s -output-prefix %t -bugpoint-crashcalls -silence-passes +; RUN: bugpoint -load %llvmshlibdir/BugpointPasses%shlibext %s -output-prefix %t -bugpoint-crashcalls -silence-passes ; RUN: llvm-dis %t-reduced-simplified.bc -o - | FileCheck %s -; XFAIL: mingw +; REQUIRES: loadable_module ; Test to make sure that arguments are removed from the function if they are ; unnecessary. And clean up any types that that frees up too. Modified: llvm/trunk/test/Feature/load_module.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Feature/load_module.ll?rev=120282&r1=120281&r2=120282&view=diff ============================================================================== --- llvm/trunk/test/Feature/load_module.ll (original) +++ llvm/trunk/test/Feature/load_module.ll Mon Nov 29 01:58:32 2010 @@ -1,6 +1,8 @@ ; PR1318 -; RUN: opt < %s -load=%llvmlibsdir/LLVMHello%shlibext -hello \ +; RUN: opt < %s -load=%llvmshlibdir/LLVMHello%shlibext -hello \ ; RUN: -disable-output |& grep Hello +; REQUIRES: loadable_module +; FIXME: On Cygming, it might fail without building LLVMHello manually. @junk = global i32 0 From geek4civic at gmail.com Mon Nov 29 02:03:06 2010 From: geek4civic at gmail.com (NAKAMURA Takumi) Date: Mon, 29 Nov 2010 17:03:06 +0900 Subject: [llvm-commits] [Review request] test: Add the new feature "loadable_module" In-Reply-To: References: Message-ID: Hello Daniel, I committed patches below as r120273 to r120276, and r120282, thank you. * 0001-test-Add-the-new-feature-loadable_module.patch * 0002-test-Use-SharedLibDir-for-loadable-modules.-On-Cygmi.patch * 0004-tools-Makefile-Enable-building-lto-edis-and-bugpoint.patch * 0005-test-Check-the-feature-loadable_module-with-load-mod.patch * 0006-tools-Makefile-Fix-indentation.patch I expect they would reduce a failure on xp-msvc9. Indeed, "LLVMHello" might be so hacked. A patche is pending. * 0003-Makefile-Change-the-order-of-building-lib-Transforms.patch I have tried to tweak test/Feature/load_module.ll to use BugpointPasses instead of LLVMHello, and then I knew it might be redundant; test/Feature/load_module.ll examines functionality of loading module, grabbing option, and executing pass. On ToT, they are done by test/BugPoint/. When test/BugPoint(s) pass, Feature/load_module must pass. My suggestion: May I remove test/Feature/load_module.ll ? Then, we could move lib/Transforms/Hello to examples :) ...Takumi From baldrick at free.fr Mon Nov 29 02:20:55 2010 From: baldrick at free.fr (Duncan Sands) Date: Mon, 29 Nov 2010 09:20:55 +0100 Subject: [llvm-commits] [llvm] r120253 - /llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp In-Reply-To: <20101128180053.C495E2A6C12C@llvm.org> References: <20101128180053.C495E2A6C12C@llvm.org> Message-ID: <4CF36267.8010408@free.fr> > When emitting a single function with cppgen=function, you don't want to emit > initializers of global variables used in the function. > Also make sure to emit the operands of a constant. Testcase? Ciao, Duncan. From baldrick at free.fr Mon Nov 29 02:44:40 2010 From: baldrick at free.fr (Duncan Sands) Date: Mon, 29 Nov 2010 09:44:40 +0100 Subject: [llvm-commits] [llvm] r120281 - /llvm/trunk/lib/Analysis/InstructionSimplify.cpp In-Reply-To: <20101129014113.A2B5B2A6C12D@llvm.org> References: <20101129014113.A2B5B2A6C12D@llvm.org> Message-ID: <4CF367F8.8020802@free.fr> Hi Chandler, > Add some dead stores to pacify my least favorite GCC warning: may be > uninitialized. The warning is terrible, has incorrect source locations, and has > a huge false positive rate such as *all* of these. > > If anyone has a better solution, please let me know. Alternatively, I'll > happily add -Wno-uninitialized to the -Werror build mode. Maybe I can even do > it *only* when building with GCC instead of Clang. thanks for fixing this. This issue with pattern matching resulting in "may be used uninitialized" warnings has come up before with recent versions of gcc, and indeed seems to be bogus. How about opening a gcc bug report about this? Ciao, Duncan. From geek4civic at gmail.com Mon Nov 29 02:58:11 2010 From: geek4civic at gmail.com (NAKAMURA Takumi) Date: Mon, 29 Nov 2010 08:58:11 -0000 Subject: [llvm-commits] [llvm] r120283 - /llvm/trunk/tools/Makefile Message-ID: <20101129085811.5F7E02A6C12F@llvm.org> Author: chapuni Date: Mon Nov 29 02:58:11 2010 New Revision: 120283 URL: http://llvm.org/viewvc/llvm-project?rev=120283&view=rev Log: tools/Makefile: Don't look into $(TARGET_OS), but $(HOST_OS), to inspect availability of loadable module! The last commit made run.build.step.test_llvm_1 to fail. Modified: llvm/trunk/tools/Makefile Modified: llvm/trunk/tools/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/Makefile?rev=120283&r1=120282&r2=120283&view=diff ============================================================================== --- llvm/trunk/tools/Makefile (original) +++ llvm/trunk/tools/Makefile Mon Nov 29 02:58:11 2010 @@ -60,7 +60,7 @@ # On Win32, loadable modules can be built with ENABLE_SHARED. ifneq ($(ENABLE_SHARED),1) - ifneq (,$(filter $(TARGET_OS), Cygwin MingW)) + ifneq (,$(filter $(HOST_OS), Cygwin MingW)) PARALLEL_DIRS := $(filter-out bugpoint-passes, \ $(PARALLEL_DIRS)) endif From kalle.raiskila at nokia.com Mon Nov 29 03:36:26 2010 From: kalle.raiskila at nokia.com (Kalle Raiskila) Date: Mon, 29 Nov 2010 09:36:26 -0000 Subject: [llvm-commits] [llvm] r120284 - /llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp Message-ID: <20101129093626.5D4BF2A6C12D@llvm.org> Author: kraiskil Date: Mon Nov 29 03:36:26 2010 New Revision: 120284 URL: http://llvm.org/viewvc/llvm-project?rev=120284&view=rev Log: Add missing i128 case. Modified: llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp Modified: llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp?rev=120284&r1=120283&r2=120284&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp (original) +++ llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp Mon Nov 29 03:36:26 2010 @@ -596,6 +596,9 @@ case MVT::i64: return CurDAG->getTargetConstant(SPU::R64CRegClass.getID(), MVT::i32); break; + case MVT::i128: + return CurDAG->getTargetConstant(SPU::GPRCRegClass.getID(), MVT::i32); + break; case MVT::v16i8: case MVT::v8i16: case MVT::v4i32: From kalle.raiskila at nokia.com Mon Nov 29 04:08:09 2010 From: kalle.raiskila at nokia.com (Kalle Raiskila) Date: Mon, 29 Nov 2010 10:08:09 -0000 Subject: [llvm-commits] [llvm] r120285 - in /llvm/trunk/lib/Target/CellSPU: SPUISelLowering.h SPUInstrInfo.td Message-ID: <20101129100809.7D2D92A6C12D@llvm.org> Author: kraiskil Date: Mon Nov 29 04:08:09 2010 New Revision: 120285 URL: http://llvm.org/viewvc/llvm-project?rev=120285&view=rev Log: Allow machine LICM to do its job on SPU. -return a sensible value for register pressure -add pattern to 'ila' instrucion Modified: llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td Modified: llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h?rev=120285&r1=120284&r2=120285&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h (original) +++ llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h Mon Nov 29 04:08:09 2010 @@ -181,6 +181,14 @@ virtual bool isLegalAddressingMode(const AddrMode &AM, const Type *Ty) const; + + /// After allocating this many registers, the allocator should feel + /// register pressure. The value is a somewhat random guess, based on the + /// number of non callee saved registers in the C calling convention. + virtual unsigned getRegPressureLimit( const TargetRegisterClass *RC, + MachineFunction &MF) const{ + return 50; + } }; } Modified: llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td?rev=120285&r1=120284&r2=120285&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td (original) +++ llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td Mon Nov 29 04:08:09 2010 @@ -416,7 +416,7 @@ def lo: ILARegInst; def lsa: ILAInst<(outs R32C:$rT), (ins symbolLSA:$val), - [/* no pattern */]>; + [(set R32C:$rT, imm18:$val)]>; } defm ILA : ImmLoadAddress; From kalle.raiskila at nokia.com Mon Nov 29 04:30:26 2010 From: kalle.raiskila at nokia.com (Kalle Raiskila) Date: Mon, 29 Nov 2010 10:30:26 -0000 Subject: [llvm-commits] [llvm] r120286 - in /llvm/trunk: lib/Target/CellSPU/SPUSubtarget.cpp lib/Target/CellSPU/SPUSubtarget.h test/CodeGen/CellSPU/sext128.ll test/CodeGen/CellSPU/shuffles.ll Message-ID: <20101129103026.172DA2A6C12D@llvm.org> Author: kraiskil Date: Mon Nov 29 04:30:25 2010 New Revision: 120286 URL: http://llvm.org/viewvc/llvm-project?rev=120286&view=rev Log: Enable PostRA scheduling for SPU. This speeds up selected test cases with up to 5% - no slowdowns observed. Modified: llvm/trunk/lib/Target/CellSPU/SPUSubtarget.cpp llvm/trunk/lib/Target/CellSPU/SPUSubtarget.h llvm/trunk/test/CodeGen/CellSPU/sext128.ll llvm/trunk/test/CodeGen/CellSPU/shuffles.ll Modified: llvm/trunk/lib/Target/CellSPU/SPUSubtarget.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUSubtarget.cpp?rev=120286&r1=120285&r2=120286&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUSubtarget.cpp (original) +++ llvm/trunk/lib/Target/CellSPU/SPUSubtarget.cpp Mon Nov 29 04:30:25 2010 @@ -14,6 +14,8 @@ #include "SPUSubtarget.h" #include "SPU.h" #include "SPUGenSubtarget.inc" +#include "llvm/ADT/SmallVector.h" +#include "SPURegisterInfo.h" using namespace llvm; @@ -34,3 +36,22 @@ /// producing code for the JIT. void SPUSubtarget::SetJITMode() { } + +/// Enable PostRA scheduling for optimization levels -O2 and -O3. +bool SPUSubtarget::enablePostRAScheduler( + CodeGenOpt::Level OptLevel, + TargetSubtarget::AntiDepBreakMode& Mode, + RegClassVector& CriticalPathRCs) const { + Mode = TargetSubtarget::ANTIDEP_CRITICAL; + // CriticalPathsRCs seems to be the set of + // RegisterClasses that antidep breakings are performed for. + // Do it for all register classes + CriticalPathRCs.clear(); + CriticalPathRCs.push_back(&SPU::R8CRegClass); + CriticalPathRCs.push_back(&SPU::R16CRegClass); + CriticalPathRCs.push_back(&SPU::R32CRegClass); + CriticalPathRCs.push_back(&SPU::R32FPRegClass); + CriticalPathRCs.push_back(&SPU::R64CRegClass); + CriticalPathRCs.push_back(&SPU::VECREGRegClass); + return OptLevel >= CodeGenOpt::Default; +} Modified: llvm/trunk/lib/Target/CellSPU/SPUSubtarget.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUSubtarget.h?rev=120286&r1=120285&r2=120286&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUSubtarget.h (original) +++ llvm/trunk/lib/Target/CellSPU/SPUSubtarget.h Mon Nov 29 04:30:25 2010 @@ -84,6 +84,10 @@ "-i16:16:128-i8:8:128-i1:8:128-a:0:128-v64:64:128-v128:128:128" "-s:128:128-n32:64"; } + + bool enablePostRAScheduler(CodeGenOpt::Level OptLevel, + TargetSubtarget::AntiDepBreakMode& Mode, + RegClassVector& CriticalPathRCs) const; }; } // End llvm namespace Modified: llvm/trunk/test/CodeGen/CellSPU/sext128.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/sext128.ll?rev=120286&r1=120285&r2=120286&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/sext128.ll (original) +++ llvm/trunk/test/CodeGen/CellSPU/sext128.ll Mon Nov 29 04:30:25 2010 @@ -13,8 +13,8 @@ ; CHECK: long 66051 ; CHECK: long 67438087 ; CHECK-NOT: rotqmbyi -; CHECK: rotmai ; CHECK: lqa +; CHECK: rotmai ; CHECK: shufb } @@ -27,8 +27,8 @@ ; CHECK: long 269488144 ; CHECK: long 66051 ; CHECK-NOT: rotqmbyi -; CHECK: rotmai ; CHECK: lqa +; CHECK: rotmai ; CHECK: shufb } @@ -42,8 +42,8 @@ ; CHECK: long 269488144 ; CHECK: long 66051 ; CHECK-NOT: rotqmbyi -; CHECK: rotmai ; CHECK: lqa +; CHECK: rotmai ; CHECK: shufb } Modified: llvm/trunk/test/CodeGen/CellSPU/shuffles.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/shuffles.ll?rev=120286&r1=120285&r2=120286&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/shuffles.ll (original) +++ llvm/trunk/test/CodeGen/CellSPU/shuffles.ll Mon Nov 29 04:30:25 2010 @@ -1,4 +1,4 @@ -; RUN: llc --march=cellspu < %s | FileCheck %s +; RUN: llc -O1 --march=cellspu < %s | FileCheck %s define <4 x float> @shuffle(<4 x float> %param1, <4 x float> %param2) { ; CHECK: cwd {{\$.}}, 0($sp) From jay.foad at gmail.com Mon Nov 29 04:51:03 2010 From: jay.foad at gmail.com (Jay Foad) Date: Mon, 29 Nov 2010 10:51:03 +0000 Subject: [llvm-commits] [PATCH] Bug 5207: make APInt set(), clear() and flip() return void Message-ID: http://llvm.org/bugs/show_bug.cgi?id=5207 The bug says, among other things, that APInt methods "that update in place should return void to make it really clear that they do not return a new APInt". The attached patch does this for the methods set(), clear() and flip(). It passes "make check". I don't think any changes are needed in cfe/trunk/ or llvm-gcc-4.2/trunk/. This does make some code more long-winded, e.g.: static APInt getMaxValue(unsigned numBits) { - return APInt(numBits, 0).set(); + APInt API(numBits, 0); + API.set(); + return API; } Do you still think it's a good idea? If so, OK to commit? Thanks, Jay. -------------- next part -------------- A non-text attachment was scrubbed... Name: setclearflip.diff Type: text/x-patch Size: 6128 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20101129/dac9005a/attachment.bin From rafael.espindola at gmail.com Mon Nov 29 06:09:22 2010 From: rafael.espindola at gmail.com (=?UTF-8?Q?Rafael_Esp=C3=ADndola?=) Date: Mon, 29 Nov 2010 07:09:22 -0500 Subject: [llvm-commits] [llvm] r120225 - in /llvm/trunk: lib/Target/X86/X86ISelLowering.cpp lib/Target/X86/X86ISelLowering.h lib/Target/X86/X86InstrCompiler.td test/CodeGen/X86/2009-04-24.ll test/CodeGen/X86/2009-12-11-TLSNoRedZone.ll test/CodeGen/X86/tls Message-ID: On 29 November 2010 00:46, Eric Christopher wrote: > > On Nov 27, 2010, at 12:43 PM, Rafael Espindola wrote: > >> ? ? MachineBasicBlock *EmitLoweredTLSCall(MachineInstr *MI, >> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? MachineBasicBlock *BB) const; >> >> + ? ?MachineBasicBlock *emitLoweredTLSAddr(MachineInstr *MI, >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?MachineBasicBlock *BB) const; > > BTW: I think what Anton was talking about was the upper to lower case > difference between these two functions not matching. > > Since we don't have a final dictate for the time being can you make > various bits of code match the same file? :) Sure. This particular one got fixed by moving the lowering to the MC level. > -eric > Cheers, Rafael From foldr at codedgers.com Mon Nov 29 08:20:46 2010 From: foldr at codedgers.com (Mikhail Glushenkov) Date: Mon, 29 Nov 2010 15:20:46 +0100 Subject: [llvm-commits] [llvm] r120230 - in /llvm/trunk/tools/llvmc/src: Base.td.in Hooks.cpp In-Reply-To: <7F6191DA-FE25-49B8-AEBD-13A01BF24C1C@apple.com> References: <20101128003113.591B62A6C12C@llvm.org> <7F6191DA-FE25-49B8-AEBD-13A01BF24C1C@apple.com> Message-ID: <20101129142046.GA2741@localhost.localdomain> Hi Eric, On Sun, Nov 28, 2010 at 09:41:47PM -0800, Eric Christopher wrote: > > [...] > > I'm not particularly happy with this direction at the moment. Ideally I > think that if we want to support the full set of gcc command line options > (in particular the abomination that is the arm version) we'll need to > explicitly factor the backends to support them instead of trying to translate > each march option (which is, tbh, what we really support at the moment) > into a set of mattr flags. We would then need, at least a: > > a) target processor compiled for > b) target cpu family compiled for (arm only afaik) > c) target processor tuned for > > in order to support -march, -mcpu, and -mtune (in that order). How difficult of an undertaking would that be for someone who never worked on a LLVM backend? I'm not very fond of the current solution, but backend hacking is an uncharted territory for me. > In particular the implementation that you have here won't work for any > other processor that I know of at the moment. Yes, it is incomplete. -- () ascii ribbon campaign - against html e-mail /\ www.asciiribbon.org - against proprietary attachments From kalle.raiskila at nokia.com Mon Nov 29 08:44:28 2010 From: kalle.raiskila at nokia.com (Kalle Raiskila) Date: Mon, 29 Nov 2010 14:44:28 -0000 Subject: [llvm-commits] [llvm] r120288 - in /llvm/trunk: lib/Target/CellSPU/SPUInstrInfo.td test/CodeGen/CellSPU/shift_ops.ll Message-ID: <20101129144428.B885C2A6C12D@llvm.org> Author: kraiskil Date: Mon Nov 29 08:44:28 2010 New Revision: 120288 URL: http://llvm.org/viewvc/llvm-project?rev=120288&view=rev Log: Handle lshr for i128 correctly on SPU also when shiftamount > 7. Modified: llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td llvm/trunk/test/CodeGen/CellSPU/shift_ops.ll Modified: llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td?rev=120288&r1=120287&r2=120288&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td (original) +++ llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td Mon Nov 29 08:44:28 2010 @@ -2727,6 +2727,8 @@ def v8i16: ROTQMBYBIVecInst; def v4i32: ROTQMBYBIVecInst; def v2i64: ROTQMBYBIVecInst; + def r128: ROTQMBYBIInst<(outs GPRC:$rT), (ins GPRC:$rA, R32C:$rB), + [/*no pattern*/]>; } defm ROTQMBYBI: RotateMaskQuadByBitCount; @@ -2762,8 +2764,9 @@ defm ROTQMBI: RotateMaskQuadByBits; def : Pat<(srl GPRC:$rA, R32C:$rB), - (ROTQMBIr128 GPRC:$rA, - (SFIr32 R32C:$rB, 0))>; + (ROTQMBYBIr128 (ROTQMBIr128 GPRC:$rA, + (SFIr32 R32C:$rB, 0)), + (SFIr32 R32C:$rB, 0))>; //-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ Modified: llvm/trunk/test/CodeGen/CellSPU/shift_ops.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/shift_ops.ll?rev=120288&r1=120287&r2=120288&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/shift_ops.ll (original) +++ llvm/trunk/test/CodeGen/CellSPU/shift_ops.ll Mon Nov 29 08:44:28 2010 @@ -10,11 +10,12 @@ ; RUN: grep {rotqmbyi } %t1.s | count 1 ; RUN: grep {rotqmbii } %t1.s | count 2 ; RUN: grep {rotqmby } %t1.s | count 1 -; RUN: grep {rotqmbi } %t1.s | count 1 +; RUN: grep {rotqmbi } %t1.s | count 2 ; RUN: grep {rotqbyi } %t1.s | count 1 ; RUN: grep {rotqbii } %t1.s | count 2 ; RUN: grep {rotqbybi } %t1.s | count 1 -; RUN: grep {sfi } %t1.s | count 3 +; RUN: grep {sfi } %t1.s | count 4 +; RUN: cat %t1.s | FileCheck %s target datalayout = "E-p:32:32:128-f64:64:128-f32:32:128-i64:32:128-i32:32:128-i16:16:128-i8:8:128-i1:8:128-a0:0:128-v128:128:128-s0:128:128" target triple = "spu" @@ -281,3 +282,14 @@ %2 = trunc i64 %1 to i32 ret i32 %2 } + +; some random tests +define i128 @test_lshr_i128( i128 %val ) { + ;CHECK: test_lshr_i128 + ;CHECK: sfi + ;CHECK: rotqmbi + ;CHECK: rotqmbybi + ;CHECK: bi $lr + %rv = lshr i128 %val, 64 + ret i128 %rv +} From Micah.Villmow at amd.com Mon Nov 29 10:27:11 2010 From: Micah.Villmow at amd.com (Villmow, Micah) Date: Mon, 29 Nov 2010 10:27:11 -0600 Subject: [llvm-commits] Patch for Bug7696 In-Reply-To: References: Message-ID: Ping. Anyone? From: llvm-commits-bounces at cs.uiuc.edu [mailto:llvm-commits-bounces at cs.uiuc.edu] On Behalf Of Villmow, Micah Sent: Tuesday, November 23, 2010 1:39 PM To: llvm-commits Subject: [llvm-commits] Patch for Bug7696 Reposting bug report here, any chance that it can get reviewed? Patch that adds a boolean where a backend can specify whether to disable certain optimizations because jumps are expensive. The selection dag builder has an 'optimization' added into the visitBr function which makes assumptions that are not valid on all architectures. The problem is this. The following function kernel void cf_test(global int* a, int b, int c, int e) { int d = 0; if (!b && c < e) { d = a + b; } *a = d; } Is transformed into something equivalent to this: Kernel void cf_test(global int* a, int b, int c, int e) { Int d; If (b) { d = 0; } else { if (c < e) { d = a + b; } else { d = 0; } } *a = d; } by the visitBr code found in SelectionDAGBuilder::visitBr():1188. However, if jumps are expensive or jumps are not supported and high level flow control needs to be reconstructed. This is extremely inefficient. For example on AMD GPU's, a single flow control instruction can take 40 cycles to execute, but an bit instruction, can be executed every cycle. So obviously the assumptions made by this block of code are inefficient on AMD hardware. Increasing control flow has a direct impact on performance and removing the extra 'and' or 'or' in order to short circuit the conditional evaluation does not work for our target. So in order to make this type of instruction rely more on target specific information. I've added a new Boolean to the TargetLoweringInfo class called JumpIsExpensive along with accessor functions. Please review the patch and apply if acceptable. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20101129/159758b1/attachment.html From ofv at wanadoo.es Mon Nov 29 11:01:52 2010 From: ofv at wanadoo.es (=?utf-8?Q?=C3=93scar?= Fuentes) Date: Mon, 29 Nov 2010 18:01:52 +0100 Subject: [llvm-commits] [PATCH] CMake/tests: adding dependencies to "check" "check-all" (and "clang-test") In-Reply-To: (NAKAMURA Takumi's message of "Mon, 29 Nov 2010 11:58:53 +0900") References: Message-ID: <87sjykrrlr.fsf@telefonica.net> Hello Takumi. NAKAMURA Takumi writes: > I committed "check-all" in clang r120280. > > As the next patch, I propose to add dependencies to "check" > "check-all" and "clang-test". > > I think it would be a good idea "check" and "check-all" could have > *right* dependencies on CMake, > though, they do not have any dependencies on autoconf make. Although the idea sounds like the Right Thing, in practice it slows down "make check" because it must ensure that all required dependencies are satisfied before running the tests. On some platforms (Windows/Visual Studio) that's a lot of time and even on fast Linux machines can be annoying. As I don't use "make check" too often, I'll left the final word to those who actually care. [snip] From bigcheesegs at gmail.com Mon Nov 29 12:03:12 2010 From: bigcheesegs at gmail.com (Michael Spencer) Date: Mon, 29 Nov 2010 13:03:12 -0500 Subject: [llvm-commits] [PATCH] Merge System into Support Message-ID: I ran into circular dependencies with the ADT parts of Support while implementing sys::path. Chris said to just merge System and Support, so here it is. Attached are patches for both LLVM and clang. This does not remove the namespace, it only moves the files, updates includes, and fixes the build system. I'm not sure that I correctly fixed GNU Build, however, it does work on Linux. This is going to be a major change for almost every project that uses LLVM. Should we keep headers in System that forward to Support for a little bit? - Michael Spencer -------------- next part -------------- A non-text attachment was scrubbed... Name: merge-system-support-llvm.patch Type: application/octet-stream Size: 938807 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20101129/7dc768bc/attachment-0002.obj -------------- next part -------------- A non-text attachment was scrubbed... Name: merge-system-support-clang.patch Type: application/octet-stream Size: 23085 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20101129/7dc768bc/attachment-0003.obj From anton at korobeynikov.info Mon Nov 29 12:13:04 2010 From: anton at korobeynikov.info (Anton Korobeynikov) Date: Mon, 29 Nov 2010 21:13:04 +0300 Subject: [llvm-commits] [PATCH] Merge System into Support In-Reply-To: References: Message-ID: > This is going to be a major change for almost every project that uses > LLVM. Should we keep headers in System that forward to Support for a > little bit? This sounds like a sane idea at least for 2.9 -- With best regards, Anton Korobeynikov Faculty of Mathematics and Mechanics, Saint Petersburg State University From bigcheesegs at gmail.com Mon Nov 29 12:16:11 2010 From: bigcheesegs at gmail.com (Michael J. Spencer) Date: Mon, 29 Nov 2010 18:16:11 -0000 Subject: [llvm-commits] [llvm] r120298 - in /llvm/trunk: ./ autoconf/ cmake/ include/llvm-c/ include/llvm/ include/llvm/ADT/ include/llvm/Analysis/ include/llvm/Bitcode/ include/llvm/CodeGen/ include/llvm/CompilerDriver/ include/llvm/ExecutionEngine/ include/llvm/MC/ include/llvm/MC/MCParser/ include/llvm/Object/ include/llvm/Support/ include/llvm/System/ include/llvm/Target/ lib/Analysis/ lib/Archive/ lib/Bitcode/Writer/ lib/CodeGen/ lib/CodeGen/AsmPrinter/ lib/CodeGen/SelectionDAG/ lib/ExecutionEngine/ lib/ExecutionEngine/Int... Message-ID: <20101129181614.5ADCF2A6C12D@llvm.org> Author: mspencer Date: Mon Nov 29 12:16:10 2010 New Revision: 120298 URL: http://llvm.org/viewvc/llvm-project?rev=120298&view=rev Log: Merge System into Support. Added: llvm/trunk/include/llvm/Support/AIXDataTypesFix.h - copied, changed from r120288, llvm/trunk/include/llvm/System/AIXDataTypesFix.h llvm/trunk/include/llvm/Support/Alarm.h - copied, changed from r120288, llvm/trunk/include/llvm/System/Alarm.h llvm/trunk/include/llvm/Support/Atomic.h - copied, changed from r120288, llvm/trunk/include/llvm/System/Atomic.h llvm/trunk/include/llvm/Support/DataTypes.h.cmake - copied, changed from r120288, llvm/trunk/include/llvm/System/DataTypes.h.cmake llvm/trunk/include/llvm/Support/DataTypes.h.in - copied, changed from r120288, llvm/trunk/include/llvm/System/DataTypes.h.in llvm/trunk/include/llvm/Support/Disassembler.h - copied, changed from r120288, llvm/trunk/include/llvm/System/Disassembler.h llvm/trunk/include/llvm/Support/DynamicLibrary.h - copied, changed from r120288, llvm/trunk/include/llvm/System/DynamicLibrary.h llvm/trunk/include/llvm/Support/Errno.h - copied, changed from r120288, llvm/trunk/include/llvm/System/Errno.h llvm/trunk/include/llvm/Support/FEnv.h - copied, changed from r120288, llvm/trunk/include/llvm/System/FEnv.h llvm/trunk/include/llvm/Support/Host.h - copied, changed from r120288, llvm/trunk/include/llvm/System/Host.h llvm/trunk/include/llvm/Support/IncludeFile.h - copied, changed from r120288, llvm/trunk/include/llvm/System/IncludeFile.h llvm/trunk/include/llvm/Support/LICENSE.TXT - copied, changed from r120288, llvm/trunk/include/llvm/System/LICENSE.TXT llvm/trunk/include/llvm/Support/Memory.h - copied, changed from r120288, llvm/trunk/include/llvm/System/Memory.h llvm/trunk/include/llvm/Support/Mutex.h - copied, changed from r120288, llvm/trunk/include/llvm/System/Mutex.h llvm/trunk/include/llvm/Support/Path.h - copied, changed from r120288, llvm/trunk/include/llvm/System/Path.h llvm/trunk/include/llvm/Support/PathV2.h - copied, changed from r120288, llvm/trunk/include/llvm/System/PathV2.h llvm/trunk/include/llvm/Support/Process.h - copied, changed from r120288, llvm/trunk/include/llvm/System/Process.h llvm/trunk/include/llvm/Support/Program.h - copied, changed from r120288, llvm/trunk/include/llvm/System/Program.h llvm/trunk/include/llvm/Support/RWMutex.h - copied, changed from r120288, llvm/trunk/include/llvm/System/RWMutex.h llvm/trunk/include/llvm/Support/Signals.h - copied, changed from r120288, llvm/trunk/include/llvm/System/Signals.h llvm/trunk/include/llvm/Support/Solaris.h - copied, changed from r120288, llvm/trunk/include/llvm/System/Solaris.h llvm/trunk/include/llvm/Support/SwapByteOrder.h - copied, changed from r120288, llvm/trunk/include/llvm/System/SwapByteOrder.h llvm/trunk/include/llvm/Support/ThreadLocal.h - copied, changed from r120288, llvm/trunk/include/llvm/System/ThreadLocal.h llvm/trunk/include/llvm/Support/Threading.h - copied, changed from r120288, llvm/trunk/include/llvm/System/Threading.h llvm/trunk/include/llvm/Support/TimeValue.h - copied, changed from r120288, llvm/trunk/include/llvm/System/TimeValue.h llvm/trunk/include/llvm/Support/Valgrind.h - copied, changed from r120288, llvm/trunk/include/llvm/System/Valgrind.h llvm/trunk/include/llvm/Support/system_error.h - copied, changed from r120288, llvm/trunk/include/llvm/System/system_error.h llvm/trunk/lib/Support/Alarm.cpp - copied, changed from r120288, llvm/trunk/lib/System/Alarm.cpp llvm/trunk/lib/Support/Atomic.cpp - copied, changed from r120288, llvm/trunk/lib/System/Atomic.cpp llvm/trunk/lib/Support/Disassembler.cpp - copied, changed from r120288, llvm/trunk/lib/System/Disassembler.cpp llvm/trunk/lib/Support/DynamicLibrary.cpp - copied, changed from r120288, llvm/trunk/lib/System/DynamicLibrary.cpp llvm/trunk/lib/Support/Errno.cpp - copied, changed from r120288, llvm/trunk/lib/System/Errno.cpp llvm/trunk/lib/Support/Host.cpp - copied, changed from r120288, llvm/trunk/lib/System/Host.cpp llvm/trunk/lib/Support/IncludeFile.cpp - copied, changed from r120288, llvm/trunk/lib/System/IncludeFile.cpp llvm/trunk/lib/Support/Memory.cpp - copied, changed from r120288, llvm/trunk/lib/System/Memory.cpp llvm/trunk/lib/Support/Mutex.cpp - copied, changed from r120288, llvm/trunk/lib/System/Mutex.cpp llvm/trunk/lib/Support/Path.cpp - copied, changed from r120288, llvm/trunk/lib/System/Path.cpp llvm/trunk/lib/Support/Process.cpp - copied, changed from r120288, llvm/trunk/lib/System/Process.cpp llvm/trunk/lib/Support/Program.cpp - copied, changed from r120288, llvm/trunk/lib/System/Program.cpp llvm/trunk/lib/Support/README.txt.system - copied, changed from r120288, llvm/trunk/lib/System/README.txt llvm/trunk/lib/Support/RWMutex.cpp - copied, changed from r120288, llvm/trunk/lib/System/RWMutex.cpp llvm/trunk/lib/Support/SearchForAddressOfSpecialSymbol.cpp - copied, changed from r120288, llvm/trunk/lib/System/SearchForAddressOfSpecialSymbol.cpp llvm/trunk/lib/Support/Signals.cpp - copied, changed from r120288, llvm/trunk/lib/System/Signals.cpp llvm/trunk/lib/Support/ThreadLocal.cpp - copied, changed from r120288, llvm/trunk/lib/System/ThreadLocal.cpp llvm/trunk/lib/Support/Threading.cpp - copied, changed from r120288, llvm/trunk/lib/System/Threading.cpp llvm/trunk/lib/Support/TimeValue.cpp - copied, changed from r120288, llvm/trunk/lib/System/TimeValue.cpp llvm/trunk/lib/Support/Unix/ llvm/trunk/lib/Support/Unix/Alarm.inc - copied, changed from r120288, llvm/trunk/lib/System/Unix/Alarm.inc llvm/trunk/lib/Support/Unix/Host.inc - copied, changed from r120288, llvm/trunk/lib/System/Unix/Host.inc llvm/trunk/lib/Support/Unix/Memory.inc - copied, changed from r120288, llvm/trunk/lib/System/Unix/Memory.inc llvm/trunk/lib/Support/Unix/Mutex.inc - copied, changed from r120288, llvm/trunk/lib/System/Unix/Mutex.inc llvm/trunk/lib/Support/Unix/Path.inc - copied, changed from r120288, llvm/trunk/lib/System/Unix/Path.inc llvm/trunk/lib/Support/Unix/Process.inc - copied, changed from r120288, llvm/trunk/lib/System/Unix/Process.inc llvm/trunk/lib/Support/Unix/Program.inc - copied, changed from r120288, llvm/trunk/lib/System/Unix/Program.inc llvm/trunk/lib/Support/Unix/README.txt - copied, changed from r120288, llvm/trunk/lib/System/Unix/README.txt llvm/trunk/lib/Support/Unix/RWMutex.inc - copied, changed from r120288, llvm/trunk/lib/System/Unix/RWMutex.inc llvm/trunk/lib/Support/Unix/Signals.inc - copied, changed from r120288, llvm/trunk/lib/System/Unix/Signals.inc llvm/trunk/lib/Support/Unix/ThreadLocal.inc - copied, changed from r120288, llvm/trunk/lib/System/Unix/ThreadLocal.inc llvm/trunk/lib/Support/Unix/TimeValue.inc - copied, changed from r120288, llvm/trunk/lib/System/Unix/TimeValue.inc llvm/trunk/lib/Support/Unix/Unix.h - copied, changed from r120288, llvm/trunk/lib/System/Unix/Unix.h llvm/trunk/lib/Support/Unix/system_error.inc - copied, changed from r120288, llvm/trunk/lib/System/Unix/system_error.inc llvm/trunk/lib/Support/Valgrind.cpp - copied, changed from r120288, llvm/trunk/lib/System/Valgrind.cpp llvm/trunk/lib/Support/Windows/ llvm/trunk/lib/Support/Windows/Alarm.inc - copied, changed from r120288, llvm/trunk/lib/System/Win32/Alarm.inc llvm/trunk/lib/Support/Windows/DynamicLibrary.inc - copied, changed from r120288, llvm/trunk/lib/System/Win32/DynamicLibrary.inc llvm/trunk/lib/Support/Windows/Host.inc - copied, changed from r120288, llvm/trunk/lib/System/Win32/Host.inc llvm/trunk/lib/Support/Windows/Memory.inc - copied, changed from r120288, llvm/trunk/lib/System/Win32/Memory.inc llvm/trunk/lib/Support/Windows/Mutex.inc - copied, changed from r120288, llvm/trunk/lib/System/Win32/Mutex.inc llvm/trunk/lib/Support/Windows/Path.inc - copied, changed from r120288, llvm/trunk/lib/System/Win32/Path.inc llvm/trunk/lib/Support/Windows/Process.inc - copied, changed from r120288, llvm/trunk/lib/System/Win32/Process.inc llvm/trunk/lib/Support/Windows/Program.inc - copied, changed from r120288, llvm/trunk/lib/System/Win32/Program.inc llvm/trunk/lib/Support/Windows/RWMutex.inc - copied, changed from r120288, llvm/trunk/lib/System/Win32/RWMutex.inc llvm/trunk/lib/Support/Windows/Signals.inc - copied, changed from r120288, llvm/trunk/lib/System/Win32/Signals.inc llvm/trunk/lib/Support/Windows/ThreadLocal.inc - copied, changed from r120288, llvm/trunk/lib/System/Win32/ThreadLocal.inc llvm/trunk/lib/Support/Windows/TimeValue.inc - copied, changed from r120288, llvm/trunk/lib/System/Win32/TimeValue.inc llvm/trunk/lib/Support/Windows/Windows.h - copied, changed from r120288, llvm/trunk/lib/System/Win32/Win32.h llvm/trunk/lib/Support/Windows/system_error.inc - copied, changed from r120288, llvm/trunk/lib/System/Win32/system_error.inc llvm/trunk/lib/Support/system_error.cpp - copied, changed from r120288, llvm/trunk/lib/System/system_error.cpp Removed: llvm/trunk/include/llvm/System/AIXDataTypesFix.h llvm/trunk/include/llvm/System/Alarm.h llvm/trunk/include/llvm/System/Atomic.h llvm/trunk/include/llvm/System/DataTypes.h.cmake llvm/trunk/include/llvm/System/DataTypes.h.in llvm/trunk/include/llvm/System/Disassembler.h llvm/trunk/include/llvm/System/DynamicLibrary.h llvm/trunk/include/llvm/System/Errno.h llvm/trunk/include/llvm/System/FEnv.h llvm/trunk/include/llvm/System/Host.h llvm/trunk/include/llvm/System/IncludeFile.h llvm/trunk/include/llvm/System/LICENSE.TXT llvm/trunk/include/llvm/System/Memory.h llvm/trunk/include/llvm/System/Mutex.h llvm/trunk/include/llvm/System/Path.h llvm/trunk/include/llvm/System/PathV2.h llvm/trunk/include/llvm/System/Process.h llvm/trunk/include/llvm/System/Program.h llvm/trunk/include/llvm/System/RWMutex.h llvm/trunk/include/llvm/System/Signals.h llvm/trunk/include/llvm/System/Solaris.h llvm/trunk/include/llvm/System/SwapByteOrder.h llvm/trunk/include/llvm/System/ThreadLocal.h llvm/trunk/include/llvm/System/Threading.h llvm/trunk/include/llvm/System/TimeValue.h llvm/trunk/include/llvm/System/Valgrind.h llvm/trunk/include/llvm/System/system_error.h llvm/trunk/lib/System/Alarm.cpp llvm/trunk/lib/System/Atomic.cpp llvm/trunk/lib/System/CMakeLists.txt llvm/trunk/lib/System/Disassembler.cpp llvm/trunk/lib/System/DynamicLibrary.cpp llvm/trunk/lib/System/Errno.cpp llvm/trunk/lib/System/Host.cpp llvm/trunk/lib/System/IncludeFile.cpp llvm/trunk/lib/System/Makefile llvm/trunk/lib/System/Memory.cpp llvm/trunk/lib/System/Mutex.cpp llvm/trunk/lib/System/Path.cpp llvm/trunk/lib/System/Process.cpp llvm/trunk/lib/System/Program.cpp llvm/trunk/lib/System/README.txt llvm/trunk/lib/System/RWMutex.cpp llvm/trunk/lib/System/SearchForAddressOfSpecialSymbol.cpp llvm/trunk/lib/System/Signals.cpp llvm/trunk/lib/System/ThreadLocal.cpp llvm/trunk/lib/System/Threading.cpp llvm/trunk/lib/System/TimeValue.cpp llvm/trunk/lib/System/Unix/Alarm.inc llvm/trunk/lib/System/Unix/Host.inc llvm/trunk/lib/System/Unix/Memory.inc llvm/trunk/lib/System/Unix/Mutex.inc llvm/trunk/lib/System/Unix/Path.inc llvm/trunk/lib/System/Unix/Process.inc llvm/trunk/lib/System/Unix/Program.inc llvm/trunk/lib/System/Unix/README.txt llvm/trunk/lib/System/Unix/RWMutex.inc llvm/trunk/lib/System/Unix/Signals.inc llvm/trunk/lib/System/Unix/ThreadLocal.inc llvm/trunk/lib/System/Unix/TimeValue.inc llvm/trunk/lib/System/Unix/Unix.h llvm/trunk/lib/System/Unix/system_error.inc llvm/trunk/lib/System/Valgrind.cpp llvm/trunk/lib/System/Win32/Alarm.inc llvm/trunk/lib/System/Win32/DynamicLibrary.inc llvm/trunk/lib/System/Win32/Host.inc llvm/trunk/lib/System/Win32/Memory.inc llvm/trunk/lib/System/Win32/Mutex.inc llvm/trunk/lib/System/Win32/Path.inc llvm/trunk/lib/System/Win32/Process.inc llvm/trunk/lib/System/Win32/Program.inc llvm/trunk/lib/System/Win32/RWMutex.inc llvm/trunk/lib/System/Win32/Signals.inc llvm/trunk/lib/System/Win32/ThreadLocal.inc llvm/trunk/lib/System/Win32/TimeValue.inc llvm/trunk/lib/System/Win32/Win32.h llvm/trunk/lib/System/Win32/system_error.inc llvm/trunk/lib/System/system_error.cpp Modified: llvm/trunk/CMakeLists.txt llvm/trunk/Makefile llvm/trunk/Makefile.rules llvm/trunk/autoconf/configure.ac llvm/trunk/cmake/config-ix.cmake llvm/trunk/configure llvm/trunk/include/llvm-c/EnhancedDisassembly.h llvm/trunk/include/llvm/ADT/EquivalenceClasses.h llvm/trunk/include/llvm/ADT/FoldingSet.h llvm/trunk/include/llvm/ADT/ImmutableList.h llvm/trunk/include/llvm/ADT/ImmutableSet.h llvm/trunk/include/llvm/ADT/SmallPtrSet.h llvm/trunk/include/llvm/ADT/SparseBitVector.h llvm/trunk/include/llvm/ADT/Statistic.h llvm/trunk/include/llvm/ADT/StringExtras.h llvm/trunk/include/llvm/ADT/Twine.h llvm/trunk/include/llvm/ADT/ValueMap.h llvm/trunk/include/llvm/Analysis/CallGraph.h llvm/trunk/include/llvm/Analysis/DIBuilder.h llvm/trunk/include/llvm/Analysis/ScalarEvolution.h llvm/trunk/include/llvm/Analysis/ValueTracking.h llvm/trunk/include/llvm/BasicBlock.h llvm/trunk/include/llvm/Bitcode/Archive.h llvm/trunk/include/llvm/Bitcode/BitCodes.h llvm/trunk/include/llvm/CodeGen/AsmPrinter.h llvm/trunk/include/llvm/CodeGen/BinaryObject.h llvm/trunk/include/llvm/CodeGen/JITCodeEmitter.h llvm/trunk/include/llvm/CodeGen/MachORelocation.h llvm/trunk/include/llvm/CodeGen/MachineCodeEmitter.h llvm/trunk/include/llvm/CodeGen/MachineCodeInfo.h llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h llvm/trunk/include/llvm/CodeGen/MachineMemOperand.h llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h llvm/trunk/include/llvm/CodeGen/MachineOperand.h llvm/trunk/include/llvm/CodeGen/MachineRelocation.h llvm/trunk/include/llvm/CodeGen/PostRAHazardRecognizer.h llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h llvm/trunk/include/llvm/CodeGen/ValueTypes.h llvm/trunk/include/llvm/CompilerDriver/CompilationGraph.h llvm/trunk/include/llvm/CompilerDriver/Tool.h llvm/trunk/include/llvm/DerivedTypes.h llvm/trunk/include/llvm/ExecutionEngine/ExecutionEngine.h llvm/trunk/include/llvm/ExecutionEngine/GenericValue.h llvm/trunk/include/llvm/ExecutionEngine/JITEventListener.h llvm/trunk/include/llvm/ExecutionEngine/JITMemoryManager.h llvm/trunk/include/llvm/LinkAllVMCore.h llvm/trunk/include/llvm/MC/EDInstInfo.h llvm/trunk/include/llvm/MC/MCAssembler.h llvm/trunk/include/llvm/MC/MCDisassembler.h llvm/trunk/include/llvm/MC/MCExpr.h llvm/trunk/include/llvm/MC/MCFixup.h llvm/trunk/include/llvm/MC/MCInst.h llvm/trunk/include/llvm/MC/MCObjectWriter.h llvm/trunk/include/llvm/MC/MCParser/AsmLexer.h llvm/trunk/include/llvm/MC/MCParser/MCAsmLexer.h llvm/trunk/include/llvm/MC/MCParser/MCAsmParser.h llvm/trunk/include/llvm/MC/MCStreamer.h llvm/trunk/include/llvm/MC/MCValue.h llvm/trunk/include/llvm/Module.h llvm/trunk/include/llvm/Object/MachOFormat.h llvm/trunk/include/llvm/Object/ObjectFile.h llvm/trunk/include/llvm/PassSupport.h llvm/trunk/include/llvm/Support/Allocator.h llvm/trunk/include/llvm/Support/COFF.h llvm/trunk/include/llvm/Support/ConstantRange.h llvm/trunk/include/llvm/Support/ELF.h llvm/trunk/include/llvm/Support/Endian.h llvm/trunk/include/llvm/Support/FileUtilities.h llvm/trunk/include/llvm/Support/GraphWriter.h llvm/trunk/include/llvm/Support/MachO.h llvm/trunk/include/llvm/Support/ManagedStatic.h llvm/trunk/include/llvm/Support/MathExtras.h llvm/trunk/include/llvm/Support/MemoryBuffer.h llvm/trunk/include/llvm/Support/MemoryObject.h llvm/trunk/include/llvm/Support/MutexGuard.h llvm/trunk/include/llvm/Support/PointerLikeTypeTraits.h llvm/trunk/include/llvm/Support/Timer.h llvm/trunk/include/llvm/Support/raw_ostream.h llvm/trunk/include/llvm/Target/SubtargetFeature.h llvm/trunk/include/llvm/Target/TargetAsmBackend.h llvm/trunk/include/llvm/Target/TargetData.h llvm/trunk/include/llvm/Target/TargetInstrDesc.h llvm/trunk/include/llvm/Target/TargetJITInfo.h llvm/trunk/include/llvm/TypeSymbolTable.h llvm/trunk/include/llvm/ValueSymbolTable.h llvm/trunk/lib/Analysis/ConstantFolding.cpp llvm/trunk/lib/Archive/Archive.cpp llvm/trunk/lib/Archive/ArchiveInternals.h llvm/trunk/lib/Archive/ArchiveWriter.cpp llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp llvm/trunk/lib/CodeGen/ELF.h llvm/trunk/lib/CodeGen/PseudoSourceValue.cpp llvm/trunk/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp llvm/trunk/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.h llvm/trunk/lib/ExecutionEngine/JIT/Intercept.cpp llvm/trunk/lib/ExecutionEngine/JIT/JIT.cpp llvm/trunk/lib/ExecutionEngine/JIT/JITDebugRegisterer.cpp llvm/trunk/lib/ExecutionEngine/JIT/JITDebugRegisterer.h llvm/trunk/lib/ExecutionEngine/JIT/JITEmitter.cpp llvm/trunk/lib/ExecutionEngine/JIT/JITMemoryManager.cpp llvm/trunk/lib/ExecutionEngine/JIT/OProfileJITEventListener.cpp llvm/trunk/lib/ExecutionEngine/JIT/TargetSelect.cpp llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp llvm/trunk/lib/ExecutionEngine/MCJIT/TargetSelect.cpp llvm/trunk/lib/Linker/LinkItems.cpp llvm/trunk/lib/Linker/LinkModules.cpp llvm/trunk/lib/Linker/Linker.cpp llvm/trunk/lib/MC/MCAsmInfo.cpp llvm/trunk/lib/MC/MCDisassembler/EDDisassembler.h llvm/trunk/lib/MC/MCDisassembler/EDInst.h llvm/trunk/lib/MC/MCDisassembler/EDOperand.h llvm/trunk/lib/MC/MCDisassembler/EDToken.h llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp llvm/trunk/lib/Object/MachOObject.cpp llvm/trunk/lib/Object/ObjectFile.cpp llvm/trunk/lib/Support/Allocator.cpp llvm/trunk/lib/Support/CMakeLists.txt llvm/trunk/lib/Support/CommandLine.cpp llvm/trunk/lib/Support/CrashRecoveryContext.cpp llvm/trunk/lib/Support/Debug.cpp llvm/trunk/lib/Support/ErrorHandling.cpp llvm/trunk/lib/Support/FileUtilities.cpp llvm/trunk/lib/Support/FoldingSet.cpp llvm/trunk/lib/Support/GraphWriter.cpp llvm/trunk/lib/Support/Makefile llvm/trunk/lib/Support/ManagedStatic.cpp llvm/trunk/lib/Support/MemoryBuffer.cpp llvm/trunk/lib/Support/PluginLoader.cpp llvm/trunk/lib/Support/PrettyStackTrace.cpp llvm/trunk/lib/Support/Statistic.cpp llvm/trunk/lib/Support/SystemUtils.cpp llvm/trunk/lib/Support/TargetRegistry.cpp llvm/trunk/lib/Support/Timer.cpp llvm/trunk/lib/Support/ToolOutputFile.cpp llvm/trunk/lib/Support/raw_ostream.cpp llvm/trunk/lib/Target/TargetData.cpp llvm/trunk/lib/Target/X86/Disassembler/X86DisassemblerDecoderCommon.h llvm/trunk/lib/Target/X86/X86JITInfo.cpp llvm/trunk/lib/Target/X86/X86Subtarget.cpp llvm/trunk/lib/VMCore/Attributes.cpp llvm/trunk/lib/VMCore/Function.cpp llvm/trunk/lib/VMCore/LeakDetector.cpp llvm/trunk/lib/VMCore/PassManager.cpp llvm/trunk/lib/VMCore/PassRegistry.cpp llvm/trunk/lib/VMCore/Type.cpp llvm/trunk/tools/bugpoint/BugDriver.cpp llvm/trunk/tools/bugpoint/ExtractFunction.cpp llvm/trunk/tools/bugpoint/OptimizerDriver.cpp llvm/trunk/tools/bugpoint/ToolRunner.cpp llvm/trunk/tools/bugpoint/ToolRunner.h llvm/trunk/tools/bugpoint/bugpoint.cpp llvm/trunk/tools/llc/llc.cpp llvm/trunk/tools/lli/lli.cpp llvm/trunk/tools/llvm-ar/llvm-ar.cpp llvm/trunk/tools/llvm-as/llvm-as.cpp llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp llvm/trunk/tools/llvm-dis/llvm-dis.cpp llvm/trunk/tools/llvm-extract/llvm-extract.cpp llvm/trunk/tools/llvm-ld/Optimize.cpp llvm/trunk/tools/llvm-ld/llvm-ld.cpp llvm/trunk/tools/llvm-link/llvm-link.cpp llvm/trunk/tools/llvm-mc/llvm-mc.cpp llvm/trunk/tools/llvm-nm/llvm-nm.cpp llvm/trunk/tools/llvm-prof/llvm-prof.cpp llvm/trunk/tools/llvm-ranlib/llvm-ranlib.cpp llvm/trunk/tools/opt/opt.cpp llvm/trunk/unittests/ADT/StringMapTest.cpp llvm/trunk/unittests/CMakeLists.txt llvm/trunk/unittests/Makefile llvm/trunk/unittests/Support/EndianTest.cpp llvm/trunk/unittests/Support/SwapByteOrderTest.cpp llvm/trunk/unittests/System/Makefile llvm/trunk/unittests/System/Path.cpp llvm/trunk/unittests/System/TimeValue.cpp llvm/trunk/utils/FileCheck/CMakeLists.txt llvm/trunk/utils/FileCheck/FileCheck.cpp llvm/trunk/utils/FileCheck/Makefile llvm/trunk/utils/FileUpdate/CMakeLists.txt llvm/trunk/utils/FileUpdate/Makefile llvm/trunk/utils/KillTheDoctor/CMakeLists.txt llvm/trunk/utils/KillTheDoctor/KillTheDoctor.cpp llvm/trunk/utils/TableGen/ARMDecoderEmitter.cpp llvm/trunk/utils/TableGen/CMakeLists.txt llvm/trunk/utils/TableGen/Makefile llvm/trunk/utils/TableGen/Record.cpp llvm/trunk/utils/TableGen/TableGen.cpp llvm/trunk/utils/fpcmp/Makefile llvm/trunk/utils/not/CMakeLists.txt llvm/trunk/utils/not/Makefile llvm/trunk/utils/not/not.cpp llvm/trunk/utils/unittest/UnitTestMain/TestMain.cpp Modified: llvm/trunk/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/CMakeLists.txt?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/CMakeLists.txt (original) +++ llvm/trunk/CMakeLists.txt Mon Nov 29 12:16:10 2010 @@ -276,7 +276,7 @@ include_directories( ${LLVM_BINARY_DIR}/include ${LLVM_MAIN_INCLUDE_DIR}) if( ${CMAKE_SYSTEM_NAME} MATCHES SunOS ) - SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-include llvm/System/Solaris.h") + SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-include llvm/Support/Solaris.h") endif( ${CMAKE_SYSTEM_NAME} MATCHES SunOS ) include(AddLLVM) @@ -292,9 +292,8 @@ endif() add_subdirectory(lib/Support) -add_subdirectory(lib/System) -# Everything else depends on Support and System: +# Everything else depends on Support: set(LLVM_COMMON_DEPENDS ${LLVM_COMMON_DEPENDS} ${LLVM_LIBS} ) set(LLVM_TABLEGEN "tblgen" CACHE @@ -346,7 +345,7 @@ set( td ${LLVM_MAIN_SRC_DIR}/lib/Target/${t} ) file(GLOB asmp_file "${td}/*AsmPrinter.cpp") if( asmp_file ) - set(LLVM_ENUM_ASM_PRINTERS + set(LLVM_ENUM_ASM_PRINTERS "${LLVM_ENUM_ASM_PRINTERS}LLVM_ASM_PRINTER(${t})\n") endif() if( EXISTS ${td}/InstPrinter/CMakeLists.txt ) @@ -354,7 +353,7 @@ endif() if( EXISTS ${td}/AsmParser/CMakeLists.txt ) add_subdirectory(lib/Target/${t}/AsmParser) - set(LLVM_ENUM_ASM_PARSERS + set(LLVM_ENUM_ASM_PARSERS "${LLVM_ENUM_ASM_PARSERS}LLVM_ASM_PARSER(${t})\n") endif() if( EXISTS ${td}/Disassembler/CMakeLists.txt ) Modified: llvm/trunk/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/Makefile (original) +++ llvm/trunk/Makefile Mon Nov 29 12:16:10 2010 @@ -10,7 +10,7 @@ LEVEL := . # Top-Level LLVM Build Stages: -# 1. Build lib/System and lib/Support, which are used by utils (tblgen). +# 1. Build lib/Support, which is used by utils (tblgen). # 2. Build utils, which is used by VMCore. # 3. Build VMCore, which builds the Intrinsics.inc file used by libs. # 4. Build libs, which are needed by llvm-config. @@ -27,10 +27,10 @@ ifneq ($(findstring llvmCore, $(RC_ProjectName)),llvmCore) # Normal build (not "Apple-style"). ifeq ($(BUILD_DIRS_ONLY),1) - DIRS := lib/System lib/Support utils + DIRS := lib/Support utils OPTIONAL_DIRS := else - DIRS := lib/System lib/Support utils lib/VMCore lib tools/llvm-shlib \ + DIRS := lib/Support utils lib/VMCore lib tools/llvm-shlib \ tools/llvm-config tools runtime docs unittests OPTIONAL_DIRS := projects bindings endif @@ -159,7 +159,7 @@ $(Echo) Eliminating files constructed by configure $(Verb) $(RM) -f \ $(TopDistDir)/include/llvm/Config/config.h \ - $(TopDistDir)/include/llvm/System/DataTypes.h + $(TopDistDir)/include/llvm/Support/DataTypes.h clang-only: all tools-only: all @@ -178,7 +178,7 @@ include/llvm/Config/AsmPrinters.def \ include/llvm/Config/AsmParsers.def \ include/llvm/Config/Disassemblers.def \ - include/llvm/System/DataTypes.h \ + include/llvm/Support/DataTypes.h \ tools/llvmc/src/Base.td FilesToConfigPATH := $(addprefix $(LLVM_OBJ_ROOT)/,$(FilesToConfig)) Modified: llvm/trunk/Makefile.rules URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile.rules?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/Makefile.rules (original) +++ llvm/trunk/Makefile.rules Mon Nov 29 12:16:10 2010 @@ -634,11 +634,11 @@ endif ifeq ($(HOST_OS),SunOS) -CPP.BaseFlags += -include llvm/System/Solaris.h +CPP.BaseFlags += -include llvm/Support/Solaris.h endif ifeq ($(HOST_OS),AuroraUX) -CPP.BaseFlags += -include llvm/System/Solaris.h +CPP.BaseFlags += -include llvm/Support/Solaris.h endif # !HOST_OS - AuroraUX. LD.Flags += -L$(LibDir) -L$(LLVMLibDir) Modified: llvm/trunk/autoconf/configure.ac URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/autoconf/configure.ac?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/autoconf/configure.ac (original) +++ llvm/trunk/autoconf/configure.ac Mon Nov 29 12:16:10 2010 @@ -319,7 +319,7 @@ AC_SUBST(NOLINKALL,$llvm_cv_no_link_all_option) dnl Set the "LLVM_ON_*" variables based on llvm_cv_platform_type -dnl This is used by lib/System to determine the basic kind of implementation +dnl This is used by lib/Support to determine the basic kind of implementation dnl to use. case $llvm_cv_platform_type in Unix) @@ -1625,7 +1625,7 @@ AC_CONFIG_FILES([include/llvm/Config/AsmPrinters.def]) AC_CONFIG_FILES([include/llvm/Config/AsmParsers.def]) AC_CONFIG_FILES([include/llvm/Config/Disassemblers.def]) -AC_CONFIG_HEADERS([include/llvm/System/DataTypes.h]) +AC_CONFIG_HEADERS([include/llvm/Support/DataTypes.h]) dnl Configure the makefile's configuration data AC_CONFIG_FILES([Makefile.config]) Modified: llvm/trunk/cmake/config-ix.cmake URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/config-ix.cmake?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/cmake/config-ix.cmake (original) +++ llvm/trunk/cmake/config-ix.cmake Mon Nov 29 12:16:10 2010 @@ -277,7 +277,7 @@ ) configure_file( - ${LLVM_MAIN_INCLUDE_DIR}/llvm/System/DataTypes.h.cmake - ${LLVM_BINARY_DIR}/include/llvm/System/DataTypes.h + ${LLVM_MAIN_INCLUDE_DIR}/llvm/Support/DataTypes.h.cmake + ${LLVM_BINARY_DIR}/include/llvm/Support/DataTypes.h ) Modified: llvm/trunk/configure URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/configure?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/configure (original) +++ llvm/trunk/configure Mon Nov 29 12:16:10 2010 @@ -20920,7 +20920,7 @@ ac_config_files="$ac_config_files include/llvm/Config/Disassemblers.def" -ac_config_headers="$ac_config_headers include/llvm/System/DataTypes.h" +ac_config_headers="$ac_config_headers include/llvm/Support/DataTypes.h" ac_config_files="$ac_config_files Makefile.config" @@ -21546,7 +21546,7 @@ "include/llvm/Config/AsmPrinters.def") CONFIG_FILES="$CONFIG_FILES include/llvm/Config/AsmPrinters.def" ;; "include/llvm/Config/AsmParsers.def") CONFIG_FILES="$CONFIG_FILES include/llvm/Config/AsmParsers.def" ;; "include/llvm/Config/Disassemblers.def") CONFIG_FILES="$CONFIG_FILES include/llvm/Config/Disassemblers.def" ;; - "include/llvm/System/DataTypes.h") CONFIG_HEADERS="$CONFIG_HEADERS include/llvm/System/DataTypes.h" ;; + "include/llvm/Support/DataTypes.h") CONFIG_HEADERS="$CONFIG_HEADERS include/llvm/Support/DataTypes.h" ;; "Makefile.config") CONFIG_FILES="$CONFIG_FILES Makefile.config" ;; "llvm.spec") CONFIG_FILES="$CONFIG_FILES llvm.spec" ;; "tools/llvmc/src/Base.td") CONFIG_FILES="$CONFIG_FILES tools/llvmc/src/Base.td" ;; Modified: llvm/trunk/include/llvm-c/EnhancedDisassembly.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/EnhancedDisassembly.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm-c/EnhancedDisassembly.h (original) +++ llvm/trunk/include/llvm-c/EnhancedDisassembly.h Mon Nov 29 12:16:10 2010 @@ -19,7 +19,7 @@ #ifndef LLVM_C_ENHANCEDDISASSEMBLY_H #define LLVM_C_ENHANCEDDISASSEMBLY_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #ifdef __cplusplus extern "C" { Modified: llvm/trunk/include/llvm/ADT/EquivalenceClasses.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/EquivalenceClasses.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/EquivalenceClasses.h (original) +++ llvm/trunk/include/llvm/ADT/EquivalenceClasses.h Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #ifndef LLVM_ADT_EQUIVALENCECLASSES_H #define LLVM_ADT_EQUIVALENCECLASSES_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include #include Modified: llvm/trunk/include/llvm/ADT/FoldingSet.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/FoldingSet.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/FoldingSet.h (original) +++ llvm/trunk/include/llvm/ADT/FoldingSet.h Mon Nov 29 12:16:10 2010 @@ -16,7 +16,7 @@ #ifndef LLVM_ADT_FOLDINGSET_H #define LLVM_ADT_FOLDINGSET_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" Modified: llvm/trunk/include/llvm/ADT/ImmutableList.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/ImmutableList.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/ImmutableList.h (original) +++ llvm/trunk/include/llvm/ADT/ImmutableList.h Mon Nov 29 12:16:10 2010 @@ -16,7 +16,7 @@ #include "llvm/Support/Allocator.h" #include "llvm/ADT/FoldingSet.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include namespace llvm { Modified: llvm/trunk/include/llvm/ADT/ImmutableSet.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/ImmutableSet.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/ImmutableSet.h (original) +++ llvm/trunk/include/llvm/ADT/ImmutableSet.h Mon Nov 29 12:16:10 2010 @@ -16,7 +16,7 @@ #include "llvm/Support/Allocator.h" #include "llvm/ADT/FoldingSet.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include #include Modified: llvm/trunk/include/llvm/ADT/SmallPtrSet.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/SmallPtrSet.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/SmallPtrSet.h (original) +++ llvm/trunk/include/llvm/ADT/SmallPtrSet.h Mon Nov 29 12:16:10 2010 @@ -18,7 +18,7 @@ #include #include #include -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/Support/PointerLikeTypeTraits.h" namespace llvm { Modified: llvm/trunk/include/llvm/ADT/SparseBitVector.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/SparseBitVector.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/SparseBitVector.h (original) +++ llvm/trunk/include/llvm/ADT/SparseBitVector.h Mon Nov 29 12:16:10 2010 @@ -17,7 +17,7 @@ #include "llvm/ADT/ilist.h" #include "llvm/ADT/ilist_node.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/raw_ostream.h" #include Modified: llvm/trunk/include/llvm/ADT/Statistic.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/Statistic.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/Statistic.h (original) +++ llvm/trunk/include/llvm/ADT/Statistic.h Mon Nov 29 12:16:10 2010 @@ -26,7 +26,7 @@ #ifndef LLVM_ADT_STATISTIC_H #define LLVM_ADT_STATISTIC_H -#include "llvm/System/Atomic.h" +#include "llvm/Support/Atomic.h" namespace llvm { class raw_ostream; Modified: llvm/trunk/include/llvm/ADT/StringExtras.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/StringExtras.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/StringExtras.h (original) +++ llvm/trunk/include/llvm/ADT/StringExtras.h Mon Nov 29 12:16:10 2010 @@ -14,7 +14,7 @@ #ifndef LLVM_ADT_STRINGEXTRAS_H #define LLVM_ADT_STRINGEXTRAS_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/ADT/APFloat.h" #include "llvm/ADT/StringRef.h" #include Modified: llvm/trunk/include/llvm/ADT/Twine.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/Twine.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/Twine.h (original) +++ llvm/trunk/include/llvm/ADT/Twine.h Mon Nov 29 12:16:10 2010 @@ -11,7 +11,7 @@ #define LLVM_ADT_TWINE_H #include "llvm/ADT/StringRef.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include #include Modified: llvm/trunk/include/llvm/ADT/ValueMap.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/ValueMap.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/ValueMap.h (original) +++ llvm/trunk/include/llvm/ADT/ValueMap.h Mon Nov 29 12:16:10 2010 @@ -29,7 +29,7 @@ #include "llvm/ADT/DenseMap.h" #include "llvm/Support/ValueHandle.h" #include "llvm/Support/type_traits.h" -#include "llvm/System/Mutex.h" +#include "llvm/Support/Mutex.h" #include Modified: llvm/trunk/include/llvm/Analysis/CallGraph.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/CallGraph.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/CallGraph.h (original) +++ llvm/trunk/include/llvm/Analysis/CallGraph.h Mon Nov 29 12:16:10 2010 @@ -57,7 +57,7 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/Support/CallSite.h" #include "llvm/Support/ValueHandle.h" -#include "llvm/System/IncludeFile.h" +#include "llvm/Support/IncludeFile.h" #include namespace llvm { Modified: llvm/trunk/include/llvm/Analysis/DIBuilder.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DIBuilder.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/DIBuilder.h (original) +++ llvm/trunk/include/llvm/Analysis/DIBuilder.h Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #ifndef LLVM_ANALYSIS_DIBUILDER_H #define LLVM_ANALYSIS_DIBUILDER_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/ADT/StringRef.h" namespace llvm { Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolution.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ScalarEvolution.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/ScalarEvolution.h (original) +++ llvm/trunk/include/llvm/Analysis/ScalarEvolution.h Mon Nov 29 12:16:10 2010 @@ -24,7 +24,7 @@ #include "llvm/Pass.h" #include "llvm/Instructions.h" #include "llvm/Function.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/Support/ValueHandle.h" #include "llvm/Support/Allocator.h" #include "llvm/Support/ConstantRange.h" Modified: llvm/trunk/include/llvm/Analysis/ValueTracking.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ValueTracking.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/ValueTracking.h (original) +++ llvm/trunk/include/llvm/Analysis/ValueTracking.h Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #ifndef LLVM_ANALYSIS_VALUETRACKING_H #define LLVM_ANALYSIS_VALUETRACKING_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include namespace llvm { Modified: llvm/trunk/include/llvm/BasicBlock.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/BasicBlock.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/BasicBlock.h (original) +++ llvm/trunk/include/llvm/BasicBlock.h Mon Nov 29 12:16:10 2010 @@ -18,7 +18,7 @@ #include "llvm/SymbolTableListTraits.h" #include "llvm/ADT/ilist.h" #include "llvm/ADT/Twine.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { @@ -58,9 +58,9 @@ /// tables. The type of a BasicBlock is "Type::LabelTy" because the basic block /// represents a label to which a branch can jump. /// -/// A well formed basic block is formed of a list of non-terminating -/// instructions followed by a single TerminatorInst instruction. -/// TerminatorInst's may not occur in the middle of basic blocks, and must +/// A well formed basic block is formed of a list of non-terminating +/// instructions followed by a single TerminatorInst instruction. +/// TerminatorInst's may not occur in the middle of basic blocks, and must /// terminate the blocks. The BasicBlock class allows malformed basic blocks to /// occur because it may be useful in the intermediate stage of constructing or /// modifying a program. However, the verifier will ensure that basic blocks @@ -90,7 +90,7 @@ public: /// getContext - Get the context in which this basic block lives. LLVMContext &getContext() const; - + /// Instruction iterators... typedef InstListType::iterator iterator; typedef InstListType::const_iterator const_iterator; @@ -98,7 +98,7 @@ /// Create - Creates a new BasicBlock. If the Parent parameter is specified, /// the basic block is automatically inserted at either the end of the /// function (if InsertBefore is 0), or before the specified basic block. - static BasicBlock *Create(LLVMContext &Context, const Twine &Name = "", + static BasicBlock *Create(LLVMContext &Context, const Twine &Name = "", Function *Parent = 0,BasicBlock *InsertBefore = 0) { return new BasicBlock(Context, Name, Parent, InsertBefore); } @@ -114,15 +114,15 @@ /// and BlockAddress's). User *use_back() { return cast(*use_begin());} const User *use_back() const { return cast(*use_begin());} - + /// getTerminator() - If this is a well formed basic block, then this returns /// a pointer to the terminator instruction. If it is not, then you get a /// null pointer back. /// TerminatorInst *getTerminator(); const TerminatorInst *getTerminator() const; - - /// Returns a pointer to the first instructon in this block that is not a + + /// Returns a pointer to the first instructon in this block that is not a /// PHINode instruction. When adding instruction to the beginning of the /// basic block, they should be added before the returned value, not before /// the first instruction, which might be PHI. @@ -137,7 +137,7 @@ const Instruction* getFirstNonPHIOrDbg() const { return const_cast(this)->getFirstNonPHIOrDbg(); } - + /// removeFromParent - This method unlinks 'this' from the containing /// function, but does not delete it. /// @@ -147,15 +147,15 @@ /// and deletes it. /// void eraseFromParent(); - + /// moveBefore - Unlink this basic block from its current function and /// insert it into the function that MovePos lives in, right before MovePos. void moveBefore(BasicBlock *MovePos); - + /// moveAfter - Unlink this basic block from its current function and /// insert it into the function that MovePos lives in, right after MovePos. void moveAfter(BasicBlock *MovePos); - + /// getSinglePredecessor - If this basic block has a single predecessor block, /// return the block, otherwise return a null pointer. @@ -166,8 +166,8 @@ /// getUniquePredecessor - If this basic block has a unique predecessor block, /// return the block, otherwise return a null pointer. - /// Note that unique predecessor doesn't mean single edge, there can be - /// multiple edges from the unique predecessor to this block (for example + /// Note that unique predecessor doesn't mean single edge, there can be + /// multiple edges from the unique predecessor to this block (for example /// a switch statement with multiple cases having the same destination). BasicBlock *getUniquePredecessor(); const BasicBlock *getUniquePredecessor() const { @@ -247,7 +247,7 @@ /// hasAddressTaken - returns true if there are any uses of this basic block /// other than direct branches, switches, etc. to it. bool hasAddressTaken() const { return getSubclassDataFromValue() != 0; } - + private: /// AdjustBlockAddressRefCount - BasicBlock stores the number of BlockAddress /// objects using it. This is almost always 0, sometimes one, possibly but Modified: llvm/trunk/include/llvm/Bitcode/Archive.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Bitcode/Archive.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Bitcode/Archive.h (original) +++ llvm/trunk/include/llvm/Bitcode/Archive.h Mon Nov 29 12:16:10 2010 @@ -19,7 +19,7 @@ #include "llvm/ADT/ilist.h" #include "llvm/ADT/ilist_node.h" -#include "llvm/System/Path.h" +#include "llvm/Support/Path.h" #include #include Modified: llvm/trunk/include/llvm/Bitcode/BitCodes.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Bitcode/BitCodes.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Bitcode/BitCodes.h (original) +++ llvm/trunk/include/llvm/Bitcode/BitCodes.h Mon Nov 29 12:16:10 2010 @@ -19,7 +19,7 @@ #define LLVM_BITCODE_BITCODES_H #include "llvm/ADT/SmallVector.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include namespace llvm { Modified: llvm/trunk/include/llvm/CodeGen/AsmPrinter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/AsmPrinter.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/AsmPrinter.h (original) +++ llvm/trunk/include/llvm/CodeGen/AsmPrinter.h Mon Nov 29 12:16:10 2010 @@ -17,7 +17,7 @@ #define LLVM_CODEGEN_ASMPRINTER_H #include "llvm/CodeGen/MachineFunctionPass.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { class BlockAddress; Modified: llvm/trunk/include/llvm/CodeGen/BinaryObject.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/BinaryObject.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/BinaryObject.h (original) +++ llvm/trunk/include/llvm/CodeGen/BinaryObject.h Mon Nov 29 12:16:10 2010 @@ -16,7 +16,7 @@ #define LLVM_CODEGEN_BINARYOBJECT_H #include "llvm/CodeGen/MachineRelocation.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include #include Modified: llvm/trunk/include/llvm/CodeGen/JITCodeEmitter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/JITCodeEmitter.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/JITCodeEmitter.h (original) +++ llvm/trunk/include/llvm/CodeGen/JITCodeEmitter.h Mon Nov 29 12:16:10 2010 @@ -18,7 +18,7 @@ #define LLVM_CODEGEN_JITCODEEMITTER_H #include -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/Support/MathExtras.h" #include "llvm/CodeGen/MachineCodeEmitter.h" #include "llvm/ADT/DenseMap.h" Modified: llvm/trunk/include/llvm/CodeGen/MachORelocation.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachORelocation.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachORelocation.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachORelocation.h Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #ifndef LLVM_CODEGEN_MACHO_RELOCATION_H #define LLVM_CODEGEN_MACHO_RELOCATION_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { Modified: llvm/trunk/include/llvm/CodeGen/MachineCodeEmitter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineCodeEmitter.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachineCodeEmitter.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineCodeEmitter.h Mon Nov 29 12:16:10 2010 @@ -17,7 +17,7 @@ #ifndef LLVM_CODEGEN_MACHINECODEEMITTER_H #define LLVM_CODEGEN_MACHINECODEEMITTER_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/Support/DebugLoc.h" namespace llvm { Modified: llvm/trunk/include/llvm/CodeGen/MachineCodeInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineCodeInfo.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachineCodeInfo.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineCodeInfo.h Mon Nov 29 12:16:10 2010 @@ -17,7 +17,7 @@ #ifndef EE_MACHINE_CODE_INFO_H #define EE_MACHINE_CODE_INFO_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { Modified: llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h Mon Nov 29 12:16:10 2010 @@ -16,7 +16,7 @@ #include "llvm/ADT/SmallVector.h" //#include "llvm/ADT/IndexedMap.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include #include Modified: llvm/trunk/include/llvm/CodeGen/MachineMemOperand.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineMemOperand.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachineMemOperand.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineMemOperand.h Mon Nov 29 12:16:10 2010 @@ -16,7 +16,7 @@ #ifndef LLVM_CODEGEN_MACHINEMEMOPERAND_H #define LLVM_CODEGEN_MACHINEMEMOPERAND_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { Modified: llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h Mon Nov 29 12:16:10 2010 @@ -39,7 +39,7 @@ #include "llvm/Support/Dwarf.h" #include "llvm/Support/DebugLoc.h" #include "llvm/Support/ValueHandle.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/PointerIntPair.h" #include "llvm/ADT/SmallPtrSet.h" Modified: llvm/trunk/include/llvm/CodeGen/MachineOperand.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineOperand.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachineOperand.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineOperand.h Mon Nov 29 12:16:10 2010 @@ -14,7 +14,7 @@ #ifndef LLVM_CODEGEN_MACHINEOPERAND_H #define LLVM_CODEGEN_MACHINEOPERAND_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include namespace llvm { Modified: llvm/trunk/include/llvm/CodeGen/MachineRelocation.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineRelocation.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachineRelocation.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineRelocation.h Mon Nov 29 12:16:10 2010 @@ -14,7 +14,7 @@ #ifndef LLVM_CODEGEN_MACHINERELOCATION_H #define LLVM_CODEGEN_MACHINERELOCATION_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include namespace llvm { Modified: llvm/trunk/include/llvm/CodeGen/PostRAHazardRecognizer.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/PostRAHazardRecognizer.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/PostRAHazardRecognizer.h (original) +++ llvm/trunk/include/llvm/CodeGen/PostRAHazardRecognizer.h Mon Nov 29 12:16:10 2010 @@ -17,7 +17,7 @@ #define LLVM_CODEGEN_EXACTHAZARDRECOGNIZER_H #include "llvm/CodeGen/ScheduleHazardRecognizer.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include #include Modified: llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h (original) +++ llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h Mon Nov 29 12:16:10 2010 @@ -12,7 +12,7 @@ // //===----------------------------------------------------------------------===// -#include "llvm/System/IncludeFile.h" +#include "llvm/Support/IncludeFile.h" #include "llvm/CodeGen/LiveInterval.h" #include "llvm/ADT/SmallPtrSet.h" Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h (original) +++ llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h Mon Nov 29 12:16:10 2010 @@ -29,7 +29,7 @@ #include "llvm/CodeGen/ValueTypes.h" #include "llvm/CodeGen/MachineMemOperand.h" #include "llvm/Support/MathExtras.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/Support/DebugLoc.h" #include Modified: llvm/trunk/include/llvm/CodeGen/ValueTypes.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/ValueTypes.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/ValueTypes.h (original) +++ llvm/trunk/include/llvm/CodeGen/ValueTypes.h Mon Nov 29 12:16:10 2010 @@ -18,7 +18,7 @@ #include #include -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/Support/MathExtras.h" namespace llvm { Modified: llvm/trunk/include/llvm/CompilerDriver/CompilationGraph.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CompilerDriver/CompilationGraph.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/CompilerDriver/CompilationGraph.h (original) +++ llvm/trunk/include/llvm/CompilerDriver/CompilationGraph.h Mon Nov 29 12:16:10 2010 @@ -21,7 +21,7 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringSet.h" -#include "llvm/System/Path.h" +#include "llvm/Support/Path.h" #include #include Modified: llvm/trunk/include/llvm/CompilerDriver/Tool.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CompilerDriver/Tool.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/CompilerDriver/Tool.h (original) +++ llvm/trunk/include/llvm/CompilerDriver/Tool.h Mon Nov 29 12:16:10 2010 @@ -18,7 +18,7 @@ #include "llvm/ADT/IntrusiveRefCntPtr.h" #include "llvm/ADT/StringSet.h" -#include "llvm/System/Path.h" +#include "llvm/Support/Path.h" #include #include Modified: llvm/trunk/include/llvm/DerivedTypes.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DerivedTypes.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/DerivedTypes.h (original) +++ llvm/trunk/include/llvm/DerivedTypes.h Mon Nov 29 12:16:10 2010 @@ -19,7 +19,7 @@ #define LLVM_DERIVED_TYPES_H #include "llvm/Type.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { Modified: llvm/trunk/include/llvm/ExecutionEngine/ExecutionEngine.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/ExecutionEngine.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/ExecutionEngine/ExecutionEngine.h (original) +++ llvm/trunk/include/llvm/ExecutionEngine/ExecutionEngine.h Mon Nov 29 12:16:10 2010 @@ -22,7 +22,7 @@ #include "llvm/ADT/StringRef.h" #include "llvm/ADT/ValueMap.h" #include "llvm/Support/ValueHandle.h" -#include "llvm/System/Mutex.h" +#include "llvm/Support/Mutex.h" #include "llvm/Target/TargetMachine.h" namespace llvm { Modified: llvm/trunk/include/llvm/ExecutionEngine/GenericValue.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/GenericValue.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/ExecutionEngine/GenericValue.h (original) +++ llvm/trunk/include/llvm/ExecutionEngine/GenericValue.h Mon Nov 29 12:16:10 2010 @@ -16,7 +16,7 @@ #define GENERIC_VALUE_H #include "llvm/ADT/APInt.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { Modified: llvm/trunk/include/llvm/ExecutionEngine/JITEventListener.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/JITEventListener.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/ExecutionEngine/JITEventListener.h (original) +++ llvm/trunk/include/llvm/ExecutionEngine/JITEventListener.h Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #ifndef LLVM_EXECUTION_ENGINE_JIT_EVENTLISTENER_H #define LLVM_EXECUTION_ENGINE_JIT_EVENTLISTENER_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/Support/DebugLoc.h" #include Modified: llvm/trunk/include/llvm/ExecutionEngine/JITMemoryManager.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/JITMemoryManager.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/ExecutionEngine/JITMemoryManager.h (original) +++ llvm/trunk/include/llvm/ExecutionEngine/JITMemoryManager.h Mon Nov 29 12:16:10 2010 @@ -10,7 +10,7 @@ #ifndef LLVM_EXECUTION_ENGINE_JIT_MEMMANAGER_H #define LLVM_EXECUTION_ENGINE_JIT_MEMMANAGER_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include namespace llvm { Modified: llvm/trunk/include/llvm/LinkAllVMCore.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LinkAllVMCore.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/LinkAllVMCore.h (original) +++ llvm/trunk/include/llvm/LinkAllVMCore.h Mon Nov 29 12:16:10 2010 @@ -22,15 +22,15 @@ #include "llvm/IntrinsicInst.h" #include "llvm/InlineAsm.h" #include "llvm/Analysis/Verifier.h" -#include "llvm/System/Alarm.h" -#include "llvm/System/DynamicLibrary.h" -#include "llvm/System/Memory.h" -#include "llvm/System/Mutex.h" -#include "llvm/System/Path.h" -#include "llvm/System/Process.h" -#include "llvm/System/Program.h" -#include "llvm/System/Signals.h" -#include "llvm/System/TimeValue.h" +#include "llvm/Support/Alarm.h" +#include "llvm/Support/DynamicLibrary.h" +#include "llvm/Support/Memory.h" +#include "llvm/Support/Mutex.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/Process.h" +#include "llvm/Support/Program.h" +#include "llvm/Support/Signals.h" +#include "llvm/Support/TimeValue.h" #include "llvm/Support/Dwarf.h" #include "llvm/Support/MathExtras.h" #include Modified: llvm/trunk/include/llvm/MC/EDInstInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/EDInstInfo.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/MC/EDInstInfo.h (original) +++ llvm/trunk/include/llvm/MC/EDInstInfo.h Mon Nov 29 12:16:10 2010 @@ -9,7 +9,7 @@ #ifndef EDINSTINFO_H #define EDINSTINFO_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { Modified: llvm/trunk/include/llvm/MC/MCAssembler.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCAssembler.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/MC/MCAssembler.h (original) +++ llvm/trunk/include/llvm/MC/MCAssembler.h Mon Nov 29 12:16:10 2010 @@ -17,7 +17,7 @@ #include "llvm/Support/Casting.h" #include "llvm/MC/MCFixup.h" #include "llvm/MC/MCInst.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include // FIXME: Shouldn't be needed. namespace llvm { Modified: llvm/trunk/include/llvm/MC/MCDisassembler.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCDisassembler.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/MC/MCDisassembler.h (original) +++ llvm/trunk/include/llvm/MC/MCDisassembler.h Mon Nov 29 12:16:10 2010 @@ -9,7 +9,7 @@ #ifndef MCDISASSEMBLER_H #define MCDISASSEMBLER_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { Modified: llvm/trunk/include/llvm/MC/MCExpr.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCExpr.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/MC/MCExpr.h (original) +++ llvm/trunk/include/llvm/MC/MCExpr.h Mon Nov 29 12:16:10 2010 @@ -11,7 +11,7 @@ #define LLVM_MC_MCEXPR_H #include "llvm/Support/Casting.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { class MCAsmInfo; Modified: llvm/trunk/include/llvm/MC/MCFixup.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCFixup.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/MC/MCFixup.h (original) +++ llvm/trunk/include/llvm/MC/MCFixup.h Mon Nov 29 12:16:10 2010 @@ -10,7 +10,7 @@ #ifndef LLVM_MC_MCFIXUP_H #define LLVM_MC_MCFIXUP_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include namespace llvm { Modified: llvm/trunk/include/llvm/MC/MCInst.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCInst.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/MC/MCInst.h (original) +++ llvm/trunk/include/llvm/MC/MCInst.h Mon Nov 29 12:16:10 2010 @@ -18,7 +18,7 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { class raw_ostream; Modified: llvm/trunk/include/llvm/MC/MCObjectWriter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCObjectWriter.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/MC/MCObjectWriter.h (original) +++ llvm/trunk/include/llvm/MC/MCObjectWriter.h Mon Nov 29 12:16:10 2010 @@ -12,7 +12,7 @@ #include "llvm/ADT/Triple.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include namespace llvm { Modified: llvm/trunk/include/llvm/MC/MCParser/AsmLexer.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCParser/AsmLexer.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/MC/MCParser/AsmLexer.h (original) +++ llvm/trunk/include/llvm/MC/MCParser/AsmLexer.h Mon Nov 29 12:16:10 2010 @@ -17,7 +17,7 @@ #include "llvm/ADT/StringRef.h" #include "llvm/MC/MCParser/MCAsmLexer.h" #include "llvm/MC/MCAsmInfo.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include #include Modified: llvm/trunk/include/llvm/MC/MCParser/MCAsmLexer.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCParser/MCAsmLexer.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/MC/MCParser/MCAsmLexer.h (original) +++ llvm/trunk/include/llvm/MC/MCParser/MCAsmLexer.h Mon Nov 29 12:16:10 2010 @@ -11,7 +11,7 @@ #define LLVM_MC_MCASMLEXER_H #include "llvm/ADT/StringRef.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/Support/SMLoc.h" namespace llvm { Modified: llvm/trunk/include/llvm/MC/MCParser/MCAsmParser.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCParser/MCAsmParser.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/MC/MCParser/MCAsmParser.h (original) +++ llvm/trunk/include/llvm/MC/MCParser/MCAsmParser.h Mon Nov 29 12:16:10 2010 @@ -10,7 +10,7 @@ #ifndef LLVM_MC_MCASMPARSER_H #define LLVM_MC_MCASMPARSER_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { class AsmToken; Modified: llvm/trunk/include/llvm/MC/MCStreamer.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCStreamer.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/MC/MCStreamer.h (original) +++ llvm/trunk/include/llvm/MC/MCStreamer.h Mon Nov 29 12:16:10 2010 @@ -14,7 +14,7 @@ #ifndef LLVM_MC_MCSTREAMER_H #define LLVM_MC_MCSTREAMER_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/MC/MCDirectives.h" namespace llvm { Modified: llvm/trunk/include/llvm/MC/MCValue.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCValue.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/MC/MCValue.h (original) +++ llvm/trunk/include/llvm/MC/MCValue.h Mon Nov 29 12:16:10 2010 @@ -14,7 +14,7 @@ #ifndef LLVM_MC_MCVALUE_H #define LLVM_MC_MCVALUE_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/MC/MCSymbol.h" #include Modified: llvm/trunk/include/llvm/Module.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Module.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Module.h (original) +++ llvm/trunk/include/llvm/Module.h Mon Nov 29 12:16:10 2010 @@ -20,7 +20,7 @@ #include "llvm/GlobalAlias.h" #include "llvm/Metadata.h" #include "llvm/ADT/OwningPtr.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include namespace llvm { Modified: llvm/trunk/include/llvm/Object/MachOFormat.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/MachOFormat.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Object/MachOFormat.h (original) +++ llvm/trunk/include/llvm/Object/MachOFormat.h Mon Nov 29 12:16:10 2010 @@ -22,7 +22,7 @@ #ifndef LLVM_OBJECT_MACHOFORMAT_H #define LLVM_OBJECT_MACHOFORMAT_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { namespace object { Modified: llvm/trunk/include/llvm/Object/ObjectFile.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ObjectFile.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Object/ObjectFile.h (original) +++ llvm/trunk/include/llvm/Object/ObjectFile.h Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #define LLVM_OBJECT_OBJECT_FILE_H #include "llvm/ADT/StringRef.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { Modified: llvm/trunk/include/llvm/PassSupport.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/PassSupport.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/PassSupport.h (original) +++ llvm/trunk/include/llvm/PassSupport.h Mon Nov 29 12:16:10 2010 @@ -24,7 +24,7 @@ #include "Pass.h" #include "llvm/PassRegistry.h" #include "llvm/InitializePasses.h" -#include "llvm/System/Atomic.h" +#include "llvm/Support/Atomic.h" #include namespace llvm { Copied: llvm/trunk/include/llvm/Support/AIXDataTypesFix.h (from r120288, llvm/trunk/include/llvm/System/AIXDataTypesFix.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/AIXDataTypesFix.h?p2=llvm/trunk/include/llvm/Support/AIXDataTypesFix.h&p1=llvm/trunk/include/llvm/System/AIXDataTypesFix.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== (empty) Copied: llvm/trunk/include/llvm/Support/Alarm.h (from r120288, llvm/trunk/include/llvm/System/Alarm.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Alarm.h?p2=llvm/trunk/include/llvm/Support/Alarm.h&p1=llvm/trunk/include/llvm/System/Alarm.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== (empty) Modified: llvm/trunk/include/llvm/Support/Allocator.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Allocator.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/Allocator.h (original) +++ llvm/trunk/include/llvm/Support/Allocator.h Mon Nov 29 12:16:10 2010 @@ -16,7 +16,7 @@ #include "llvm/Support/AlignOf.h" #include "llvm/Support/MathExtras.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include #include #include Copied: llvm/trunk/include/llvm/Support/Atomic.h (from r120288, llvm/trunk/include/llvm/System/Atomic.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Atomic.h?p2=llvm/trunk/include/llvm/Support/Atomic.h&p1=llvm/trunk/include/llvm/System/Atomic.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/System/Atomic.h (original) +++ llvm/trunk/include/llvm/Support/Atomic.h Mon Nov 29 12:16:10 2010 @@ -14,7 +14,7 @@ #ifndef LLVM_SYSTEM_ATOMIC_H #define LLVM_SYSTEM_ATOMIC_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { namespace sys { Modified: llvm/trunk/include/llvm/Support/COFF.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/COFF.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/COFF.h (original) +++ llvm/trunk/include/llvm/Support/COFF.h Mon Nov 29 12:16:10 2010 @@ -23,7 +23,7 @@ #ifndef LLVM_SUPPORT_WIN_COFF_H #define LLVM_SUPPORT_WIN_COFF_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include namespace llvm { Modified: llvm/trunk/include/llvm/Support/ConstantRange.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/ConstantRange.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/ConstantRange.h (original) +++ llvm/trunk/include/llvm/Support/ConstantRange.h Mon Nov 29 12:16:10 2010 @@ -33,7 +33,7 @@ #define LLVM_SUPPORT_CONSTANT_RANGE_H #include "llvm/ADT/APInt.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { Copied: llvm/trunk/include/llvm/Support/DataTypes.h.cmake (from r120288, llvm/trunk/include/llvm/System/DataTypes.h.cmake) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/DataTypes.h.cmake?p2=llvm/trunk/include/llvm/Support/DataTypes.h.cmake&p1=llvm/trunk/include/llvm/System/DataTypes.h.cmake&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/System/DataTypes.h.cmake (original) +++ llvm/trunk/include/llvm/Support/DataTypes.h.cmake Mon Nov 29 12:16:10 2010 @@ -1,4 +1,4 @@ -/*===-- include/System/DataTypes.h - Define fixed size types -----*- C -*-===*\ +/*===-- include/Support/DataTypes.h - Define fixed size types -----*- C -*-===*\ |* *| |* The LLVM Compiler Infrastructure *| |* *| @@ -43,12 +43,12 @@ happening when system headers or C++ STL headers include stdint.h before we define it here, we define it on the g++ command line (in Makefile.rules). */ #if !defined(__STDC_LIMIT_MACROS) -# error "Must #define __STDC_LIMIT_MACROS before #including System/DataTypes.h" +# error "Must #define __STDC_LIMIT_MACROS before #including Support/DataTypes.h" #endif #if !defined(__STDC_CONSTANT_MACROS) # error "Must #define __STDC_CONSTANT_MACROS before " \ - "#including System/DataTypes.h" + "#including Support/DataTypes.h" #endif /* Note that includes , if this is a C99 system. */ @@ -65,7 +65,7 @@ #endif #ifdef _AIX -#include "llvm/System/AIXDataTypesFix.h" +#include "llvm/Support/AIXDataTypesFix.h" #endif /* Handle incorrect definition of uint64_t as u_int64_t */ Copied: llvm/trunk/include/llvm/Support/DataTypes.h.in (from r120288, llvm/trunk/include/llvm/System/DataTypes.h.in) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/DataTypes.h.in?p2=llvm/trunk/include/llvm/Support/DataTypes.h.in&p1=llvm/trunk/include/llvm/System/DataTypes.h.in&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== (empty) Copied: llvm/trunk/include/llvm/Support/Disassembler.h (from r120288, llvm/trunk/include/llvm/System/Disassembler.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Disassembler.h?p2=llvm/trunk/include/llvm/Support/Disassembler.h&p1=llvm/trunk/include/llvm/System/Disassembler.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/System/Disassembler.h (original) +++ llvm/trunk/include/llvm/Support/Disassembler.h Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #ifndef LLVM_SYSTEM_DISASSEMBLER_H #define LLVM_SYSTEM_DISASSEMBLER_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include namespace llvm { Copied: llvm/trunk/include/llvm/Support/DynamicLibrary.h (from r120288, llvm/trunk/include/llvm/System/DynamicLibrary.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/DynamicLibrary.h?p2=llvm/trunk/include/llvm/Support/DynamicLibrary.h&p1=llvm/trunk/include/llvm/System/DynamicLibrary.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== (empty) Modified: llvm/trunk/include/llvm/Support/ELF.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/ELF.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/ELF.h (original) +++ llvm/trunk/include/llvm/Support/ELF.h Mon Nov 29 12:16:10 2010 @@ -20,7 +20,7 @@ #ifndef LLVM_SUPPORT_ELF_H #define LLVM_SUPPORT_ELF_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include namespace llvm { Modified: llvm/trunk/include/llvm/Support/Endian.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Endian.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/Endian.h (original) +++ llvm/trunk/include/llvm/Support/Endian.h Mon Nov 29 12:16:10 2010 @@ -15,8 +15,8 @@ #define LLVM_SUPPORT_ENDIAN_H #include "llvm/Config/config.h" -#include "llvm/System/Host.h" -#include "llvm/System/SwapByteOrder.h" +#include "llvm/Support/Host.h" +#include "llvm/Support/SwapByteOrder.h" #include "llvm/Support/type_traits.h" namespace llvm { Copied: llvm/trunk/include/llvm/Support/Errno.h (from r120288, llvm/trunk/include/llvm/System/Errno.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Errno.h?p2=llvm/trunk/include/llvm/Support/Errno.h&p1=llvm/trunk/include/llvm/System/Errno.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== (empty) Copied: llvm/trunk/include/llvm/Support/FEnv.h (from r120288, llvm/trunk/include/llvm/System/FEnv.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/FEnv.h?p2=llvm/trunk/include/llvm/Support/FEnv.h&p1=llvm/trunk/include/llvm/System/FEnv.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== (empty) Modified: llvm/trunk/include/llvm/Support/FileUtilities.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/FileUtilities.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/FileUtilities.h (original) +++ llvm/trunk/include/llvm/Support/FileUtilities.h Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #ifndef LLVM_SUPPORT_FILEUTILITIES_H #define LLVM_SUPPORT_FILEUTILITIES_H -#include "llvm/System/Path.h" +#include "llvm/Support/Path.h" namespace llvm { Modified: llvm/trunk/include/llvm/Support/GraphWriter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/GraphWriter.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/GraphWriter.h (original) +++ llvm/trunk/include/llvm/Support/GraphWriter.h Mon Nov 29 12:16:10 2010 @@ -26,7 +26,7 @@ #include "llvm/Support/DOTGraphTraits.h" #include "llvm/Support/raw_ostream.h" #include "llvm/ADT/GraphTraits.h" -#include "llvm/System/Path.h" +#include "llvm/Support/Path.h" #include #include Copied: llvm/trunk/include/llvm/Support/Host.h (from r120288, llvm/trunk/include/llvm/System/Host.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Host.h?p2=llvm/trunk/include/llvm/Support/Host.h&p1=llvm/trunk/include/llvm/System/Host.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== (empty) Copied: llvm/trunk/include/llvm/Support/IncludeFile.h (from r120288, llvm/trunk/include/llvm/System/IncludeFile.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/IncludeFile.h?p2=llvm/trunk/include/llvm/Support/IncludeFile.h&p1=llvm/trunk/include/llvm/System/IncludeFile.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/System/IncludeFile.h (original) +++ llvm/trunk/include/llvm/Support/IncludeFile.h Mon Nov 29 12:16:10 2010 @@ -16,14 +16,14 @@ #define LLVM_SYSTEM_INCLUDEFILE_H /// This macro is the public interface that IncludeFile.h exports. This gives -/// us the option to implement the "link the definition" capability in any +/// us the option to implement the "link the definition" capability in any /// manner that we choose. All header files that depend on a specific .cpp /// file being linked at run time should use this macro instead of the -/// IncludeFile class directly. -/// +/// IncludeFile class directly. +/// /// For example, foo.h would use:
/// FORCE_DEFINING_FILE_TO_BE_LINKED(foo)
-/// +/// /// And, foo.cp would use:
/// DEFINING_FILE_FOR(foo)
#ifdef __GNUC__ @@ -34,14 +34,14 @@ extern const char name ## LinkVar; \ __attribute__((used)) static const char *const name ## LinkObj = \ &name ## LinkVar; \ - } + } #else // Otherwise use a constructor call. #define FORCE_DEFINING_FILE_TO_BE_LINKED(name) \ namespace llvm { \ extern const char name ## LinkVar; \ static const IncludeFile name ## LinkObj ( &name ## LinkVar ); \ - } + } #endif /// This macro is the counterpart to FORCE_DEFINING_FILE_TO_BE_LINKED. It should @@ -53,9 +53,9 @@ namespace llvm { /// This class is used in the implementation of FORCE_DEFINING_FILE_TO_BE_LINKED -/// macro to make sure that the implementation of a header file is included -/// into a tool that uses the header. This is solely -/// to overcome problems linking .a files and not getting the implementation +/// macro to make sure that the implementation of a header file is included +/// into a tool that uses the header. This is solely +/// to overcome problems linking .a files and not getting the implementation /// of compilation units we need. This is commonly an issue with the various /// Passes but also occurs elsewhere in LLVM. We like to use .a files because /// they link faster and provide the smallest executables. However, sometimes Copied: llvm/trunk/include/llvm/Support/LICENSE.TXT (from r120288, llvm/trunk/include/llvm/System/LICENSE.TXT) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/LICENSE.TXT?p2=llvm/trunk/include/llvm/Support/LICENSE.TXT&p1=llvm/trunk/include/llvm/System/LICENSE.TXT&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/System/LICENSE.TXT (original) +++ llvm/trunk/include/llvm/Support/LICENSE.TXT Mon Nov 29 12:16:10 2010 @@ -1,6 +1,6 @@ LLVM System Interface Library ------------------------------------------------------------------------------- -The LLVM System Interface Library is licensed under the Illinois Open Source +The LLVM System Interface Library is licensed under the Illinois Open Source License and has the following additional copyright: Copyright (C) 2004 eXtensible Systems, Inc. Modified: llvm/trunk/include/llvm/Support/MachO.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/MachO.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/MachO.h (original) +++ llvm/trunk/include/llvm/Support/MachO.h Mon Nov 29 12:16:10 2010 @@ -14,7 +14,7 @@ #ifndef LLVM_SUPPORT_MACHO_H #define LLVM_SUPPORT_MACHO_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" // NOTE: The enums in this file are intentially named to be different than those // in the headers in /usr/include/mach (on darwin systems) to avoid conflicts Modified: llvm/trunk/include/llvm/Support/ManagedStatic.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/ManagedStatic.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/ManagedStatic.h (original) +++ llvm/trunk/include/llvm/Support/ManagedStatic.h Mon Nov 29 12:16:10 2010 @@ -14,8 +14,8 @@ #ifndef LLVM_SUPPORT_MANAGED_STATIC_H #define LLVM_SUPPORT_MANAGED_STATIC_H -#include "llvm/System/Atomic.h" -#include "llvm/System/Threading.h" +#include "llvm/Support/Atomic.h" +#include "llvm/Support/Threading.h" namespace llvm { Modified: llvm/trunk/include/llvm/Support/MathExtras.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/MathExtras.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/MathExtras.h (original) +++ llvm/trunk/include/llvm/Support/MathExtras.h Mon Nov 29 12:16:10 2010 @@ -14,7 +14,7 @@ #ifndef LLVM_SUPPORT_MATHEXTRAS_H #define LLVM_SUPPORT_MATHEXTRAS_H -#include "llvm/System/SwapByteOrder.h" +#include "llvm/Support/SwapByteOrder.h" namespace llvm { Copied: llvm/trunk/include/llvm/Support/Memory.h (from r120288, llvm/trunk/include/llvm/System/Memory.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Memory.h?p2=llvm/trunk/include/llvm/Support/Memory.h&p1=llvm/trunk/include/llvm/System/Memory.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/System/Memory.h (original) +++ llvm/trunk/include/llvm/Support/Memory.h Mon Nov 29 12:16:10 2010 @@ -14,7 +14,7 @@ #ifndef LLVM_SYSTEM_MEMORY_H #define LLVM_SYSTEM_MEMORY_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include namespace llvm { @@ -51,7 +51,7 @@ /// /// On success, this returns a non-null memory block, otherwise it returns /// a null memory block and fills in *ErrMsg. - /// + /// /// @brief Allocate Read/Write/Execute memory. static MemoryBlock AllocateRWX(size_t NumBytes, const MemoryBlock *NearBlock, @@ -65,8 +65,8 @@ /// in *ErrMsg. /// @brief Release Read/Write/Execute memory. static bool ReleaseRWX(MemoryBlock &block, std::string *ErrMsg = 0); - - + + /// InvalidateInstructionCache - Before the JIT can run a block of code /// that has been emitted it must invalidate the instruction cache on some /// platforms. @@ -82,11 +82,11 @@ /// boundaries, and the JIT internal allocations are not page aligned. static bool setWritable (MemoryBlock &M, std::string *ErrMsg = 0); - /// setRangeExecutable - Mark the page containing a range of addresses + /// setRangeExecutable - Mark the page containing a range of addresses /// as executable. static bool setRangeExecutable(const void *Addr, size_t Size); - /// setRangeWritable - Mark the page containing a range of addresses + /// setRangeWritable - Mark the page containing a range of addresses /// as writable. static bool setRangeWritable(const void *Addr, size_t Size); }; Modified: llvm/trunk/include/llvm/Support/MemoryBuffer.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/MemoryBuffer.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/MemoryBuffer.h (original) +++ llvm/trunk/include/llvm/Support/MemoryBuffer.h Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #define LLVM_SUPPORT_MEMORYBUFFER_H #include "llvm/ADT/StringRef.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include namespace llvm { Modified: llvm/trunk/include/llvm/Support/MemoryObject.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/MemoryObject.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/MemoryObject.h (original) +++ llvm/trunk/include/llvm/Support/MemoryObject.h Mon Nov 29 12:16:10 2010 @@ -10,7 +10,7 @@ #ifndef MEMORYOBJECT_H #define MEMORYOBJECT_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { Copied: llvm/trunk/include/llvm/Support/Mutex.h (from r120288, llvm/trunk/include/llvm/System/Mutex.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Mutex.h?p2=llvm/trunk/include/llvm/Support/Mutex.h&p1=llvm/trunk/include/llvm/System/Mutex.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/System/Mutex.h (original) +++ llvm/trunk/include/llvm/Support/Mutex.h Mon Nov 29 12:16:10 2010 @@ -14,7 +14,7 @@ #ifndef LLVM_SYSTEM_MUTEX_H #define LLVM_SYSTEM_MUTEX_H -#include "llvm/System/Threading.h" +#include "llvm/Support/Threading.h" #include namespace llvm @@ -79,9 +79,9 @@ void operator=(const MutexImpl &); /// @} }; - - - /// SmartMutex - A mutex with a compile time constant parameter that + + + /// SmartMutex - A mutex with a compile time constant parameter that /// indicates whether this mutex should become a no-op when we're not /// running in multithreaded mode. template @@ -91,7 +91,7 @@ public: explicit SmartMutex(bool rec = true) : MutexImpl(rec), acquired(0), recursive(rec) { } - + bool acquire() { if (!mt_only || llvm_is_multithreaded()) { return MutexImpl::acquire(); @@ -124,29 +124,29 @@ return MutexImpl::tryacquire(); else return true; } - + private: SmartMutex(const SmartMutex & original); void operator=(const SmartMutex &); }; - + /// Mutex - A standard, always enforced mutex. typedef SmartMutex Mutex; - + template class SmartScopedLock { SmartMutex& mtx; - + public: SmartScopedLock(SmartMutex& m) : mtx(m) { mtx.acquire(); } - + ~SmartScopedLock() { mtx.release(); } }; - + typedef SmartScopedLock ScopedLock; } } Modified: llvm/trunk/include/llvm/Support/MutexGuard.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/MutexGuard.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/MutexGuard.h (original) +++ llvm/trunk/include/llvm/Support/MutexGuard.h Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #ifndef LLVM_SUPPORT_MUTEXGUARD_H #define LLVM_SUPPORT_MUTEXGUARD_H -#include "llvm/System/Mutex.h" +#include "llvm/Support/Mutex.h" namespace llvm { /// Instances of this class acquire a given Mutex Lock when constructed and Copied: llvm/trunk/include/llvm/Support/Path.h (from r120288, llvm/trunk/include/llvm/System/Path.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Path.h?p2=llvm/trunk/include/llvm/Support/Path.h&p1=llvm/trunk/include/llvm/System/Path.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/System/Path.h (original) +++ llvm/trunk/include/llvm/Support/Path.h Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #define LLVM_SYSTEM_PATH_H #include "llvm/ADT/StringRef.h" -#include "llvm/System/TimeValue.h" +#include "llvm/Support/TimeValue.h" #include #include #include Copied: llvm/trunk/include/llvm/Support/PathV2.h (from r120288, llvm/trunk/include/llvm/System/PathV2.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/PathV2.h?p2=llvm/trunk/include/llvm/Support/PathV2.h&p1=llvm/trunk/include/llvm/System/PathV2.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/System/PathV2.h (original) +++ llvm/trunk/include/llvm/Support/PathV2.h Mon Nov 29 12:16:10 2010 @@ -25,8 +25,8 @@ //===----------------------------------------------------------------------===// #include "llvm/ADT/SmallString.h" -#include "llvm/System/DataTypes.h" -#include "llvm/System/system_error.h" +#include "llvm/Support/DataTypes.h" +#include "llvm/Support/system_error.h" #include #include #include Modified: llvm/trunk/include/llvm/Support/PointerLikeTypeTraits.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/PointerLikeTypeTraits.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/PointerLikeTypeTraits.h (original) +++ llvm/trunk/include/llvm/Support/PointerLikeTypeTraits.h Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #ifndef LLVM_SUPPORT_POINTERLIKETYPETRAITS_H #define LLVM_SUPPORT_POINTERLIKETYPETRAITS_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { Copied: llvm/trunk/include/llvm/Support/Process.h (from r120288, llvm/trunk/include/llvm/System/Process.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Process.h?p2=llvm/trunk/include/llvm/Support/Process.h&p1=llvm/trunk/include/llvm/System/Process.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/System/Process.h (original) +++ llvm/trunk/include/llvm/Support/Process.h Mon Nov 29 12:16:10 2010 @@ -14,7 +14,7 @@ #ifndef LLVM_SYSTEM_PROCESS_H #define LLVM_SYSTEM_PROCESS_H -#include "llvm/System/TimeValue.h" +#include "llvm/Support/TimeValue.h" namespace llvm { namespace sys { Copied: llvm/trunk/include/llvm/Support/Program.h (from r120288, llvm/trunk/include/llvm/System/Program.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Program.h?p2=llvm/trunk/include/llvm/Support/Program.h&p1=llvm/trunk/include/llvm/System/Program.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/System/Program.h (original) +++ llvm/trunk/include/llvm/Support/Program.h Mon Nov 29 12:16:10 2010 @@ -14,7 +14,7 @@ #ifndef LLVM_SYSTEM_PROGRAM_H #define LLVM_SYSTEM_PROGRAM_H -#include "llvm/System/Path.h" +#include "llvm/Support/Path.h" namespace llvm { namespace sys { Copied: llvm/trunk/include/llvm/Support/RWMutex.h (from r120288, llvm/trunk/include/llvm/System/RWMutex.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/RWMutex.h?p2=llvm/trunk/include/llvm/Support/RWMutex.h&p1=llvm/trunk/include/llvm/System/RWMutex.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/System/RWMutex.h (original) +++ llvm/trunk/include/llvm/Support/RWMutex.h Mon Nov 29 12:16:10 2010 @@ -14,7 +14,7 @@ #ifndef LLVM_SYSTEM_RWMUTEX_H #define LLVM_SYSTEM_RWMUTEX_H -#include "llvm/System/Threading.h" +#include "llvm/Support/Threading.h" #include namespace llvm @@ -43,7 +43,7 @@ /// Attempts to unconditionally acquire the lock in reader mode. If the /// lock is held by a writer, this method will wait until it can acquire - /// the lock. + /// the lock. /// @returns false if any kind of error occurs, true otherwise. /// @brief Unconditionally acquire the lock in reader mode. bool reader_acquire(); @@ -55,7 +55,7 @@ /// Attempts to unconditionally acquire the lock in reader mode. If the /// lock is held by any readers, this method will wait until it can - /// acquire the lock. + /// acquire the lock. /// @returns false if any kind of error occurs, true otherwise. /// @brief Unconditionally acquire the lock in writer mode. bool writer_acquire(); @@ -79,8 +79,8 @@ void operator=(const RWMutexImpl &); /// @} }; - - /// SmartMutex - An R/W mutex with a compile time constant parameter that + + /// SmartMutex - An R/W mutex with a compile time constant parameter that /// indicates whether this mutex should become a no-op when we're not /// running in multithreaded mode. template @@ -88,80 +88,80 @@ unsigned readers, writers; public: explicit SmartRWMutex() : RWMutexImpl(), readers(0), writers(0) { } - + bool reader_acquire() { if (!mt_only || llvm_is_multithreaded()) return RWMutexImpl::reader_acquire(); - + // Single-threaded debugging code. This would be racy in multithreaded // mode, but provides not sanity checks in single threaded mode. ++readers; return true; } - + bool reader_release() { if (!mt_only || llvm_is_multithreaded()) return RWMutexImpl::reader_release(); - + // Single-threaded debugging code. This would be racy in multithreaded // mode, but provides not sanity checks in single threaded mode. assert(readers > 0 && "Reader lock not acquired before release!"); --readers; return true; } - + bool writer_acquire() { if (!mt_only || llvm_is_multithreaded()) return RWMutexImpl::writer_acquire(); - + // Single-threaded debugging code. This would be racy in multithreaded // mode, but provides not sanity checks in single threaded mode. assert(writers == 0 && "Writer lock already acquired!"); ++writers; return true; } - + bool writer_release() { if (!mt_only || llvm_is_multithreaded()) return RWMutexImpl::writer_release(); - + // Single-threaded debugging code. This would be racy in multithreaded // mode, but provides not sanity checks in single threaded mode. assert(writers == 1 && "Writer lock not acquired before release!"); --writers; return true; } - + private: SmartRWMutex(const SmartRWMutex & original); void operator=(const SmartRWMutex &); }; typedef SmartRWMutex RWMutex; - + /// ScopedReader - RAII acquisition of a reader lock template struct SmartScopedReader { SmartRWMutex& mutex; - + explicit SmartScopedReader(SmartRWMutex& m) : mutex(m) { mutex.reader_acquire(); } - + ~SmartScopedReader() { mutex.reader_release(); } }; typedef SmartScopedReader ScopedReader; - + /// ScopedWriter - RAII acquisition of a writer lock template struct SmartScopedWriter { SmartRWMutex& mutex; - + explicit SmartScopedWriter(SmartRWMutex& m) : mutex(m) { mutex.writer_acquire(); } - + ~SmartScopedWriter() { mutex.writer_release(); } Copied: llvm/trunk/include/llvm/Support/Signals.h (from r120288, llvm/trunk/include/llvm/System/Signals.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Signals.h?p2=llvm/trunk/include/llvm/Support/Signals.h&p1=llvm/trunk/include/llvm/System/Signals.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/System/Signals.h (original) +++ llvm/trunk/include/llvm/Support/Signals.h Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #ifndef LLVM_SYSTEM_SIGNALS_H #define LLVM_SYSTEM_SIGNALS_H -#include "llvm/System/Path.h" +#include "llvm/Support/Path.h" namespace llvm { namespace sys { Copied: llvm/trunk/include/llvm/Support/Solaris.h (from r120288, llvm/trunk/include/llvm/System/Solaris.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Solaris.h?p2=llvm/trunk/include/llvm/Support/Solaris.h&p1=llvm/trunk/include/llvm/System/Solaris.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== (empty) Copied: llvm/trunk/include/llvm/Support/SwapByteOrder.h (from r120288, llvm/trunk/include/llvm/System/SwapByteOrder.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/SwapByteOrder.h?p2=llvm/trunk/include/llvm/Support/SwapByteOrder.h&p1=llvm/trunk/include/llvm/System/SwapByteOrder.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/System/SwapByteOrder.h (original) +++ llvm/trunk/include/llvm/Support/SwapByteOrder.h Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #ifndef LLVM_SYSTEM_SWAP_BYTE_ORDER_H #define LLVM_SYSTEM_SWAP_BYTE_ORDER_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include #include @@ -87,7 +87,7 @@ #else #error "Unknown long size!" #endif - + inline unsigned long long SwapByteOrder(unsigned long long C) { return SwapByteOrder_64(C); } Copied: llvm/trunk/include/llvm/Support/ThreadLocal.h (from r120288, llvm/trunk/include/llvm/System/ThreadLocal.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/ThreadLocal.h?p2=llvm/trunk/include/llvm/Support/ThreadLocal.h&p1=llvm/trunk/include/llvm/System/ThreadLocal.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/System/ThreadLocal.h (original) +++ llvm/trunk/include/llvm/Support/ThreadLocal.h Mon Nov 29 12:16:10 2010 @@ -14,7 +14,7 @@ #ifndef LLVM_SYSTEM_THREAD_LOCAL_H #define LLVM_SYSTEM_THREAD_LOCAL_H -#include "llvm/System/Threading.h" +#include "llvm/Support/Threading.h" #include namespace llvm { @@ -30,21 +30,21 @@ const void* getInstance(); void removeInstance(); }; - + /// ThreadLocal - A class used to abstract thread-local storage. It holds, /// for each thread, a pointer a single object of type T. template class ThreadLocal : public ThreadLocalImpl { public: ThreadLocal() : ThreadLocalImpl() { } - + /// get - Fetches a pointer to the object associated with the current /// thread. If no object has yet been associated, it returns NULL; T* get() { return static_cast(getInstance()); } - + // set - Associates a pointer to an object with the current thread. void set(T* d) { setInstance(d); } - + // erase - Removes the pointer associated with the current thread. void erase() { removeInstance(); } }; Copied: llvm/trunk/include/llvm/Support/Threading.h (from r120288, llvm/trunk/include/llvm/System/Threading.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Threading.h?p2=llvm/trunk/include/llvm/Support/Threading.h&p1=llvm/trunk/include/llvm/System/Threading.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/System/Threading.h (original) +++ llvm/trunk/include/llvm/Support/Threading.h Mon Nov 29 12:16:10 2010 @@ -18,25 +18,25 @@ /// llvm_start_multithreaded - Allocate and initialize structures needed to /// make LLVM safe for multithreading. The return value indicates whether /// multithreaded initialization succeeded. LLVM will still be operational - /// on "failed" return, and will still be safe for hosting threading + /// on "failed" return, and will still be safe for hosting threading /// applications in the JIT, but will not be safe for concurrent calls to the /// LLVM APIs. /// THIS MUST EXECUTE IN ISOLATION FROM ALL OTHER LLVM API CALLS. bool llvm_start_multithreaded(); - + /// llvm_stop_multithreaded - Deallocate structures necessary to make LLVM /// safe for multithreading. /// THIS MUST EXECUTE IN ISOLATION FROM ALL OTHER LLVM API CALLS. void llvm_stop_multithreaded(); - + /// llvm_is_multithreaded - Check whether LLVM is executing in thread-safe /// mode or not. bool llvm_is_multithreaded(); - + /// acquire_global_lock - Acquire the global lock. This is a no-op if called /// before llvm_start_multithreaded(). void llvm_acquire_global_lock(); - + /// release_global_lock - Release the global lock. This is a no-op if called /// before llvm_start_multithreaded(). void llvm_release_global_lock(); Copied: llvm/trunk/include/llvm/Support/TimeValue.h (from r120288, llvm/trunk/include/llvm/System/TimeValue.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/TimeValue.h?p2=llvm/trunk/include/llvm/Support/TimeValue.h&p1=llvm/trunk/include/llvm/System/TimeValue.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/System/TimeValue.h (original) +++ llvm/trunk/include/llvm/Support/TimeValue.h Mon Nov 29 12:16:10 2010 @@ -11,7 +11,7 @@ // //===----------------------------------------------------------------------===// -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include #ifndef LLVM_SYSTEM_TIMEVALUE_H Modified: llvm/trunk/include/llvm/Support/Timer.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Timer.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/Timer.h (original) +++ llvm/trunk/include/llvm/Support/Timer.h Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #ifndef LLVM_SUPPORT_TIMER_H #define LLVM_SUPPORT_TIMER_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/ADT/StringRef.h" #include #include Copied: llvm/trunk/include/llvm/Support/Valgrind.h (from r120288, llvm/trunk/include/llvm/System/Valgrind.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Valgrind.h?p2=llvm/trunk/include/llvm/Support/Valgrind.h&p1=llvm/trunk/include/llvm/System/Valgrind.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== (empty) Modified: llvm/trunk/include/llvm/Support/raw_ostream.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/raw_ostream.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/raw_ostream.h (original) +++ llvm/trunk/include/llvm/Support/raw_ostream.h Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #define LLVM_SUPPORT_RAW_OSTREAM_H #include "llvm/ADT/StringRef.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { class format_object_base; Copied: llvm/trunk/include/llvm/Support/system_error.h (from r120288, llvm/trunk/include/llvm/System/system_error.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/system_error.h?p2=llvm/trunk/include/llvm/Support/system_error.h&p1=llvm/trunk/include/llvm/System/system_error.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== (empty) Removed: llvm/trunk/include/llvm/System/AIXDataTypesFix.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/AIXDataTypesFix.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/AIXDataTypesFix.h (original) +++ llvm/trunk/include/llvm/System/AIXDataTypesFix.h (removed) @@ -1,25 +0,0 @@ -//===-- llvm/System/AIXDataTypesFix.h - Fix datatype defs ------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file overrides default system-defined types and limits which cannot be -// done in DataTypes.h.in because it is processed by autoheader first, which -// comments out any #undef statement -// -//===----------------------------------------------------------------------===// - -// No include guards desired! - -#ifndef SUPPORT_DATATYPES_H -#error "AIXDataTypesFix.h must only be included via DataTypes.h!" -#endif - -// GCC is strict about defining large constants: they must have LL modifier. -// These will be defined properly at the end of DataTypes.h -#undef INT64_MAX -#undef INT64_MIN Removed: llvm/trunk/include/llvm/System/Alarm.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/Alarm.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/Alarm.h (original) +++ llvm/trunk/include/llvm/System/Alarm.h (removed) @@ -1,51 +0,0 @@ -//===- llvm/System/Alarm.h - Alarm Generation support ----------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file provides an operating system independent interface to alarm(2) -// type functionality. The Alarm class allows a one-shot alarm to be set up -// at some number of seconds in the future. When the alarm triggers, a method -// is called to process the event -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_ALARM_H -#define LLVM_SYSTEM_ALARM_H - -namespace llvm { -namespace sys { - - /// This function registers an alarm to trigger some number of \p seconds in - /// the future. When that time arrives, the AlarmStatus function will begin - /// to return 1 instead of 0. The user must poll the status of the alarm by - /// making occasional calls to AlarmStatus. If the user sends an interrupt - /// signal, AlarmStatus will begin returning -1, even if the alarm event - /// occurred. - /// @returns nothing - void SetupAlarm( - unsigned seconds ///< Number of seconds in future when alarm arrives - ); - - /// This function terminates the alarm previously set up - /// @returns nothing - void TerminateAlarm(); - - /// This function acquires the status of the alarm. - /// @returns -1=cancelled, 0=untriggered, 1=triggered - int AlarmStatus(); - - /// Sleep for n seconds. Warning: mixing calls to Sleep() and other *Alarm - /// calls may be a bad idea on some platforms (source: Linux man page). - /// @returns nothing. - void Sleep(unsigned n); - - -} // End sys namespace -} // End llvm namespace - -#endif Removed: llvm/trunk/include/llvm/System/Atomic.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/Atomic.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/Atomic.h (original) +++ llvm/trunk/include/llvm/System/Atomic.h (removed) @@ -1,39 +0,0 @@ -//===- llvm/System/Atomic.h - Atomic Operations -----------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file declares the llvm::sys atomic operations. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_ATOMIC_H -#define LLVM_SYSTEM_ATOMIC_H - -#include "llvm/System/DataTypes.h" - -namespace llvm { - namespace sys { - void MemoryFence(); - -#ifdef _MSC_VER - typedef long cas_flag; -#else - typedef uint32_t cas_flag; -#endif - cas_flag CompareAndSwap(volatile cas_flag* ptr, - cas_flag new_value, - cas_flag old_value); - cas_flag AtomicIncrement(volatile cas_flag* ptr); - cas_flag AtomicDecrement(volatile cas_flag* ptr); - cas_flag AtomicAdd(volatile cas_flag* ptr, cas_flag val); - cas_flag AtomicMul(volatile cas_flag* ptr, cas_flag val); - cas_flag AtomicDiv(volatile cas_flag* ptr, cas_flag val); - } -} - -#endif Removed: llvm/trunk/include/llvm/System/DataTypes.h.cmake URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/DataTypes.h.cmake?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/DataTypes.h.cmake (original) +++ llvm/trunk/include/llvm/System/DataTypes.h.cmake (removed) @@ -1,189 +0,0 @@ -/*===-- include/System/DataTypes.h - Define fixed size types -----*- C -*-===*\ -|* *| -|* The LLVM Compiler Infrastructure *| -|* *| -|* This file is distributed under the University of Illinois Open Source *| -|* License. See LICENSE.TXT for details. *| -|* *| -|*===----------------------------------------------------------------------===*| -|* *| -|* This file contains definitions to figure out the size of _HOST_ data types.*| -|* This file is important because different host OS's define different macros,*| -|* which makes portability tough. This file exports the following *| -|* definitions: *| -|* *| -|* [u]int(32|64)_t : typedefs for signed and unsigned 32/64 bit system types*| -|* [U]INT(8|16|32|64)_(MIN|MAX) : Constants for the min and max values. *| -|* *| -|* No library is required when using these functinons. *| -|* *| -|*===----------------------------------------------------------------------===*/ - -/* Please leave this file C-compatible. */ - -#ifndef SUPPORT_DATATYPES_H -#define SUPPORT_DATATYPES_H - -#cmakedefine HAVE_SYS_TYPES_H ${HAVE_SYS_TYPES_H} -#cmakedefine HAVE_INTTYPES_H ${HAVE_INTTYPES_H} -#cmakedefine HAVE_STDINT_H ${HAVE_STDINT_H} -#cmakedefine HAVE_UINT64_T ${HAVE_UINT64_T} -#cmakedefine HAVE_U_INT64_T ${HAVE_U_INT64_T} - -#ifdef __cplusplus -#include -#else -#include -#endif - -#ifndef _MSC_VER - -/* Note that this header's correct operation depends on __STDC_LIMIT_MACROS - being defined. We would define it here, but in order to prevent Bad Things - happening when system headers or C++ STL headers include stdint.h before we - define it here, we define it on the g++ command line (in Makefile.rules). */ -#if !defined(__STDC_LIMIT_MACROS) -# error "Must #define __STDC_LIMIT_MACROS before #including System/DataTypes.h" -#endif - -#if !defined(__STDC_CONSTANT_MACROS) -# error "Must #define __STDC_CONSTANT_MACROS before " \ - "#including System/DataTypes.h" -#endif - -/* Note that includes , if this is a C99 system. */ -#ifdef HAVE_SYS_TYPES_H -#include -#endif - -#ifdef HAVE_INTTYPES_H -#include -#endif - -#ifdef HAVE_STDINT_H -#include -#endif - -#ifdef _AIX -#include "llvm/System/AIXDataTypesFix.h" -#endif - -/* Handle incorrect definition of uint64_t as u_int64_t */ -#ifndef HAVE_UINT64_T -#ifdef HAVE_U_INT64_T -typedef u_int64_t uint64_t; -#else -# error "Don't have a definition for uint64_t on this platform" -#endif -#endif - -#ifdef _OpenBSD_ -#define INT8_MAX 127 -#define INT8_MIN -128 -#define UINT8_MAX 255 -#define INT16_MAX 32767 -#define INT16_MIN -32768 -#define UINT16_MAX 65535 -#define INT32_MAX 2147483647 -#define INT32_MIN -2147483648 -#define UINT32_MAX 4294967295U -#endif - -#else /* _MSC_VER */ -/* Visual C++ doesn't provide standard integer headers, but it does provide - built-in data types. */ -#include -#include -#include -#ifdef __cplusplus -#include -#else -#include -#endif -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef short int16_t; -typedef unsigned short uint16_t; -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed int ssize_t; -#ifndef INT8_MAX -# define INT8_MAX 127 -#endif -#ifndef INT8_MIN -# define INT8_MIN -128 -#endif -#ifndef UINT8_MAX -# define UINT8_MAX 255 -#endif -#ifndef INT16_MAX -# define INT16_MAX 32767 -#endif -#ifndef INT16_MIN -# define INT16_MIN -32768 -#endif -#ifndef UINT16_MAX -# define UINT16_MAX 65535 -#endif -#ifndef INT32_MAX -# define INT32_MAX 2147483647 -#endif -#ifndef INT32_MIN -# define INT32_MIN -2147483648 -#endif -#ifndef UINT32_MAX -# define UINT32_MAX 4294967295U -#endif -/* Certain compatibility updates to VC++ introduce the `cstdint' - * header, which defines the INT*_C macros. On default installs they - * are absent. */ -#ifndef INT8_C -# define INT8_C(C) C##i8 -#endif -#ifndef UINT8_C -# define UINT8_C(C) C##ui8 -#endif -#ifndef INT16_C -# define INT16_C(C) C##i16 -#endif -#ifndef UINT16_C -# define UINT16_C(C) C##ui16 -#endif -#ifndef INT32_C -# define INT32_C(C) C##i32 -#endif -#ifndef UINT32_C -# define UINT32_C(C) C##ui32 -#endif -#ifndef INT64_C -# define INT64_C(C) C##i64 -#endif -#ifndef UINT64_C -# define UINT64_C(C) C##ui64 -#endif -#endif /* _MSC_VER */ - -/* Set defaults for constants which we cannot find. */ -#if !defined(INT64_MAX) -# define INT64_MAX 9223372036854775807LL -#endif -#if !defined(INT64_MIN) -# define INT64_MIN ((-INT64_MAX)-1) -#endif -#if !defined(UINT64_MAX) -# define UINT64_MAX 0xffffffffffffffffULL -#endif - -#if __GNUC__ > 3 -#define END_WITH_NULL __attribute__((sentinel)) -#else -#define END_WITH_NULL -#endif - -#ifndef HUGE_VALF -#define HUGE_VALF (float)HUGE_VAL -#endif - -#endif /* SUPPORT_DATATYPES_H */ Removed: llvm/trunk/include/llvm/System/DataTypes.h.in URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/DataTypes.h.in?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/DataTypes.h.in (original) +++ llvm/trunk/include/llvm/System/DataTypes.h.in (removed) @@ -1,111 +0,0 @@ -/*===-- include/System/DataTypes.h - Define fixed size types -----*- C -*-===*\ -|* *| -|* The LLVM Compiler Infrastructure *| -|* *| -|* This file is distributed under the University of Illinois Open Source *| -|* License. See LICENSE.TXT for details. *| -|* *| -|*===----------------------------------------------------------------------===*| -|* *| -|* This file contains definitions to figure out the size of _HOST_ data types.*| -|* This file is important because different host OS's define different macros,*| -|* which makes portability tough. This file exports the following *| -|* definitions: *| -|* *| -|* [u]int(32|64)_t : typedefs for signed and unsigned 32/64 bit system types*| -|* [U]INT(8|16|32|64)_(MIN|MAX) : Constants for the min and max values. *| -|* *| -|* No library is required when using these functions. *| -|* *| -|*===----------------------------------------------------------------------===*/ - -/* Please leave this file C-compatible. */ - -#ifndef SUPPORT_DATATYPES_H -#define SUPPORT_DATATYPES_H - -#undef HAVE_SYS_TYPES_H -#undef HAVE_INTTYPES_H -#undef HAVE_STDINT_H -#undef HAVE_UINT64_T -#undef HAVE_U_INT64_T - -#ifdef __cplusplus -#include -#else -#include -#endif - -/* Note that this header's correct operation depends on __STDC_LIMIT_MACROS - being defined. We would define it here, but in order to prevent Bad Things - happening when system headers or C++ STL headers include stdint.h before we - define it here, we define it on the g++ command line (in Makefile.rules). */ -#if !defined(__STDC_LIMIT_MACROS) -# error "Must #define __STDC_LIMIT_MACROS before #including System/DataTypes.h" -#endif - -#if !defined(__STDC_CONSTANT_MACROS) -# error "Must #define __STDC_CONSTANT_MACROS before " \ - "#including System/DataTypes.h" -#endif - -/* Note that includes , if this is a C99 system. */ -#ifdef HAVE_SYS_TYPES_H -#include -#endif - -#ifdef HAVE_INTTYPES_H -#include -#endif - -#ifdef HAVE_STDINT_H -#include -#endif - -#ifdef _AIX -#include "llvm/System/AIXDataTypesFix.h" -#endif - -/* Handle incorrect definition of uint64_t as u_int64_t */ -#ifndef HAVE_UINT64_T -#ifdef HAVE_U_INT64_T -typedef u_int64_t uint64_t; -#else -# error "Don't have a definition for uint64_t on this platform" -#endif -#endif - -#ifdef _OpenBSD_ -#define INT8_MAX 127 -#define INT8_MIN -128 -#define UINT8_MAX 255 -#define INT16_MAX 32767 -#define INT16_MIN -32768 -#define UINT16_MAX 65535 -#define INT32_MAX 2147483647 -#define INT32_MIN -2147483648 -#define UINT32_MAX 4294967295U -#endif - -/* Set defaults for constants which we cannot find. */ -#if !defined(INT64_MAX) -# define INT64_MAX 9223372036854775807LL -#endif -#if !defined(INT64_MIN) -# define INT64_MIN ((-INT64_MAX)-1) -#endif -#if !defined(UINT64_MAX) -# define UINT64_MAX 0xffffffffffffffffULL -#endif - -#if __GNUC__ > 3 -#define END_WITH_NULL __attribute__((sentinel)) -#else -#define END_WITH_NULL -#endif - -#ifndef HUGE_VALF -#define HUGE_VALF (float)HUGE_VAL -#endif - -#endif /* SUPPORT_DATATYPES_H */ Removed: llvm/trunk/include/llvm/System/Disassembler.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/Disassembler.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/Disassembler.h (original) +++ llvm/trunk/include/llvm/System/Disassembler.h (removed) @@ -1,35 +0,0 @@ -//===- llvm/Support/Disassembler.h ------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the necessary glue to call external disassembler -// libraries. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_DISASSEMBLER_H -#define LLVM_SYSTEM_DISASSEMBLER_H - -#include "llvm/System/DataTypes.h" -#include - -namespace llvm { -namespace sys { - -/// This function returns true, if there is possible to use some external -/// disassembler library. False otherwise. -bool hasDisassembler(); - -/// This function provides some "glue" code to call external disassembler -/// libraries. -std::string disassembleBuffer(uint8_t* start, size_t length, uint64_t pc = 0); - -} -} - -#endif // LLVM_SYSTEM_DISASSEMBLER_H Removed: llvm/trunk/include/llvm/System/DynamicLibrary.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/DynamicLibrary.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/DynamicLibrary.h (original) +++ llvm/trunk/include/llvm/System/DynamicLibrary.h (removed) @@ -1,86 +0,0 @@ -//===-- llvm/System/DynamicLibrary.h - Portable Dynamic Library -*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file declares the sys::DynamicLibrary class. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_DYNAMIC_LIBRARY_H -#define LLVM_SYSTEM_DYNAMIC_LIBRARY_H - -#include - -namespace llvm { -namespace sys { - - /// This class provides a portable interface to dynamic libraries which also - /// might be known as shared libraries, shared objects, dynamic shared - /// objects, or dynamic link libraries. Regardless of the terminology or the - /// operating system interface, this class provides a portable interface that - /// allows dynamic libraries to be loaded and searched for externally - /// defined symbols. This is typically used to provide "plug-in" support. - /// It also allows for symbols to be defined which don't live in any library, - /// but rather the main program itself, useful on Windows where the main - /// executable cannot be searched. - class DynamicLibrary { - DynamicLibrary(); // DO NOT IMPLEMENT - public: - /// This function allows a library to be loaded without instantiating a - /// DynamicLibrary object. Consequently, it is marked as being permanent - /// and will only be unloaded when the program terminates. This returns - /// false on success or returns true and fills in *ErrMsg on failure. - /// @brief Open a dynamic library permanently. - /// - /// NOTE: This function is not thread safe. - /// - static bool LoadLibraryPermanently(const char *filename, - std::string *ErrMsg = 0); - - /// This function will search through all previously loaded dynamic - /// libraries for the symbol \p symbolName. If it is found, the addressof - /// that symbol is returned. If not, null is returned. Note that this will - /// search permanently loaded libraries (LoadLibraryPermanently) as well - /// as ephemerally loaded libraries (constructors). - /// @throws std::string on error. - /// @brief Search through libraries for address of a symbol - /// - /// NOTE: This function is not thread safe. - /// - static void *SearchForAddressOfSymbol(const char *symbolName); - - /// @brief Convenience function for C++ophiles. - /// - /// NOTE: This function is not thread safe. - /// - static void *SearchForAddressOfSymbol(const std::string &symbolName) { - return SearchForAddressOfSymbol(symbolName.c_str()); - } - - /// This functions permanently adds the symbol \p symbolName with the - /// value \p symbolValue. These symbols are searched before any - /// libraries. - /// @brief Add searchable symbol/value pair. - /// - /// NOTE: This function is not thread safe. - /// - static void AddSymbol(const char *symbolName, void *symbolValue); - - /// @brief Convenience function for C++ophiles. - /// - /// NOTE: This function is not thread safe. - /// - static void AddSymbol(const std::string &symbolName, void *symbolValue) { - AddSymbol(symbolName.c_str(), symbolValue); - } - }; - -} // End sys namespace -} // End llvm namespace - -#endif // LLVM_SYSTEM_DYNAMIC_LIBRARY_H Removed: llvm/trunk/include/llvm/System/Errno.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/Errno.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/Errno.h (original) +++ llvm/trunk/include/llvm/System/Errno.h (removed) @@ -1,34 +0,0 @@ -//===- llvm/System/Errno.h - Portable+convenient errno handling -*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file declares some portable and convenient functions to deal with errno. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_ERRNO_H -#define LLVM_SYSTEM_ERRNO_H - -#include - -namespace llvm { -namespace sys { - -/// Returns a string representation of the errno value, using whatever -/// thread-safe variant of strerror() is available. Be sure to call this -/// immediately after the function that set errno, or errno may have been -/// overwritten by an intervening call. -std::string StrError(); - -/// Like the no-argument version above, but uses \p errnum instead of errno. -std::string StrError(int errnum); - -} // namespace sys -} // namespace llvm - -#endif // LLVM_SYSTEM_ERRNO_H Removed: llvm/trunk/include/llvm/System/FEnv.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/FEnv.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/FEnv.h (original) +++ llvm/trunk/include/llvm/System/FEnv.h (removed) @@ -1,56 +0,0 @@ -//===- llvm/System/FEnv.h - Host floating-point exceptions ------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file provides an operating system independent interface to -// floating-point exception interfaces. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_FENV_H -#define LLVM_SYSTEM_FENV_H - -#include "llvm/Config/config.h" -#include -#ifdef HAVE_FENV_H -#include -#endif - -// FIXME: Clang's #include handling apparently doesn't work for libstdc++'s -// fenv.h; see PR6907 for details. -#if defined(__clang__) && defined(_GLIBCXX_FENV_H) -#undef HAVE_FENV_H -#endif - -namespace llvm { -namespace sys { - -/// llvm_fenv_clearexcept - Clear the floating-point exception state. -static inline void llvm_fenv_clearexcept() { -#ifdef HAVE_FENV_H - feclearexcept(FE_ALL_EXCEPT); -#endif - errno = 0; -} - -/// llvm_fenv_testexcept - Test if a floating-point exception was raised. -static inline bool llvm_fenv_testexcept() { - int errno_val = errno; - if (errno_val == ERANGE || errno_val == EDOM) - return true; -#ifdef HAVE_FENV_H - if (fetestexcept(FE_ALL_EXCEPT & ~FE_INEXACT)) - return true; -#endif - return false; -} - -} // End sys namespace -} // End llvm namespace - -#endif Removed: llvm/trunk/include/llvm/System/Host.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/Host.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/Host.h (original) +++ llvm/trunk/include/llvm/System/Host.h (removed) @@ -1,66 +0,0 @@ -//===- llvm/System/Host.h - Host machine characteristics --------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// Methods for querying the nature of the host machine. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_HOST_H -#define LLVM_SYSTEM_HOST_H - -#include "llvm/ADT/StringMap.h" -#include - -namespace llvm { -namespace sys { - - inline bool isLittleEndianHost() { - union { - int i; - char c; - }; - i = 1; - return c; - } - - inline bool isBigEndianHost() { - return !isLittleEndianHost(); - } - - /// getHostTriple() - Return the target triple of the running - /// system. - /// - /// The target triple is a string in the format of: - /// CPU_TYPE-VENDOR-OPERATING_SYSTEM - /// or - /// CPU_TYPE-VENDOR-KERNEL-OPERATING_SYSTEM - std::string getHostTriple(); - - /// getHostCPUName - Get the LLVM name for the host CPU. The particular format - /// of the name is target dependent, and suitable for passing as -mcpu to the - /// target which matches the host. - /// - /// \return - The host CPU name, or empty if the CPU could not be determined. - std::string getHostCPUName(); - - /// getHostCPUFeatures - Get the LLVM names for the host CPU features. - /// The particular format of the names are target dependent, and suitable for - /// passing as -mattr to the target which matches the host. - /// - /// \param Features - A string mapping feature names to either - /// true (if enabled) or false (if disabled). This routine makes no guarantees - /// about exactly which features may appear in this map, except that they are - /// all valid LLVM feature names. - /// - /// \return - True on success. - bool getHostCPUFeatures(StringMap &Features); -} -} - -#endif Removed: llvm/trunk/include/llvm/System/IncludeFile.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/IncludeFile.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/IncludeFile.h (original) +++ llvm/trunk/include/llvm/System/IncludeFile.h (removed) @@ -1,79 +0,0 @@ -//===- llvm/System/IncludeFile.h - Ensure Linking Of Library ---*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file defines the FORCE_DEFINING_FILE_TO_BE_LINKED and DEFINE_FILE_FOR -// macros. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_INCLUDEFILE_H -#define LLVM_SYSTEM_INCLUDEFILE_H - -/// This macro is the public interface that IncludeFile.h exports. This gives -/// us the option to implement the "link the definition" capability in any -/// manner that we choose. All header files that depend on a specific .cpp -/// file being linked at run time should use this macro instead of the -/// IncludeFile class directly. -/// -/// For example, foo.h would use:
-/// FORCE_DEFINING_FILE_TO_BE_LINKED(foo)
-/// -/// And, foo.cp would use:
-/// DEFINING_FILE_FOR(foo)
-#ifdef __GNUC__ -// If the `used' attribute is available, use it to create a variable -// with an initializer that will force the linking of the defining file. -#define FORCE_DEFINING_FILE_TO_BE_LINKED(name) \ - namespace llvm { \ - extern const char name ## LinkVar; \ - __attribute__((used)) static const char *const name ## LinkObj = \ - &name ## LinkVar; \ - } -#else -// Otherwise use a constructor call. -#define FORCE_DEFINING_FILE_TO_BE_LINKED(name) \ - namespace llvm { \ - extern const char name ## LinkVar; \ - static const IncludeFile name ## LinkObj ( &name ## LinkVar ); \ - } -#endif - -/// This macro is the counterpart to FORCE_DEFINING_FILE_TO_BE_LINKED. It should -/// be used in a .cpp file to define the name referenced in a header file that -/// will cause linkage of the .cpp file. It should only be used at extern level. -#define DEFINING_FILE_FOR(name) \ - namespace llvm { const char name ## LinkVar = 0; } - -namespace llvm { - -/// This class is used in the implementation of FORCE_DEFINING_FILE_TO_BE_LINKED -/// macro to make sure that the implementation of a header file is included -/// into a tool that uses the header. This is solely -/// to overcome problems linking .a files and not getting the implementation -/// of compilation units we need. This is commonly an issue with the various -/// Passes but also occurs elsewhere in LLVM. We like to use .a files because -/// they link faster and provide the smallest executables. However, sometimes -/// those executables are too small, if the program doesn't reference something -/// that might be needed, especially by a loaded share object. This little class -/// helps to resolve that problem. The basic strategy is to use this class in -/// a header file and pass the address of a variable to the constructor. If the -/// variable is defined in the header file's corresponding .cpp file then all -/// tools/libraries that \#include the header file will require the .cpp as -/// well. -/// For example:
-/// extern int LinkMyCodeStub;
-/// static IncludeFile LinkMyModule(&LinkMyCodeStub);
-/// @brief Class to ensure linking of corresponding object file. -struct IncludeFile { - explicit IncludeFile(const void *); -}; - -} - -#endif Removed: llvm/trunk/include/llvm/System/LICENSE.TXT URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/LICENSE.TXT?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/LICENSE.TXT (original) +++ llvm/trunk/include/llvm/System/LICENSE.TXT (removed) @@ -1,6 +0,0 @@ -LLVM System Interface Library -------------------------------------------------------------------------------- -The LLVM System Interface Library is licensed under the Illinois Open Source -License and has the following additional copyright: - -Copyright (C) 2004 eXtensible Systems, Inc. Removed: llvm/trunk/include/llvm/System/Memory.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/Memory.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/Memory.h (original) +++ llvm/trunk/include/llvm/System/Memory.h (removed) @@ -1,96 +0,0 @@ -//===- llvm/System/Memory.h - Memory Support --------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file declares the llvm::sys::Memory class. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_MEMORY_H -#define LLVM_SYSTEM_MEMORY_H - -#include "llvm/System/DataTypes.h" -#include - -namespace llvm { -namespace sys { - - /// This class encapsulates the notion of a memory block which has an address - /// and a size. It is used by the Memory class (a friend) as the result of - /// various memory allocation operations. - /// @see Memory - /// @brief Memory block abstraction. - class MemoryBlock { - public: - MemoryBlock() : Address(0), Size(0) { } - MemoryBlock(void *addr, size_t size) : Address(addr), Size(size) { } - void *base() const { return Address; } - size_t size() const { return Size; } - private: - void *Address; ///< Address of first byte of memory area - size_t Size; ///< Size, in bytes of the memory area - friend class Memory; - }; - - /// This class provides various memory handling functions that manipulate - /// MemoryBlock instances. - /// @since 1.4 - /// @brief An abstraction for memory operations. - class Memory { - public: - /// This method allocates a block of Read/Write/Execute memory that is - /// suitable for executing dynamically generated code (e.g. JIT). An - /// attempt to allocate \p NumBytes bytes of virtual memory is made. - /// \p NearBlock may point to an existing allocation in which case - /// an attempt is made to allocate more memory near the existing block. - /// - /// On success, this returns a non-null memory block, otherwise it returns - /// a null memory block and fills in *ErrMsg. - /// - /// @brief Allocate Read/Write/Execute memory. - static MemoryBlock AllocateRWX(size_t NumBytes, - const MemoryBlock *NearBlock, - std::string *ErrMsg = 0); - - /// This method releases a block of Read/Write/Execute memory that was - /// allocated with the AllocateRWX method. It should not be used to - /// release any memory block allocated any other way. - /// - /// On success, this returns false, otherwise it returns true and fills - /// in *ErrMsg. - /// @brief Release Read/Write/Execute memory. - static bool ReleaseRWX(MemoryBlock &block, std::string *ErrMsg = 0); - - - /// InvalidateInstructionCache - Before the JIT can run a block of code - /// that has been emitted it must invalidate the instruction cache on some - /// platforms. - static void InvalidateInstructionCache(const void *Addr, size_t Len); - - /// setExecutable - Before the JIT can run a block of code, it has to be - /// given read and executable privilege. Return true if it is already r-x - /// or the system is able to change its previlege. - static bool setExecutable (MemoryBlock &M, std::string *ErrMsg = 0); - - /// setWritable - When adding to a block of code, the JIT may need - /// to mark a block of code as RW since the protections are on page - /// boundaries, and the JIT internal allocations are not page aligned. - static bool setWritable (MemoryBlock &M, std::string *ErrMsg = 0); - - /// setRangeExecutable - Mark the page containing a range of addresses - /// as executable. - static bool setRangeExecutable(const void *Addr, size_t Size); - - /// setRangeWritable - Mark the page containing a range of addresses - /// as writable. - static bool setRangeWritable(const void *Addr, size_t Size); - }; -} -} - -#endif Removed: llvm/trunk/include/llvm/System/Mutex.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/Mutex.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/Mutex.h (original) +++ llvm/trunk/include/llvm/System/Mutex.h (removed) @@ -1,154 +0,0 @@ -//===- llvm/System/Mutex.h - Mutex Operating System Concept -----*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file declares the llvm::sys::Mutex class. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_MUTEX_H -#define LLVM_SYSTEM_MUTEX_H - -#include "llvm/System/Threading.h" -#include - -namespace llvm -{ - namespace sys - { - /// @brief Platform agnostic Mutex class. - class MutexImpl - { - /// @name Constructors - /// @{ - public: - - /// Initializes the lock but doesn't acquire it. if \p recursive is set - /// to false, the lock will not be recursive which makes it cheaper but - /// also more likely to deadlock (same thread can't acquire more than - /// once). - /// @brief Default Constructor. - explicit MutexImpl(bool recursive = true); - - /// Releases and removes the lock - /// @brief Destructor - ~MutexImpl(); - - /// @} - /// @name Methods - /// @{ - public: - - /// Attempts to unconditionally acquire the lock. If the lock is held by - /// another thread, this method will wait until it can acquire the lock. - /// @returns false if any kind of error occurs, true otherwise. - /// @brief Unconditionally acquire the lock. - bool acquire(); - - /// Attempts to release the lock. If the lock is held by the current - /// thread, the lock is released allowing other threads to acquire the - /// lock. - /// @returns false if any kind of error occurs, true otherwise. - /// @brief Unconditionally release the lock. - bool release(); - - /// Attempts to acquire the lock without blocking. If the lock is not - /// available, this function returns false quickly (without blocking). If - /// the lock is available, it is acquired. - /// @returns false if any kind of error occurs or the lock is not - /// available, true otherwise. - /// @brief Try to acquire the lock. - bool tryacquire(); - - //@} - /// @name Platform Dependent Data - /// @{ - private: - void* data_; ///< We don't know what the data will be - - /// @} - /// @name Do Not Implement - /// @{ - private: - MutexImpl(const MutexImpl & original); - void operator=(const MutexImpl &); - /// @} - }; - - - /// SmartMutex - A mutex with a compile time constant parameter that - /// indicates whether this mutex should become a no-op when we're not - /// running in multithreaded mode. - template - class SmartMutex : public MutexImpl { - unsigned acquired; - bool recursive; - public: - explicit SmartMutex(bool rec = true) : - MutexImpl(rec), acquired(0), recursive(rec) { } - - bool acquire() { - if (!mt_only || llvm_is_multithreaded()) { - return MutexImpl::acquire(); - } else { - // Single-threaded debugging code. This would be racy in - // multithreaded mode, but provides not sanity checks in single - // threaded mode. - assert((recursive || acquired == 0) && "Lock already acquired!!"); - ++acquired; - return true; - } - } - - bool release() { - if (!mt_only || llvm_is_multithreaded()) { - return MutexImpl::release(); - } else { - // Single-threaded debugging code. This would be racy in - // multithreaded mode, but provides not sanity checks in single - // threaded mode. - assert(((recursive && acquired) || (acquired == 1)) && - "Lock not acquired before release!"); - --acquired; - return true; - } - } - - bool tryacquire() { - if (!mt_only || llvm_is_multithreaded()) - return MutexImpl::tryacquire(); - else return true; - } - - private: - SmartMutex(const SmartMutex & original); - void operator=(const SmartMutex &); - }; - - /// Mutex - A standard, always enforced mutex. - typedef SmartMutex Mutex; - - template - class SmartScopedLock { - SmartMutex& mtx; - - public: - SmartScopedLock(SmartMutex& m) : mtx(m) { - mtx.acquire(); - } - - ~SmartScopedLock() { - mtx.release(); - } - }; - - typedef SmartScopedLock ScopedLock; - } -} - -#endif Removed: llvm/trunk/include/llvm/System/Path.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/Path.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/Path.h (original) +++ llvm/trunk/include/llvm/System/Path.h (removed) @@ -1,738 +0,0 @@ -//===- llvm/System/Path.h - Path Operating System Concept -------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file declares the llvm::sys::Path class. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_PATH_H -#define LLVM_SYSTEM_PATH_H - -#include "llvm/ADT/StringRef.h" -#include "llvm/System/TimeValue.h" -#include -#include -#include - -namespace llvm { -namespace sys { - - /// This structure provides basic file system information about a file. It - /// is patterned after the stat(2) Unix operating system call but made - /// platform independent and eliminates many of the unix-specific fields. - /// However, to support llvm-ar, the mode, user, and group fields are - /// retained. These pertain to unix security and may not have a meaningful - /// value on non-Unix platforms. However, the other fields should - /// always be applicable on all platforms. The structure is filled in by - /// the PathWithStatus class. - /// @brief File status structure - class FileStatus { - public: - uint64_t fileSize; ///< Size of the file in bytes - TimeValue modTime; ///< Time of file's modification - uint32_t mode; ///< Mode of the file, if applicable - uint32_t user; ///< User ID of owner, if applicable - uint32_t group; ///< Group ID of owner, if applicable - uint64_t uniqueID; ///< A number to uniquely ID this file - bool isDir : 1; ///< True if this is a directory. - bool isFile : 1; ///< True if this is a file. - - FileStatus() : fileSize(0), modTime(0,0), mode(0777), user(999), - group(999), uniqueID(0), isDir(false), isFile(false) { } - - TimeValue getTimestamp() const { return modTime; } - uint64_t getSize() const { return fileSize; } - uint32_t getMode() const { return mode; } - uint32_t getUser() const { return user; } - uint32_t getGroup() const { return group; } - uint64_t getUniqueID() const { return uniqueID; } - }; - - /// This class provides an abstraction for the path to a file or directory - /// in the operating system's filesystem and provides various basic operations - /// on it. Note that this class only represents the name of a path to a file - /// or directory which may or may not be valid for a given machine's file - /// system. The class is patterned after the java.io.File class with various - /// extensions and several omissions (not relevant to LLVM). A Path object - /// ensures that the path it encapsulates is syntactically valid for the - /// operating system it is running on but does not ensure correctness for - /// any particular file system. That is, a syntactically valid path might - /// specify path components that do not exist in the file system and using - /// such a Path to act on the file system could produce errors. There is one - /// invalid Path value which is permitted: the empty path. The class should - /// never allow a syntactically invalid non-empty path name to be assigned. - /// Empty paths are required in order to indicate an error result in some - /// situations. If the path is empty, the isValid operation will return - /// false. All operations will fail if isValid is false. Operations that - /// change the path will either return false if it would cause a syntactically - /// invalid path name (in which case the Path object is left unchanged) or - /// throw an std::string exception indicating the error. The methods are - /// grouped into four basic categories: Path Accessors (provide information - /// about the path without accessing disk), Disk Accessors (provide - /// information about the underlying file or directory), Path Mutators - /// (change the path information, not the disk), and Disk Mutators (change - /// the disk file/directory referenced by the path). The Disk Mutator methods - /// all have the word "disk" embedded in their method name to reinforce the - /// notion that the operation modifies the file system. - /// @since 1.4 - /// @brief An abstraction for operating system paths. - class Path { - /// @name Constructors - /// @{ - public: - /// Construct a path to the root directory of the file system. The root - /// directory is a top level directory above which there are no more - /// directories. For example, on UNIX, the root directory is /. On Windows - /// it is file:///. Other operating systems may have different notions of - /// what the root directory is or none at all. In that case, a consistent - /// default root directory will be used. - static Path GetRootDirectory(); - - /// Construct a path to a unique temporary directory that is created in - /// a "standard" place for the operating system. The directory is - /// guaranteed to be created on exit from this function. If the directory - /// cannot be created, the function will throw an exception. - /// @returns an invalid path (empty) on error - /// @param ErrMsg Optional place for an error message if an error occurs - /// @brief Constrct a path to an new, unique, existing temporary - /// directory. - static Path GetTemporaryDirectory(std::string* ErrMsg = 0); - - /// Construct a vector of sys::Path that contains the "standard" system - /// library paths suitable for linking into programs. - /// @brief Construct a path to the system library directory - static void GetSystemLibraryPaths(std::vector& Paths); - - /// Construct a vector of sys::Path that contains the "standard" bitcode - /// library paths suitable for linking into an llvm program. This function - /// *must* return the value of LLVM_LIB_SEARCH_PATH as well as the value - /// of LLVM_LIBDIR. It also must provide the System library paths as - /// returned by GetSystemLibraryPaths. - /// @see GetSystemLibraryPaths - /// @brief Construct a list of directories in which bitcode could be - /// found. - static void GetBitcodeLibraryPaths(std::vector& Paths); - - /// Find the path to a library using its short name. Use the system - /// dependent library paths to locate the library. - /// @brief Find a library. - static Path FindLibrary(std::string& short_name); - - /// Construct a path to the default LLVM configuration directory. The - /// implementation must ensure that this is a well-known (same on many - /// systems) directory in which llvm configuration files exist. For - /// example, on Unix, the /etc/llvm directory has been selected. - /// @brief Construct a path to the default LLVM configuration directory - static Path GetLLVMDefaultConfigDir(); - - /// Construct a path to the LLVM installed configuration directory. The - /// implementation must ensure that this refers to the "etc" directory of - /// the LLVM installation. This is the location where configuration files - /// will be located for a particular installation of LLVM on a machine. - /// @brief Construct a path to the LLVM installed configuration directory - static Path GetLLVMConfigDir(); - - /// Construct a path to the current user's home directory. The - /// implementation must use an operating system specific mechanism for - /// determining the user's home directory. For example, the environment - /// variable "HOME" could be used on Unix. If a given operating system - /// does not have the concept of a user's home directory, this static - /// constructor must provide the same result as GetRootDirectory. - /// @brief Construct a path to the current user's "home" directory - static Path GetUserHomeDirectory(); - - /// Construct a path to the current directory for the current process. - /// @returns The current working directory. - /// @brief Returns the current working directory. - static Path GetCurrentDirectory(); - - /// Return the suffix commonly used on file names that contain an - /// executable. - /// @returns The executable file suffix for the current platform. - /// @brief Return the executable file suffix. - static StringRef GetEXESuffix(); - - /// Return the suffix commonly used on file names that contain a shared - /// object, shared archive, or dynamic link library. Such files are - /// linked at runtime into a process and their code images are shared - /// between processes. - /// @returns The dynamic link library suffix for the current platform. - /// @brief Return the dynamic link library suffix. - static StringRef GetDLLSuffix(); - - /// GetMainExecutable - Return the path to the main executable, given the - /// value of argv[0] from program startup and the address of main itself. - /// In extremis, this function may fail and return an empty path. - static Path GetMainExecutable(const char *argv0, void *MainAddr); - - /// This is one of the very few ways in which a path can be constructed - /// with a syntactically invalid name. The only *legal* invalid name is an - /// empty one. Other invalid names are not permitted. Empty paths are - /// provided so that they can be used to indicate null or error results in - /// other lib/System functionality. - /// @brief Construct an empty (and invalid) path. - Path() : path() {} - Path(const Path &that) : path(that.path) {} - - /// This constructor will accept a char* or std::string as a path. No - /// checking is done on this path to determine if it is valid. To - /// determine validity of the path, use the isValid method. - /// @param p The path to assign. - /// @brief Construct a Path from a string. - explicit Path(StringRef p); - - /// This constructor will accept a character range as a path. No checking - /// is done on this path to determine if it is valid. To determine - /// validity of the path, use the isValid method. - /// @param StrStart A pointer to the first character of the path name - /// @param StrLen The length of the path name at StrStart - /// @brief Construct a Path from a string. - Path(const char *StrStart, unsigned StrLen); - - /// @} - /// @name Operators - /// @{ - public: - /// Makes a copy of \p that to \p this. - /// @returns \p this - /// @brief Assignment Operator - Path &operator=(const Path &that) { - path = that.path; - return *this; - } - - /// Makes a copy of \p that to \p this. - /// @param that A StringRef denoting the path - /// @returns \p this - /// @brief Assignment Operator - Path &operator=(StringRef that); - - /// Compares \p this Path with \p that Path for equality. - /// @returns true if \p this and \p that refer to the same thing. - /// @brief Equality Operator - bool operator==(const Path &that) const; - - /// Compares \p this Path with \p that Path for inequality. - /// @returns true if \p this and \p that refer to different things. - /// @brief Inequality Operator - bool operator!=(const Path &that) const { return !(*this == that); } - - /// Determines if \p this Path is less than \p that Path. This is required - /// so that Path objects can be placed into ordered collections (e.g. - /// std::map). The comparison is done lexicographically as defined by - /// the std::string::compare method. - /// @returns true if \p this path is lexicographically less than \p that. - /// @brief Less Than Operator - bool operator<(const Path& that) const; - - /// @} - /// @name Path Accessors - /// @{ - public: - /// This function will use an operating system specific algorithm to - /// determine if the current value of \p this is a syntactically valid - /// path name for the operating system. The path name does not need to - /// exist, validity is simply syntactical. Empty paths are always invalid. - /// @returns true iff the path name is syntactically legal for the - /// host operating system. - /// @brief Determine if a path is syntactically valid or not. - bool isValid() const; - - /// This function determines if the contents of the path name are empty. - /// That is, the path name has a zero length. This does NOT determine if - /// if the file is empty. To get the length of the file itself, Use the - /// PathWithStatus::getFileStatus() method and then the getSize() method - /// on the returned FileStatus object. - /// @returns true iff the path is empty. - /// @brief Determines if the path name is empty (invalid). - bool isEmpty() const { return path.empty(); } - - /// This function returns the last component of the path name. The last - /// component is the file or directory name occuring after the last - /// directory separator. If no directory separator is present, the entire - /// path name is returned (i.e. same as toString). - /// @returns StringRef containing the last component of the path name. - /// @brief Returns the last component of the path name. - StringRef getLast() const; - - /// This function strips off the path and suffix of the file or directory - /// name and returns just the basename. For example /a/foo.bar would cause - /// this function to return "foo". - /// @returns StringRef containing the basename of the path - /// @brief Get the base name of the path - StringRef getBasename() const; - - /// This function strips off the suffix of the path beginning with the - /// path separator ('/' on Unix, '\' on Windows) and returns the result. - StringRef getDirname() const; - - /// This function strips off the path and basename(up to and - /// including the last dot) of the file or directory name and - /// returns just the suffix. For example /a/foo.bar would cause - /// this function to return "bar". - /// @returns StringRef containing the suffix of the path - /// @brief Get the suffix of the path - StringRef getSuffix() const; - - /// Obtain a 'C' string for the path name. - /// @returns a 'C' string containing the path name. - /// @brief Returns the path as a C string. - const char *c_str() const { return path.c_str(); } - const std::string &str() const { return path; } - - - /// size - Return the length in bytes of this path name. - size_t size() const { return path.size(); } - - /// empty - Returns true if the path is empty. - unsigned empty() const { return path.empty(); } - - /// @} - /// @name Disk Accessors - /// @{ - public: - /// This function determines if the path name is absolute, as opposed to - /// relative. - /// @brief Determine if the path is absolute. - bool isAbsolute() const; - - /// This function determines if the path name is absolute, as opposed to - /// relative. - /// @brief Determine if the path is absolute. - static bool isAbsolute(const char *NameStart, unsigned NameLen); - - /// This function opens the file associated with the path name provided by - /// the Path object and reads its magic number. If the magic number at the - /// start of the file matches \p magic, true is returned. In all other - /// cases (file not found, file not accessible, etc.) it returns false. - /// @returns true if the magic number of the file matches \p magic. - /// @brief Determine if file has a specific magic number - bool hasMagicNumber(StringRef magic) const; - - /// This function retrieves the first \p len bytes of the file associated - /// with \p this. These bytes are returned as the "magic number" in the - /// \p Magic parameter. - /// @returns true if the Path is a file and the magic number is retrieved, - /// false otherwise. - /// @brief Get the file's magic number. - bool getMagicNumber(std::string& Magic, unsigned len) const; - - /// This function determines if the path name in the object references an - /// archive file by looking at its magic number. - /// @returns true if the file starts with the magic number for an archive - /// file. - /// @brief Determine if the path references an archive file. - bool isArchive() const; - - /// This function determines if the path name in the object references an - /// LLVM Bitcode file by looking at its magic number. - /// @returns true if the file starts with the magic number for LLVM - /// bitcode files. - /// @brief Determine if the path references a bitcode file. - bool isBitcodeFile() const; - - /// This function determines if the path name in the object references a - /// native Dynamic Library (shared library, shared object) by looking at - /// the file's magic number. The Path object must reference a file, not a - /// directory. - /// @returns true if the file starts with the magic number for a native - /// shared library. - /// @brief Determine if the path references a dynamic library. - bool isDynamicLibrary() const; - - /// This function determines if the path name in the object references a - /// native object file by looking at it's magic number. The term object - /// file is defined as "an organized collection of separate, named - /// sequences of binary data." This covers the obvious file formats such - /// as COFF and ELF, but it also includes llvm ir bitcode, archives, - /// libraries, etc... - /// @returns true if the file starts with the magic number for an object - /// file. - /// @brief Determine if the path references an object file. - bool isObjectFile() const; - - /// This function determines if the path name references an existing file - /// or directory in the file system. - /// @returns true if the pathname references an existing file or - /// directory. - /// @brief Determines if the path is a file or directory in - /// the file system. - bool exists() const; - - /// This function determines if the path name references an - /// existing directory. - /// @returns true if the pathname references an existing directory. - /// @brief Determines if the path is a directory in the file system. - bool isDirectory() const; - - /// This function determines if the path name references an - /// existing symbolic link. - /// @returns true if the pathname references an existing symlink. - /// @brief Determines if the path is a symlink in the file system. - bool isSymLink() const; - - /// This function determines if the path name references a readable file - /// or directory in the file system. This function checks for - /// the existence and readability (by the current program) of the file - /// or directory. - /// @returns true if the pathname references a readable file. - /// @brief Determines if the path is a readable file or directory - /// in the file system. - bool canRead() const; - - /// This function determines if the path name references a writable file - /// or directory in the file system. This function checks for the - /// existence and writability (by the current program) of the file or - /// directory. - /// @returns true if the pathname references a writable file. - /// @brief Determines if the path is a writable file or directory - /// in the file system. - bool canWrite() const; - - /// This function checks that what we're trying to work only on a regular - /// file. Check for things like /dev/null, any block special file, or - /// other things that aren't "regular" regular files. - /// @returns true if the file is S_ISREG. - /// @brief Determines if the file is a regular file - bool isRegularFile() const; - - /// This function determines if the path name references an executable - /// file in the file system. This function checks for the existence and - /// executability (by the current program) of the file. - /// @returns true if the pathname references an executable file. - /// @brief Determines if the path is an executable file in the file - /// system. - bool canExecute() const; - - /// This function builds a list of paths that are the names of the - /// files and directories in a directory. - /// @returns true if an error occurs, true otherwise - /// @brief Build a list of directory's contents. - bool getDirectoryContents( - std::set &paths, ///< The resulting list of file & directory names - std::string* ErrMsg ///< Optional place to return an error message. - ) const; - - /// @} - /// @name Path Mutators - /// @{ - public: - /// The path name is cleared and becomes empty. This is an invalid - /// path name but is the *only* invalid path name. This is provided - /// so that path objects can be used to indicate the lack of a - /// valid path being found. - /// @brief Make the path empty. - void clear() { path.clear(); } - - /// This method sets the Path object to \p unverified_path. This can fail - /// if the \p unverified_path does not pass the syntactic checks of the - /// isValid() method. If verification fails, the Path object remains - /// unchanged and false is returned. Otherwise true is returned and the - /// Path object takes on the path value of \p unverified_path - /// @returns true if the path was set, false otherwise. - /// @param unverified_path The path to be set in Path object. - /// @brief Set a full path from a StringRef - bool set(StringRef unverified_path); - - /// One path component is removed from the Path. If only one component is - /// present in the path, the Path object becomes empty. If the Path object - /// is empty, no change is made. - /// @returns false if the path component could not be removed. - /// @brief Removes the last directory component of the Path. - bool eraseComponent(); - - /// The \p component is added to the end of the Path if it is a legal - /// name for the operating system. A directory separator will be added if - /// needed. - /// @returns false if the path component could not be added. - /// @brief Appends one path component to the Path. - bool appendComponent(StringRef component); - - /// A period and the \p suffix are appended to the end of the pathname. - /// The precondition for this function is that the Path reference a file - /// name (i.e. isFile() returns true). If the Path is not a file, no - /// action is taken and the function returns false. If the path would - /// become invalid for the host operating system, false is returned. When - /// the \p suffix is empty, no action is performed. - /// @returns false if the suffix could not be added, true if it was. - /// @brief Adds a period and the \p suffix to the end of the pathname. - bool appendSuffix(StringRef suffix); - - /// The suffix of the filename is erased. The suffix begins with and - /// includes the last . character in the filename after the last directory - /// separator and extends until the end of the name. If no . character is - /// after the last directory separator, then the file name is left - /// unchanged (i.e. it was already without a suffix) but the function - /// returns false. - /// @returns false if there was no suffix to remove, true otherwise. - /// @brief Remove the suffix from a path name. - bool eraseSuffix(); - - /// The current Path name is made unique in the file system. Upon return, - /// the Path will have been changed to make a unique file in the file - /// system or it will not have been changed if the current path name is - /// already unique. - /// @throws std::string if an unrecoverable error occurs. - /// @brief Make the current path name unique in the file system. - bool makeUnique( bool reuse_current /*= true*/, std::string* ErrMsg ); - - /// The current Path name is made absolute by prepending the - /// current working directory if necessary. - void makeAbsolute(); - - /// @} - /// @name Disk Mutators - /// @{ - public: - /// This method attempts to make the file referenced by the Path object - /// available for reading so that the canRead() method will return true. - /// @brief Make the file readable; - bool makeReadableOnDisk(std::string* ErrMsg = 0); - - /// This method attempts to make the file referenced by the Path object - /// available for writing so that the canWrite() method will return true. - /// @brief Make the file writable; - bool makeWriteableOnDisk(std::string* ErrMsg = 0); - - /// This method attempts to make the file referenced by the Path object - /// available for execution so that the canExecute() method will return - /// true. - /// @brief Make the file readable; - bool makeExecutableOnDisk(std::string* ErrMsg = 0); - - /// This method allows the last modified time stamp and permission bits - /// to be set on the disk object referenced by the Path. - /// @throws std::string if an error occurs. - /// @returns true on error. - /// @brief Set the status information. - bool setStatusInfoOnDisk(const FileStatus &SI, - std::string *ErrStr = 0) const; - - /// This method attempts to create a directory in the file system with the - /// same name as the Path object. The \p create_parents parameter controls - /// whether intermediate directories are created or not. if \p - /// create_parents is true, then an attempt will be made to create all - /// intermediate directories, as needed. If \p create_parents is false, - /// then only the final directory component of the Path name will be - /// created. The created directory will have no entries. - /// @returns true if the directory could not be created, false otherwise - /// @brief Create the directory this Path refers to. - bool createDirectoryOnDisk( - bool create_parents = false, ///< Determines whether non-existent - ///< directory components other than the last one (the "parents") - ///< are created or not. - std::string* ErrMsg = 0 ///< Optional place to put error messages. - ); - - /// This method attempts to create a file in the file system with the same - /// name as the Path object. The intermediate directories must all exist - /// at the time this method is called. Use createDirectoriesOnDisk to - /// accomplish that. The created file will be empty upon return from this - /// function. - /// @returns true if the file could not be created, false otherwise. - /// @brief Create the file this Path refers to. - bool createFileOnDisk( - std::string* ErrMsg = 0 ///< Optional place to put error messages. - ); - - /// This is like createFile except that it creates a temporary file. A - /// unique temporary file name is generated based on the contents of - /// \p this before the call. The new name is assigned to \p this and the - /// file is created. Note that this will both change the Path object - /// *and* create the corresponding file. This function will ensure that - /// the newly generated temporary file name is unique in the file system. - /// @returns true if the file couldn't be created, false otherwise. - /// @brief Create a unique temporary file - bool createTemporaryFileOnDisk( - bool reuse_current = false, ///< When set to true, this parameter - ///< indicates that if the current file name does not exist then - ///< it will be used without modification. - std::string* ErrMsg = 0 ///< Optional place to put error messages - ); - - /// This method renames the file referenced by \p this as \p newName. The - /// file referenced by \p this must exist. The file referenced by - /// \p newName does not need to exist. - /// @returns true on error, false otherwise - /// @brief Rename one file as another. - bool renamePathOnDisk(const Path& newName, std::string* ErrMsg); - - /// This method attempts to destroy the file or directory named by the - /// last component of the Path. If the Path refers to a directory and the - /// \p destroy_contents is false, an attempt will be made to remove just - /// the directory (the final Path component). If \p destroy_contents is - /// true, an attempt will be made to remove the entire contents of the - /// directory, recursively. If the Path refers to a file, the - /// \p destroy_contents parameter is ignored. - /// @param destroy_contents Indicates whether the contents of a destroyed - /// @param Err An optional string to receive an error message. - /// directory should also be destroyed (recursively). - /// @returns false if the file/directory was destroyed, true on error. - /// @brief Removes the file or directory from the filesystem. - bool eraseFromDisk(bool destroy_contents = false, - std::string *Err = 0) const; - - - /// MapInFilePages - This is a low level system API to map in the file - /// that is currently opened as FD into the current processes' address - /// space for read only access. This function may return null on failure - /// or if the system cannot provide the following constraints: - /// 1) The pages must be valid after the FD is closed, until - /// UnMapFilePages is called. - /// 2) Any padding after the end of the file must be zero filled, if - /// present. - /// 3) The pages must be contiguous. - /// - /// This API is not intended for general use, clients should use - /// MemoryBuffer::getFile instead. - static const char *MapInFilePages(int FD, uint64_t FileSize); - - /// UnMapFilePages - Free pages mapped into the current process by - /// MapInFilePages. - /// - /// This API is not intended for general use, clients should use - /// MemoryBuffer::getFile instead. - static void UnMapFilePages(const char *Base, uint64_t FileSize); - - /// @} - /// @name Data - /// @{ - protected: - // Our win32 implementation relies on this string being mutable. - mutable std::string path; ///< Storage for the path name. - - - /// @} - }; - - /// This class is identical to Path class except it allows you to obtain the - /// file status of the Path as well. The reason for the distinction is one of - /// efficiency. First, the file status requires additional space and the space - /// is incorporated directly into PathWithStatus without an additional malloc. - /// Second, obtaining status information is an expensive operation on most - /// operating systems so we want to be careful and explicity about where we - /// allow this operation in LLVM. - /// @brief Path with file status class. - class PathWithStatus : public Path { - /// @name Constructors - /// @{ - public: - /// @brief Default constructor - PathWithStatus() : Path(), status(), fsIsValid(false) {} - - /// @brief Copy constructor - PathWithStatus(const PathWithStatus &that) - : Path(static_cast(that)), status(that.status), - fsIsValid(that.fsIsValid) {} - - /// This constructor allows construction from a Path object - /// @brief Path constructor - PathWithStatus(const Path &other) - : Path(other), status(), fsIsValid(false) {} - - /// This constructor will accept a char* or std::string as a path. No - /// checking is done on this path to determine if it is valid. To - /// determine validity of the path, use the isValid method. - /// @brief Construct a Path from a string. - explicit PathWithStatus( - StringRef p ///< The path to assign. - ) : Path(p), status(), fsIsValid(false) {} - - /// This constructor will accept a character range as a path. No checking - /// is done on this path to determine if it is valid. To determine - /// validity of the path, use the isValid method. - /// @brief Construct a Path from a string. - explicit PathWithStatus( - const char *StrStart, ///< Pointer to the first character of the path - unsigned StrLen ///< Length of the path. - ) : Path(StrStart, StrLen), status(), fsIsValid(false) {} - - /// Makes a copy of \p that to \p this. - /// @returns \p this - /// @brief Assignment Operator - PathWithStatus &operator=(const PathWithStatus &that) { - static_cast(*this) = static_cast(that); - status = that.status; - fsIsValid = that.fsIsValid; - return *this; - } - - /// Makes a copy of \p that to \p this. - /// @returns \p this - /// @brief Assignment Operator - PathWithStatus &operator=(const Path &that) { - static_cast(*this) = static_cast(that); - fsIsValid = false; - return *this; - } - - /// @} - /// @name Methods - /// @{ - public: - /// This function returns status information about the file. The type of - /// path (file or directory) is updated to reflect the actual contents - /// of the file system. - /// @returns 0 on failure, with Error explaining why (if non-zero) - /// @returns a pointer to a FileStatus structure on success. - /// @brief Get file status. - const FileStatus *getFileStatus( - bool forceUpdate = false, ///< Force an update from the file system - std::string *Error = 0 ///< Optional place to return an error msg. - ) const; - - /// @} - /// @name Data - /// @{ - private: - mutable FileStatus status; ///< Status information. - mutable bool fsIsValid; ///< Whether we've obtained it or not - - /// @} - }; - - /// This enumeration delineates the kinds of files that LLVM knows about. - enum LLVMFileType { - Unknown_FileType = 0, ///< Unrecognized file - Bitcode_FileType, ///< Bitcode file - Archive_FileType, ///< ar style archive file - ELF_Relocatable_FileType, ///< ELF Relocatable object file - ELF_Executable_FileType, ///< ELF Executable image - ELF_SharedObject_FileType, ///< ELF dynamically linked shared lib - ELF_Core_FileType, ///< ELF core image - Mach_O_Object_FileType, ///< Mach-O Object file - Mach_O_Executable_FileType, ///< Mach-O Executable - Mach_O_FixedVirtualMemorySharedLib_FileType, ///< Mach-O Shared Lib, FVM - Mach_O_Core_FileType, ///< Mach-O Core File - Mach_O_PreloadExecutable_FileType, ///< Mach-O Preloaded Executable - Mach_O_DynamicallyLinkedSharedLib_FileType, ///< Mach-O dynlinked shared lib - Mach_O_DynamicLinker_FileType, ///< The Mach-O dynamic linker - Mach_O_Bundle_FileType, ///< Mach-O Bundle file - Mach_O_DynamicallyLinkedSharedLibStub_FileType, ///< Mach-O Shared lib stub - COFF_FileType ///< COFF object file or lib - }; - - /// This utility function allows any memory block to be examined in order - /// to determine its file type. - LLVMFileType IdentifyFileType(const char*magic, unsigned length); - - /// This function can be used to copy the file specified by Src to the - /// file specified by Dest. If an error occurs, Dest is removed. - /// @returns true if an error occurs, false otherwise - /// @brief Copy one file to another. - bool CopyFile(const Path& Dest, const Path& Src, std::string* ErrMsg); - - /// This is the OS-specific path separator: a colon on Unix or a semicolon - /// on Windows. - extern const char PathSeparator; -} - -} - -#endif Removed: llvm/trunk/include/llvm/System/PathV2.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/PathV2.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/PathV2.h (original) +++ llvm/trunk/include/llvm/System/PathV2.h (removed) @@ -1,979 +0,0 @@ -//===- llvm/System/PathV2.h - Path Operating System Concept -----*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file declares the llvm::sys::path namespace. It is designed after -// TR2/boost filesystem (v3), but modified to remove exception handling and the -// path class. -// -// All functions return an error_code and their actual work via the last out -// argument. The out argument is defined if and only if errc::success is -// returned. A function may return any error code in the generic or system -// category. However, they shall be equivalent to any error conditions listed -// in each functions respective documentation if the condition applies. [ note: -// this does not guarantee that error_code will be in the set of explicitly -// listed codes, but it does guarantee that if any of the explicitly listed -// errors occur, the correct error_code will be used ]. All functions may -// return errc::not_enough_memory if there is not enough memory to complete the -// operation. -// -//===----------------------------------------------------------------------===// - -#include "llvm/ADT/SmallString.h" -#include "llvm/System/DataTypes.h" -#include "llvm/System/system_error.h" -#include -#include -#include - -namespace llvm { - -// Forward decls. -class StringRef; -class Twine; - -namespace sys { -namespace path { - -/// @name Lexical Component Iterator -/// @{ - -/// @brief Path iterator. -/// -/// This is a bidirectional iterator that iterates over the individual -/// components in \a path. The forward traversal order is as follows: -/// * The root-name element, if present. -/// * The root-directory element, if present. -/// * Each successive filename element, if present. -/// * Dot, if one or more trailing non-root slash characters are present. -/// The backwards traversal order is the reverse of forward traversal. -/// -/// Iteration examples. Each component is separated by ',': -/// / => / -/// /foo => /,foo -/// foo/ => foo,. -/// /foo/bar => /,foo,bar -/// ../ => ..,. -/// C:\foo\bar => C:,/,foo,bar -/// -class const_iterator { - StringRef Path; //< The entire path. - StringRef Component; //< The current component. - -public: - typedef const StringRef value_type; - typedef value_type &reference; - typedef value_type *pointer; - typedef std::bidirectional_iterator_tag iterator_category; - reference operator*() const; - pointer operator->() const; - const_iterator &operator++(); // preincrement - const_iterator &operator++(int); // postincrement - const_iterator &operator--(); // predecrement - const_iterator &operator--(int); // postdecrement - bool operator==(const const_iterator &RHS) const; - bool operator!=(const const_iterator &RHS) const; - - const_iterator(); //< Default construct end iterator. - const_iterator(const StringRef &path); -}; - -/// @} -/// @name Lexical Modifiers -/// @{ - -/// @brief Make \a path an absolute path. -/// -/// Makes \a path absolute using the current directory if it is not already. An -/// empty \a path will result in the current directory. -/// -/// /absolute/path => /absolute/path -/// relative/../path => /path -/// -/// @param path A path that is modified to be an absolute path. -/// @returns errc::success if \a path has been made absolute, otherwise a -/// platform specific error_code. -error_code make_absolute(SmallVectorImpl &path); - -/// @brief Remove the last component from \a path if it exists. -/// -/// directory/filename.cpp => directory/ -/// directory/ => directory/ -/// -/// @param path A path that is modified to not have a file component. -/// @returns errc::success if \a path's file name has been removed (or there was -/// not one to begin with), otherwise a platform specific error_code. -error_code remove_filename(SmallVectorImpl &path); - -/// @brief Replace the file extension of \a path with \a extension. -/// -/// ./filename.cpp => ./filename.extension -/// ./filename => ./filename.extension -/// ./ => ? TODO: decide what semantics this has. -/// -/// @param path A path that has its extension replaced with \a extension. -/// @param extension The extension to be added. It may be empty. It may also -/// optionally start with a '.', if it does not, one will be -/// prepended. -/// @returns errc::success if \a path's extension has been replaced, otherwise a -/// platform specific error_code. -error_code replace_extension(SmallVectorImpl &path, - const Twine &extension); - -/// @brief Append to path. -/// -/// /foo + bar/f => /foo/bar/f -/// /foo/ + bar/f => /foo/bar/f -/// foo + bar/f => foo/bar/f -/// -/// @param path Set to \a path + \a component. -/// @param component The component to be appended to \a path. -/// @returns errc::success if \a component has been appended to \a path, -/// otherwise a platform specific error_code. -error_code append(SmallVectorImpl &path, const Twine &component); - -/// @brief Append to path. -/// -/// /foo + [bar,f] => /foo/bar/f -/// /foo/ + [bar,f] => /foo/bar/f -/// foo + [bar,f] => foo/bar/f -/// -/// @param path Set to \a path + [\a begin, \a end). -/// @param begin Start of components to append. -/// @param end One past the end of components to append. -/// @returns errc::success if [\a begin, \a end) has been appended to \a path, -/// otherwise a platform specific error_code. -error_code append(SmallVectorImpl &path, - const_iterator begin, const_iterator end); - -/// @} -/// @name Transforms (or some other better name) -/// @{ - -/// Convert path to the native form. This is used to give paths to users and -/// operating system calls in the platform's normal way. For example, on Windows -/// all '/' are converted to '\'. -/// -/// @param path A path that is transformed to native format. -/// @param result Holds the result of the transformation. -/// @returns errc::success if \a path has been transformed and stored in result, -/// otherwise a platform specific error_code. -error_code native(const Twine &path, SmallVectorImpl &result); - -/// @} -/// @name Lexical Observers -/// @{ - -/// @brief Get the current path. -/// -/// @param result Holds the current path on return. -/// @results errc::success if the current path has been stored in result, -/// otherwise a platform specific error_code. -error_code current_path(SmallVectorImpl &result); - -// The following are purely lexical. - -/// @brief Is the current path valid? -/// -/// @param path Input path. -/// @param result Set to true if the path is valid, false if it is not. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code is_valid(const Twine &path, bool &result); - -/// @brief Get root name. -/// -/// //net/hello => //net -/// c:/hello => c: (on Windows, on other platforms nothing) -/// /hello => -/// -/// @param path Input path. -/// @param result Set to the root name of \a path if it has one, otherwise "". -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code root_name(const StringRef &path, StringRef &result); - -/// @brief Get root directory. -/// -/// /goo/hello => / -/// c:/hello => / -/// d/file.txt => -/// -/// @param path Input path. -/// @param result Set to the root directory of \a path if it has one, otherwise -/// "". -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code root_directory(const StringRef &path, StringRef &result); - -/// @brief Get root path. -/// -/// Equivalent to root_name + root_directory. -/// -/// @param path Input path. -/// @param result Set to the root path of \a path if it has one, otherwise "". -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code root_path(const StringRef &path, StringRef &result); - -/// @brief Get relative path. -/// -/// C:\hello\world => hello\world -/// foo/bar => foo/bar -/// /foo/bar => foo/bar -/// -/// @param path Input path. -/// @param result Set to the path starting after root_path if one exists, -/// otherwise "". -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code relative_path(const StringRef &path, StringRef &result); - -/// @brief Get parent path. -/// -/// / => -/// /foo => / -/// foo/../bar => foo/.. -/// -/// @param path Input path. -/// @param result Set to the parent path of \a path if one exists, otherwise "". -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code parent_path(const StringRef &path, StringRef &result); - -/// @brief Get filename. -/// -/// /foo.txt => foo.txt -/// . => . -/// .. => .. -/// / => / -/// -/// @param path Input path. -/// @param result Set to the filename part of \a path. This is defined as the -/// last component of \a path. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code filename(const StringRef &path, StringRef &result); - -/// @brief Get stem. -/// -/// If filename contains a dot but not solely one or two dots, result is the -/// substring of filename ending at (but not including) the last dot. Otherwise -/// it is filename. -/// -/// /foo/bar.txt => bar -/// /foo/bar => bar -/// /foo/.txt => -/// /foo/. => . -/// /foo/.. => .. -/// -/// @param path Input path. -/// @param result Set to the stem of \a path. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code stem(const StringRef &path, StringRef &result); - -/// @brief Get extension. -/// -/// If filename contains a dot but not solely one or two dots, result is the -/// substring of filename starting at (and including) the last dot, and ending -/// at the end of \a path. Otherwise "". -/// -/// /foo/bar.txt => .txt -/// /foo/bar => -/// /foo/.txt => .txt -/// -/// @param path Input path. -/// @param result Set to the extension of \a path. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code extension(const StringRef &path, StringRef &result); - -/// @brief Has root name? -/// -/// root_name != "" -/// -/// @param path Input path. -/// @param result Set to true if the path has a root name, false otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code has_root_name(const Twine &path, bool &result); - -/// @brief Has root directory? -/// -/// root_directory != "" -/// -/// @param path Input path. -/// @param result Set to true if the path has a root directory, false otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code has_root_directory(const Twine &path, bool &result); - -/// @brief Has root path? -/// -/// root_path != "" -/// -/// @param path Input path. -/// @param result Set to true if the path has a root path, false otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code has_root_path(const Twine &path, bool &result); - -/// @brief Has relative path? -/// -/// relative_path != "" -/// -/// @param path Input path. -/// @param result Set to true if the path has a relative path, false otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code has_relative_path(const Twine &path, bool &result); - -/// @brief Has parent path? -/// -/// parent_path != "" -/// -/// @param path Input path. -/// @param result Set to true if the path has a parent path, false otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code has_parent_path(const Twine &path, bool &result); - -/// @brief Has filename? -/// -/// filename != "" -/// -/// @param path Input path. -/// @param result Set to true if the path has a filename, false otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code has_filename(const Twine &path, bool &result); - -/// @brief Has stem? -/// -/// stem != "" -/// -/// @param path Input path. -/// @param result Set to true if the path has a stem, false otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code has_stem(const Twine &path, bool &result); - -/// @brief Has extension? -/// -/// extension != "" -/// -/// @param path Input path. -/// @param result Set to true if the path has a extension, false otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code has_extension(const Twine &path, bool &result); - -/// @brief Is path absolute? -/// -/// @param path Input path. -/// @param result Set to true if the path is absolute, false if it is not. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code is_absolute(const Twine &path, bool &result); - -/// @brief Is path relative? -/// -/// @param path Input path. -/// @param result Set to true if the path is relative, false if it is not. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code is_relative(const Twine &path, bool &result); -// end purely lexical. - -} // end namespace path - -namespace fs { - -/// file_type - An "enum class" enumeration for the file system's view of the -/// type. -struct file_type { - enum _ { - status_error, - file_not_found, - regular_file, - directory_file, - symlink_file, - block_file, - character_file, - fifo_file, - socket_file, - type_unknown - }; - - file_type(_ v) : v_(v) {} - explicit file_type(int v) : v_(_(v)) {} - operator int() const {return v_;} - -private: - int v_; -}; - -/// copy_option - An "enum class" enumeration of copy semantics for copy -/// operations. -struct copy_option { - enum _ { - fail_if_exists, - overwrite_if_exists - }; - - copy_option(_ v) : v_(v) {} - explicit copy_option(int v) : v_(_(v)) {} - operator int() const {return v_;} - -private: - int v_; -}; - -/// space_info - Self explanatory. -struct space_info { - uint64_t capacity; - uint64_t free; - uint64_t available; -}; - -/// file_status - Represents the result of a call to stat and friends. It has -/// a platform specific member to store the result. -class file_status -{ - // implementation defined status field. -public: - explicit file_status(file_type v=file_type::status_error); - - file_type type() const; - void type(file_type v); -}; - -/// @} -/// @name Physical Operators -/// @{ - -/// @brief Copy the file at \a from to the path \a to. -/// -/// @param from The path to copy the file from. -/// @param to The path to copy the file to. -/// @param copt Behavior if \a to already exists. -/// @returns errc::success if the file has been successfully copied. -/// errc::file_exists if \a to already exists and \a copt == -/// copy_option::fail_if_exists. Otherwise a platform specific -/// error_code. -error_code copy_file(const Twine &from, const Twine &to, - copy_option copt = copy_option::fail_if_exists); - -/// @brief Create all the non-existent directories in path. -/// -/// @param path Directories to create. -/// @param existed Set to true if \a path already existed, false otherwise. -/// @returns errc::success if is_directory(path) and existed have been set, -/// otherwise a platform specific error_code. -error_code create_directories(const Twine &path, bool &existed); - -/// @brief Create the directory in path. -/// -/// @param path Directory to create. -/// @param existed Set to true if \a path already existed, false otherwise. -/// @returns errc::success if is_directory(path) and existed have been set, -/// otherwise a platform specific error_code. -error_code create_directory(const Twine &path, bool &existed); - -/// @brief Create a hard link from \a from to \a to. -/// -/// @param to The path to hard link to. -/// @param from The path to hard link from. This is created. -/// @returns errc::success if exists(to) && exists(from) && equivalent(to, from) -/// , otherwise a platform specific error_code. -error_code create_hard_link(const Twine &to, const Twine &from); - -/// @brief Create a symbolic link from \a from to \a to. -/// -/// @param to The path to symbolically link to. -/// @param from The path to symbolically link from. This is created. -/// @returns errc::success if exists(to) && exists(from) && is_symlink(from), -/// otherwise a platform specific error_code. -error_code create_symlink(const Twine &to, const Twine &from); - -/// @brief Remove path. Equivalent to POSIX remove(). -/// -/// @param path Input path. -/// @param existed Set to true if \a path existed, false if it did not. -/// undefined otherwise. -/// @results errc::success if path has been removed and existed has been -/// successfully set, otherwise a platform specific error_code. -error_code remove(const Twine &path, bool &existed); - -/// @brief Recursively remove all files below \a path, then \a path. Files are -/// removed as if by POSIX remove(). -/// -/// @param path Input path. -/// @param num_removed Number of files removed. -/// @results errc::success if path has been removed and num_removed has been -/// successfully set, otherwise a platform specific error_code. -error_code remove_all(const Twine &path, uint32_t &num_removed); - -/// @brief Rename \a from to \a to. Files are renamed as if by POSIX rename(). -/// -/// @param from The path to rename from. -/// @param to The path to rename to. This is created. -error_code rename(const Twine &from, const Twine &to); - -/// @brief Resize path to size. File is resized as if by POSIX truncate(). -/// -/// @param path Input path. -/// @param size Size to resize to. -/// @returns errc::success if \a path has been resized to \a size, otherwise a -/// platform specific error_code. -error_code resize_file(const Twine &path, uint64_t size); - -/// @brief Make file readable. -/// -/// @param path Input path. -/// @param value If true, make readable, else, make unreadable. -/// @results errc::success if readability has been successfully set, otherwise a -/// platform specific error_code. -error_code set_read(const Twine &path, bool value); - -/// @brief Make file writeable. -/// -/// @param path Input path. -/// @param value If true, make writeable, else, make unwriteable. -/// @results errc::success if writeability has been successfully set, otherwise -/// a platform specific error_code. -error_code set_write(const Twine &path, bool value); - -/// @brief Make file executable. -/// -/// @param path Input path. -/// @param value If true, make executable, else, make unexecutable. -/// @results errc::success if executability has been successfully set, otherwise -/// a platform specific error_code. -error_code set_execute(const Twine &path, bool value); - -/// @} -/// @name Physical Observers -/// @{ - -/// @brief Does file exist? -/// -/// @param status A file_status previously returned from stat. -/// @param result Set to true if the file represented by status exists, false if -/// it does not. Undefined otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code exists(file_status status, bool &result); - -/// @brief Does file exist? -/// -/// @param path Input path. -/// @param result Set to true if the file represented by status exists, false if -/// it does not. Undefined otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code exists(const Twine &path, bool &result); - -/// @brief Do paths represent the same thing? -/// -/// @param A Input path A. -/// @param B Input path B. -/// @param result Set to true if stat(A) and stat(B) have the same device and -/// inode (or equivalent). -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code equivalent(const Twine &A, const Twine &B, bool &result); - -/// @brief Get file size. -/// -/// @param path Input path. -/// @param result Set to the size of the file in \a path. -/// @returns errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code file_size(const Twine &path, uint64_t &result); - -/// @brief Does status represent a directory? -/// -/// @param status A file_status previously returned from stat. -/// @param result Set to true if the file represented by status is a directory, -/// false if it is not. Undefined otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code is_directory(file_status status, bool &result); - -/// @brief Is path a directory? -/// -/// @param path Input path. -/// @param result Set to true if \a path is a directory, false if it is not. -/// Undefined otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code is_directory(const Twine &path, bool &result); - -/// @brief Is path an empty file? -/// -/// @param path Input path. -/// @param result Set to true if \a path is a an empty file, false if it is not. -/// Undefined otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code is_empty(const Twine &path, bool &result); - -/// @brief Does status represent a regular file? -/// -/// @param status A file_status previously returned from stat. -/// @param result Set to true if the file represented by status is a regular -/// file, false if it is not. Undefined otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code is_regular_file(file_status status, bool &result); - -/// @brief Is path a regular file? -/// -/// @param path Input path. -/// @param result Set to true if \a path is a regular file, false if it is not. -/// Undefined otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code is_regular_file(const Twine &path, bool &result); - -/// @brief Does status represent something that exists but is not a directory, -/// regular file, or symlink? -/// -/// @param status A file_status previously returned from stat. -/// @param result Set to true if the file represented by status exists, but is -/// not a directory, regular file, or a symlink, false if it does -/// not. Undefined otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code is_other(file_status status, bool &result); - -/// @brief Is path something that exists but is not a directory, -/// regular file, or symlink? -/// -/// @param path Input path. -/// @param result Set to true if \a path exists, but is not a directory, regular -/// file, or a symlink, false if it does not. Undefined otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code is_other(const Twine &path, bool &result); - -/// @brief Does status represent a symlink? -/// -/// @param status A file_status previously returned from stat. -/// @param result Set to true if the file represented by status is a symlink, -/// false if it is not. Undefined otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code is_symlink(file_status status, bool &result); - -/// @brief Is path a symlink? -/// -/// @param path Input path. -/// @param result Set to true if \a path is a symlink, false if it is not. -/// Undefined otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code is_symlink(const Twine &path, bool &result); - -/// @brief Get last write time without changing it. -/// -/// @param path Input path. -/// @param result Set to the last write time (UNIX time) of \a path if it -/// exists. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code last_write_time(const Twine &path, std::time_t &result); - -/// @brief Set last write time. -/// -/// @param path Input path. -/// @param value Time to set (UNIX time) \a path's last write time to. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code set_last_write_time(const Twine &path, std::time_t value); - -/// @brief Read a symlink's value. -/// -/// @param path Input path. -/// @param result Set to the value of the symbolic link \a path. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code read_symlink(const Twine &path, SmallVectorImpl &result); - -/// @brief Get disk space usage information. -/// -/// @param path Input path. -/// @param result Set to the capacity, free, and available space on the device -/// \a path is on. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code disk_space(const Twine &path, space_info &result); - -/// @brief Get file status as if by POSIX stat(). -/// -/// @param path Input path. -/// @param result Set to the file status. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code status(const Twine &path, file_status &result); - -/// @brief Is status available? -/// -/// @param path Input path. -/// @param result Set to true if status() != status_error. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code status_known(const Twine &path, bool &result); - -/// @brief Get file status as if by POSIX lstat(). -/// -/// Does not resolve symlinks. -/// -/// @param path Input path. -/// @param result Set to the file status. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code symlink_status(const Twine &path, file_status &result); - -/// @brief Get the temporary directory. -/// -/// @param result Set to the temporary directory. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -/// @see unique_file -error_code temp_directory_path(SmallVectorImpl &result); - -/// @brief Generate a unique path and open it as a file. -/// -/// Generates a unique path suitable for a temporary file and then opens it as a -/// file. The name is based on \a model with '%' replaced by a random char in -/// [0-9a-f]. -/// -/// This is an atomic operation. Either the file is created and opened, or the -/// file system is left untouched. -/// -/// clang-%%-%%-%%-%%-%%.s => /clang-a0-b1-c2-d3-e4.s -/// -/// @param model Name to base unique path off of. -/// @param result Set to the opened file. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -/// @see temp_directory_path -error_code unique_file(const Twine &model, void* i_have_not_decided_the_ty_yet); - -/// @brief Canonicalize path. -/// -/// Sets result to the file system's idea of what path is. The result is always -/// absolute and has the same capitalization as the file system. -/// -/// @param path Input path. -/// @param result Set to the canonicalized version of \a path. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code canonicalize(const Twine &path, SmallVectorImpl &result); - -/// @brief Are \a path's first bytes \a magic? -/// -/// @param path Input path. -/// @param magic Byte sequence to compare \a path's first len(magic) bytes to. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code has_magic(const Twine &path, const Twine &magic); - -/// @brief Get \a path's first \a len bytes. -/// -/// @param path Input path. -/// @param len Number of magic bytes to get. -/// @param result Set to the first \a len bytes in the file pointed to by -/// \a path. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code get_magic(const Twine &path, uint32_t len, - SmallVectorImpl &result); - -/// @brief Is file bitcode? -/// -/// @param path Input path. -/// @param result Set to true if \a path is a bitcode file, false if it is not, -/// undefined otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code is_bitcode(const Twine &path, bool &result); - -/// @brief Is file a dynamic library? -/// -/// @param path Input path. -/// @param result Set to true if \a path is a dynamic library, false if it is -/// not, undefined otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code is_dynamic_library(const Twine &path, bool &result); - -/// @brief Is an object file? -/// -/// @param path Input path. -/// @param result Set to true if \a path is an object file, false if it is not, -/// undefined otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code is_object_file(const Twine &path, bool &result); - -/// @brief Can file be read? -/// -/// @param path Input path. -/// @param result Set to true if \a path is readable, false it it is not, -/// undefined otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code can_read(const Twine &path, bool &result); - -/// @brief Can file be written? -/// -/// @param path Input path. -/// @param result Set to true if \a path is writeable, false it it is not, -/// undefined otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code can_write(const Twine &path, bool &result); - -/// @brief Can file be executed? -/// -/// @param path Input path. -/// @param result Set to true if \a path is executable, false it it is not, -/// undefined otherwise. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code can_execute(const Twine &path, bool &result); - -/// @brief Get library paths the system linker uses. -/// -/// @param result Set to the list of system library paths. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code GetSystemLibraryPaths(SmallVectorImpl &result); - -/// @brief Get bitcode library paths the system linker uses -/// + LLVM_LIB_SEARCH_PATH + LLVM_LIBDIR. -/// -/// @param result Set to the list of bitcode library paths. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code GetBitcodeLibraryPaths(SmallVectorImpl &result); - -/// @brief Find a library. -/// -/// Find the path to a library using its short name. Use the system -/// dependent library paths to locate the library. -/// -/// c => /usr/lib/libc.so -/// -/// @param short_name Library name one would give to the system linker. -/// @param result Set to the absolute path \a short_name represents. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code FindLibrary(const Twine &short_name, SmallVectorImpl &result); - -/// @brief Get absolute path of main executable. -/// -/// @param argv0 The program name as it was spelled on the command line. -/// @param MainAddr Address of some symbol in the executable (not in a library). -/// @param result Set to the absolute path of the current executable. -/// @results errc::success if result has been successfully set, otherwise a -/// platform specific error_code. -error_code GetMainExecutable(const char *argv0, void *MainAddr, - SmallVectorImpl &result); - -/// @} -/// @name Iterators -/// @{ - -/// directory_entry - A single entry in a directory. Caches the status either -/// from the result of the iteration syscall, or the first time status or -/// symlink_status is called. -class directory_entry { - std::string Path; - mutable file_status Status; - mutable file_status SymlinkStatus; - -public: - explicit directory_entry(const Twine &path, file_status st = file_status(), - file_status symlink_st = file_status()); - - void assign(const Twine &path, file_status st = file_status(), - file_status symlink_st = file_status()); - void replace_filename(const Twine &filename, file_status st = file_status(), - file_status symlink_st = file_status()); - - const SmallVectorImpl &path() const; - error_code status(file_status &result) const; - error_code symlink_status(file_status &result) const; - - bool operator==(const directory_entry& rhs) const; - bool operator!=(const directory_entry& rhs) const; - bool operator< (const directory_entry& rhs) const; - bool operator<=(const directory_entry& rhs) const; - bool operator> (const directory_entry& rhs) const; - bool operator>=(const directory_entry& rhs) const; -}; - -/// directory_iterator - Iterates through the entries in path. There is no -/// operator++ because we need an error_code. If it's really needed we can make -/// it call report_fatal_error on error. -class directory_iterator { - // implementation directory iterator status - -public: - explicit directory_iterator(const Twine &path, error_code &ec); - // No operator++ because we need error_code. - directory_iterator &increment(error_code &ec); - - const directory_entry &operator*() const; - const directory_entry *operator->() const; - - // Other members as required by - // C++ Std, 24.1.1 Input iterators [input.iterators] -}; - -/// recursive_directory_iterator - Same as directory_iterator except for it -/// recurses down into child directories. -class recursive_directory_iterator { - uint16_t Level; - bool HasNoPushRequest; - // implementation directory iterator status - -public: - explicit recursive_directory_iterator(const Twine &path, error_code &ec); - // No operator++ because we need error_code. - directory_iterator &increment(error_code &ec); - - const directory_entry &operator*() const; - const directory_entry *operator->() const; - - // observers - /// Gets the current level. path is at level 0. - int level() const; - /// Returns true if no_push has been called for this directory_entry. - bool no_push_request() const; - - // modifiers - /// Goes up one level if Level > 0. - void pop(); - /// Does not go down into the current directory_entry. - void no_push(); - - // Other members as required by - // C++ Std, 24.1.1 Input iterators [input.iterators] -}; - -/// @} - -} // end namespace fs -} // end namespace sys -} // end namespace llvm Removed: llvm/trunk/include/llvm/System/Process.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/Process.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/Process.h (original) +++ llvm/trunk/include/llvm/System/Process.h (removed) @@ -1,146 +0,0 @@ -//===- llvm/System/Process.h ------------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file declares the llvm::sys::Process class. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_PROCESS_H -#define LLVM_SYSTEM_PROCESS_H - -#include "llvm/System/TimeValue.h" - -namespace llvm { -namespace sys { - - /// This class provides an abstraction for getting information about the - /// currently executing process. - /// @since 1.4 - /// @brief An abstraction for operating system processes. - class Process { - /// @name Accessors - /// @{ - public: - /// This static function will return the operating system's virtual memory - /// page size. - /// @returns The number of bytes in a virtual memory page. - /// @brief Get the virtual memory page size - static unsigned GetPageSize(); - - /// This static function will return the total amount of memory allocated - /// by the process. This only counts the memory allocated via the malloc, - /// calloc and realloc functions and includes any "free" holes in the - /// allocated space. - /// @brief Return process memory usage. - static size_t GetMallocUsage(); - - /// This static function will return the total memory usage of the - /// process. This includes code, data, stack and mapped pages usage. Notei - /// that the value returned here is not necessarily the Running Set Size, - /// it is the total virtual memory usage, regardless of mapped state of - /// that memory. - static size_t GetTotalMemoryUsage(); - - /// This static function will set \p user_time to the amount of CPU time - /// spent in user (non-kernel) mode and \p sys_time to the amount of CPU - /// time spent in system (kernel) mode. If the operating system does not - /// support collection of these metrics, a zero TimeValue will be for both - /// values. - static void GetTimeUsage( - TimeValue& elapsed, - ///< Returns the TimeValue::now() giving current time - TimeValue& user_time, - ///< Returns the current amount of user time for the process - TimeValue& sys_time - ///< Returns the current amount of system time for the process - ); - - /// This static function will return the process' current user id number. - /// Not all operating systems support this feature. Where it is not - /// supported, the function should return 65536 as the value. - static int GetCurrentUserId(); - - /// This static function will return the process' current group id number. - /// Not all operating systems support this feature. Where it is not - /// supported, the function should return 65536 as the value. - static int GetCurrentGroupId(); - - /// This function makes the necessary calls to the operating system to - /// prevent core files or any other kind of large memory dumps that can - /// occur when a program fails. - /// @brief Prevent core file generation. - static void PreventCoreFiles(); - - /// This function determines if the standard input is connected directly - /// to a user's input (keyboard probably), rather than coming from a file - /// or pipe. - static bool StandardInIsUserInput(); - - /// This function determines if the standard output is connected to a - /// "tty" or "console" window. That is, the output would be displayed to - /// the user rather than being put on a pipe or stored in a file. - static bool StandardOutIsDisplayed(); - - /// This function determines if the standard error is connected to a - /// "tty" or "console" window. That is, the output would be displayed to - /// the user rather than being put on a pipe or stored in a file. - static bool StandardErrIsDisplayed(); - - /// This function determines if the given file descriptor is connected to - /// a "tty" or "console" window. That is, the output would be displayed to - /// the user rather than being put on a pipe or stored in a file. - static bool FileDescriptorIsDisplayed(int fd); - - /// This function determines the number of columns in the window - /// if standard output is connected to a "tty" or "console" - /// window. If standard output is not connected to a tty or - /// console, or if the number of columns cannot be determined, - /// this routine returns zero. - static unsigned StandardOutColumns(); - - /// This function determines the number of columns in the window - /// if standard error is connected to a "tty" or "console" - /// window. If standard error is not connected to a tty or - /// console, or if the number of columns cannot be determined, - /// this routine returns zero. - static unsigned StandardErrColumns(); - - /// This function determines whether the terminal connected to standard - /// output supports colors. If standard output is not connected to a - /// terminal, this function returns false. - static bool StandardOutHasColors(); - - /// This function determines whether the terminal connected to standard - /// error supports colors. If standard error is not connected to a - /// terminal, this function returns false. - static bool StandardErrHasColors(); - - /// Whether changing colors requires the output to be flushed. - /// This is needed on systems that don't support escape sequences for - /// changing colors. - static bool ColorNeedsFlush(); - - /// This function returns the colorcode escape sequences. - /// If ColorNeedsFlush() is true then this function will change the colors - /// and return an empty escape sequence. In that case it is the - /// responsibility of the client to flush the output stream prior to - /// calling this function. - static const char *OutputColor(char c, bool bold, bool bg); - - /// Same as OutputColor, but only enables the bold attribute. - static const char *OutputBold(bool bg); - - /// Resets the terminals colors, or returns an escape sequence to do so. - static const char *ResetColor(); - /// @} - }; -} -} - -#endif Removed: llvm/trunk/include/llvm/System/Program.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/Program.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/Program.h (original) +++ llvm/trunk/include/llvm/System/Program.h (removed) @@ -1,157 +0,0 @@ -//===- llvm/System/Program.h ------------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file declares the llvm::sys::Program class. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_PROGRAM_H -#define LLVM_SYSTEM_PROGRAM_H - -#include "llvm/System/Path.h" - -namespace llvm { -namespace sys { - - // TODO: Add operations to communicate with the process, redirect its I/O, - // etc. - - /// This class provides an abstraction for programs that are executable by the - /// operating system. It provides a platform generic way to find executable - /// programs from the path and to execute them in various ways. The sys::Path - /// class is used to specify the location of the Program. - /// @since 1.4 - /// @brief An abstraction for finding and executing programs. - class Program { - /// Opaque handle for target specific data. - void *Data_; - - // Noncopyable. - Program(const Program& other); - Program& operator=(const Program& other); - - /// @name Methods - /// @{ - public: - - Program(); - ~Program(); - - /// Return process ID of this program. - unsigned GetPid() const; - - /// This function executes the program using the \p arguments provided. The - /// invoked program will inherit the stdin, stdout, and stderr file - /// descriptors, the environment and other configuration settings of the - /// invoking program. If Path::executable() does not return true when this - /// function is called then a std::string is thrown. - /// @returns false in case of error, true otherwise. - /// @see FindProgramByName - /// @brief Executes the program with the given set of \p args. - bool Execute - ( const Path& path, ///< sys::Path object providing the path of the - ///< program to be executed. It is presumed this is the result of - ///< the FindProgramByName method. - const char** args, ///< A vector of strings that are passed to the - ///< program. The first element should be the name of the program. - ///< The list *must* be terminated by a null char* entry. - const char ** env = 0, ///< An optional vector of strings to use for - ///< the program's environment. If not provided, the current program's - ///< environment will be used. - const sys::Path** redirects = 0, ///< An optional array of pointers to - ///< Paths. If the array is null, no redirection is done. The array - ///< should have a size of at least three. If the pointer in the array - ///< are not null, then the inferior process's stdin(0), stdout(1), - ///< and stderr(2) will be redirected to the corresponding Paths. - ///< When an empty Path is passed in, the corresponding file - ///< descriptor will be disconnected (ie, /dev/null'd) in a portable - ///< way. - unsigned memoryLimit = 0, ///< If non-zero, this specifies max. amount - ///< of memory can be allocated by process. If memory usage will be - ///< higher limit, the child is killed and this call returns. If zero - ///< - no memory limit. - std::string* ErrMsg = 0 ///< If non-zero, provides a pointer to a string - ///< instance in which error messages will be returned. If the string - ///< is non-empty upon return an error occurred while invoking the - ///< program. - ); - - /// This function waits for the program to exit. This function will block - /// the current program until the invoked program exits. - /// @returns an integer result code indicating the status of the program. - /// A zero or positive value indicates the result code of the program. A - /// negative value is the signal number on which it terminated. - /// @see Execute - /// @brief Waits for the program to exit. - int Wait - ( const Path& path, ///< The path to the child process executable. - unsigned secondsToWait, ///< If non-zero, this specifies the amount - ///< of time to wait for the child process to exit. If the time - ///< expires, the child is killed and this call returns. If zero, - ///< this function will wait until the child finishes or forever if - ///< it doesn't. - std::string* ErrMsg ///< If non-zero, provides a pointer to a string - ///< instance in which error messages will be returned. If the string - ///< is non-empty upon return an error occurred while waiting. - ); - - /// This function terminates the program. - /// @returns true if an error occured. - /// @see Execute - /// @brief Terminates the program. - bool Kill - ( std::string* ErrMsg = 0 ///< If non-zero, provides a pointer to a string - ///< instance in which error messages will be returned. If the string - ///< is non-empty upon return an error occurred while killing the - ///< program. - ); - - /// This static constructor (factory) will attempt to locate a program in - /// the operating system's file system using some pre-determined set of - /// locations to search (e.g. the PATH on Unix). Paths with slashes are - /// returned unmodified. - /// @returns A Path object initialized to the path of the program or a - /// Path object that is empty (invalid) if the program could not be found. - /// @brief Construct a Program by finding it by name. - static Path FindProgramByName(const std::string& name); - - // These methods change the specified standard stream (stdin, - // stdout, or stderr) to binary mode. They return true if an error - // occurred - static bool ChangeStdinToBinary(); - static bool ChangeStdoutToBinary(); - static bool ChangeStderrToBinary(); - - /// A convenience function equivalent to Program prg; prg.Execute(..); - /// prg.Wait(..); - /// @see Execute, Wait - static int ExecuteAndWait(const Path& path, - const char** args, - const char ** env = 0, - const sys::Path** redirects = 0, - unsigned secondsToWait = 0, - unsigned memoryLimit = 0, - std::string* ErrMsg = 0); - - /// A convenience function equivalent to Program prg; prg.Execute(..); - /// @see Execute - static void ExecuteNoWait(const Path& path, - const char** args, - const char ** env = 0, - const sys::Path** redirects = 0, - unsigned memoryLimit = 0, - std::string* ErrMsg = 0); - - /// @} - - }; -} -} - -#endif Removed: llvm/trunk/include/llvm/System/RWMutex.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/RWMutex.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/RWMutex.h (original) +++ llvm/trunk/include/llvm/System/RWMutex.h (removed) @@ -1,173 +0,0 @@ -//===- RWMutex.h - Reader/Writer Mutual Exclusion Lock ----------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file declares the llvm::sys::RWMutex class. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_RWMUTEX_H -#define LLVM_SYSTEM_RWMUTEX_H - -#include "llvm/System/Threading.h" -#include - -namespace llvm -{ - namespace sys - { - /// @brief Platform agnostic RWMutex class. - class RWMutexImpl - { - /// @name Constructors - /// @{ - public: - - /// Initializes the lock but doesn't acquire it. - /// @brief Default Constructor. - explicit RWMutexImpl(); - - /// Releases and removes the lock - /// @brief Destructor - ~RWMutexImpl(); - - /// @} - /// @name Methods - /// @{ - public: - - /// Attempts to unconditionally acquire the lock in reader mode. If the - /// lock is held by a writer, this method will wait until it can acquire - /// the lock. - /// @returns false if any kind of error occurs, true otherwise. - /// @brief Unconditionally acquire the lock in reader mode. - bool reader_acquire(); - - /// Attempts to release the lock in reader mode. - /// @returns false if any kind of error occurs, true otherwise. - /// @brief Unconditionally release the lock in reader mode. - bool reader_release(); - - /// Attempts to unconditionally acquire the lock in reader mode. If the - /// lock is held by any readers, this method will wait until it can - /// acquire the lock. - /// @returns false if any kind of error occurs, true otherwise. - /// @brief Unconditionally acquire the lock in writer mode. - bool writer_acquire(); - - /// Attempts to release the lock in writer mode. - /// @returns false if any kind of error occurs, true otherwise. - /// @brief Unconditionally release the lock in write mode. - bool writer_release(); - - //@} - /// @name Platform Dependent Data - /// @{ - private: - void* data_; ///< We don't know what the data will be - - /// @} - /// @name Do Not Implement - /// @{ - private: - RWMutexImpl(const RWMutexImpl & original); - void operator=(const RWMutexImpl &); - /// @} - }; - - /// SmartMutex - An R/W mutex with a compile time constant parameter that - /// indicates whether this mutex should become a no-op when we're not - /// running in multithreaded mode. - template - class SmartRWMutex : public RWMutexImpl { - unsigned readers, writers; - public: - explicit SmartRWMutex() : RWMutexImpl(), readers(0), writers(0) { } - - bool reader_acquire() { - if (!mt_only || llvm_is_multithreaded()) - return RWMutexImpl::reader_acquire(); - - // Single-threaded debugging code. This would be racy in multithreaded - // mode, but provides not sanity checks in single threaded mode. - ++readers; - return true; - } - - bool reader_release() { - if (!mt_only || llvm_is_multithreaded()) - return RWMutexImpl::reader_release(); - - // Single-threaded debugging code. This would be racy in multithreaded - // mode, but provides not sanity checks in single threaded mode. - assert(readers > 0 && "Reader lock not acquired before release!"); - --readers; - return true; - } - - bool writer_acquire() { - if (!mt_only || llvm_is_multithreaded()) - return RWMutexImpl::writer_acquire(); - - // Single-threaded debugging code. This would be racy in multithreaded - // mode, but provides not sanity checks in single threaded mode. - assert(writers == 0 && "Writer lock already acquired!"); - ++writers; - return true; - } - - bool writer_release() { - if (!mt_only || llvm_is_multithreaded()) - return RWMutexImpl::writer_release(); - - // Single-threaded debugging code. This would be racy in multithreaded - // mode, but provides not sanity checks in single threaded mode. - assert(writers == 1 && "Writer lock not acquired before release!"); - --writers; - return true; - } - - private: - SmartRWMutex(const SmartRWMutex & original); - void operator=(const SmartRWMutex &); - }; - typedef SmartRWMutex RWMutex; - - /// ScopedReader - RAII acquisition of a reader lock - template - struct SmartScopedReader { - SmartRWMutex& mutex; - - explicit SmartScopedReader(SmartRWMutex& m) : mutex(m) { - mutex.reader_acquire(); - } - - ~SmartScopedReader() { - mutex.reader_release(); - } - }; - typedef SmartScopedReader ScopedReader; - - /// ScopedWriter - RAII acquisition of a writer lock - template - struct SmartScopedWriter { - SmartRWMutex& mutex; - - explicit SmartScopedWriter(SmartRWMutex& m) : mutex(m) { - mutex.writer_acquire(); - } - - ~SmartScopedWriter() { - mutex.writer_release(); - } - }; - typedef SmartScopedWriter ScopedWriter; - } -} - -#endif Removed: llvm/trunk/include/llvm/System/Signals.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/Signals.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/Signals.h (original) +++ llvm/trunk/include/llvm/System/Signals.h (removed) @@ -1,59 +0,0 @@ -//===- llvm/System/Signals.h - Signal Handling support ----------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file defines some helpful functions for dealing with the possibility of -// unix signals occuring while your program is running. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_SIGNALS_H -#define LLVM_SYSTEM_SIGNALS_H - -#include "llvm/System/Path.h" - -namespace llvm { -namespace sys { - - /// This function runs all the registered interrupt handlers, including the - /// removal of files registered by RemoveFileOnSignal. - void RunInterruptHandlers(); - - /// This function registers signal handlers to ensure that if a signal gets - /// delivered that the named file is removed. - /// @brief Remove a file if a fatal signal occurs. - bool RemoveFileOnSignal(const Path &Filename, std::string* ErrMsg = 0); - - /// This function removes a file from the list of files to be removed on - /// signal delivery. - void DontRemoveFileOnSignal(const Path &Filename); - - /// When an error signal (such as SIBABRT or SIGSEGV) is delivered to the - /// process, print a stack trace and then exit. - /// @brief Print a stack trace if a fatal signal occurs. - void PrintStackTraceOnErrorSignal(); - - /// AddSignalHandler - Add a function to be called when an abort/kill signal - /// is delivered to the process. The handler can have a cookie passed to it - /// to identify what instance of the handler it is. - void AddSignalHandler(void (*FnPtr)(void *), void *Cookie); - - /// This function registers a function to be called when the user "interrupts" - /// the program (typically by pressing ctrl-c). When the user interrupts the - /// program, the specified interrupt function is called instead of the program - /// being killed, and the interrupt function automatically disabled. Note - /// that interrupt functions are not allowed to call any non-reentrant - /// functions. An null interrupt function pointer disables the current - /// installed function. Note also that the handler may be executed on a - /// different thread on some platforms. - /// @brief Register a function to be called when ctrl-c is pressed. - void SetInterruptFunction(void (*IF)()); -} // End sys namespace -} // End llvm namespace - -#endif Removed: llvm/trunk/include/llvm/System/Solaris.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/Solaris.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/Solaris.h (original) +++ llvm/trunk/include/llvm/System/Solaris.h (removed) @@ -1,40 +0,0 @@ -/*===- llvm/System/Solaris.h ------------------------------------*- C++ -*-===* - * - * The LLVM Compiler Infrastructure - * - * This file is distributed under the University of Illinois Open Source - * License. See LICENSE.TXT for details. - * - *===----------------------------------------------------------------------===* - * - * This file contains portability fixes for Solaris hosts. - * - *===----------------------------------------------------------------------===*/ - -#ifndef LLVM_SYSTEM_SOLARIS_H -#define LLVM_SYSTEM_SOLARIS_H - -#include -#include - -#undef CS -#undef DS -#undef ES -#undef FS -#undef GS -#undef SS -#undef EAX -#undef ECX -#undef EDX -#undef EBX -#undef ESP -#undef EBP -#undef ESI -#undef EDI -#undef EIP -#undef UESP -#undef EFL -#undef ERR -#undef TRAPNO - -#endif Removed: llvm/trunk/include/llvm/System/SwapByteOrder.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/SwapByteOrder.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/SwapByteOrder.h (original) +++ llvm/trunk/include/llvm/System/SwapByteOrder.h (removed) @@ -1,101 +0,0 @@ -//===- SwapByteOrder.h - Generic and optimized byte swaps -------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file declares generic and optimized functions to swap the byte order of -// an integral type. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_SWAP_BYTE_ORDER_H -#define LLVM_SYSTEM_SWAP_BYTE_ORDER_H - -#include "llvm/System/DataTypes.h" -#include -#include - -namespace llvm { -namespace sys { - -/// SwapByteOrder_16 - This function returns a byte-swapped representation of -/// the 16-bit argument. -inline uint16_t SwapByteOrder_16(uint16_t value) { -#if defined(_MSC_VER) && !defined(_DEBUG) - // The DLL version of the runtime lacks these functions (bug!?), but in a - // release build they're replaced with BSWAP instructions anyway. - return _byteswap_ushort(value); -#else - uint16_t Hi = value << 8; - uint16_t Lo = value >> 8; - return Hi | Lo; -#endif -} - -/// SwapByteOrder_32 - This function returns a byte-swapped representation of -/// the 32-bit argument. -inline uint32_t SwapByteOrder_32(uint32_t value) { -#if defined(__llvm__) || \ -(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && !defined(__ICC) - return __builtin_bswap32(value); -#elif defined(_MSC_VER) && !defined(_DEBUG) - return _byteswap_ulong(value); -#else - uint32_t Byte0 = value & 0x000000FF; - uint32_t Byte1 = value & 0x0000FF00; - uint32_t Byte2 = value & 0x00FF0000; - uint32_t Byte3 = value & 0xFF000000; - return (Byte0 << 24) | (Byte1 << 8) | (Byte2 >> 8) | (Byte3 >> 24); -#endif -} - -/// SwapByteOrder_64 - This function returns a byte-swapped representation of -/// the 64-bit argument. -inline uint64_t SwapByteOrder_64(uint64_t value) { -#if defined(__llvm__) || \ -(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && !defined(__ICC) - return __builtin_bswap64(value); -#elif defined(_MSC_VER) && !defined(_DEBUG) - return _byteswap_uint64(value); -#else - uint64_t Hi = SwapByteOrder_32(uint32_t(value)); - uint32_t Lo = SwapByteOrder_32(uint32_t(value >> 32)); - return (Hi << 32) | Lo; -#endif -} - -inline unsigned char SwapByteOrder(unsigned char C) { return C; } -inline signed char SwapByteOrder(signed char C) { return C; } -inline char SwapByteOrder(char C) { return C; } - -inline unsigned short SwapByteOrder(unsigned short C) { return SwapByteOrder_16(C); } -inline signed short SwapByteOrder( signed short C) { return SwapByteOrder_16(C); } - -inline unsigned int SwapByteOrder(unsigned int C) { return SwapByteOrder_32(C); } -inline signed int SwapByteOrder( signed int C) { return SwapByteOrder_32(C); } - -#if __LONG_MAX__ == __INT_MAX__ -inline unsigned long SwapByteOrder(unsigned long C) { return SwapByteOrder_32(C); } -inline signed long SwapByteOrder( signed long C) { return SwapByteOrder_32(C); } -#elif __LONG_MAX__ == __LONG_LONG_MAX__ -inline unsigned long SwapByteOrder(unsigned long C) { return SwapByteOrder_64(C); } -inline signed long SwapByteOrder( signed long C) { return SwapByteOrder_64(C); } -#else -#error "Unknown long size!" -#endif - -inline unsigned long long SwapByteOrder(unsigned long long C) { - return SwapByteOrder_64(C); -} -inline signed long long SwapByteOrder(signed long long C) { - return SwapByteOrder_64(C); -} - -} // end namespace sys -} // end namespace llvm - -#endif Removed: llvm/trunk/include/llvm/System/ThreadLocal.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/ThreadLocal.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/ThreadLocal.h (original) +++ llvm/trunk/include/llvm/System/ThreadLocal.h (removed) @@ -1,54 +0,0 @@ -//===- llvm/System/ThreadLocal.h - Thread Local Data ------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file declares the llvm::sys::ThreadLocal class. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_THREAD_LOCAL_H -#define LLVM_SYSTEM_THREAD_LOCAL_H - -#include "llvm/System/Threading.h" -#include - -namespace llvm { - namespace sys { - // ThreadLocalImpl - Common base class of all ThreadLocal instantiations. - // YOU SHOULD NEVER USE THIS DIRECTLY. - class ThreadLocalImpl { - void* data; - public: - ThreadLocalImpl(); - virtual ~ThreadLocalImpl(); - void setInstance(const void* d); - const void* getInstance(); - void removeInstance(); - }; - - /// ThreadLocal - A class used to abstract thread-local storage. It holds, - /// for each thread, a pointer a single object of type T. - template - class ThreadLocal : public ThreadLocalImpl { - public: - ThreadLocal() : ThreadLocalImpl() { } - - /// get - Fetches a pointer to the object associated with the current - /// thread. If no object has yet been associated, it returns NULL; - T* get() { return static_cast(getInstance()); } - - // set - Associates a pointer to an object with the current thread. - void set(T* d) { setInstance(d); } - - // erase - Removes the pointer associated with the current thread. - void erase() { removeInstance(); } - }; - } -} - -#endif Removed: llvm/trunk/include/llvm/System/Threading.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/Threading.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/Threading.h (original) +++ llvm/trunk/include/llvm/System/Threading.h (removed) @@ -1,59 +0,0 @@ -//===-- llvm/System/Threading.h - Control multithreading mode --*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// TThis file defines llvm_start_multithreaded() and friends. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_THREADING_H -#define LLVM_SYSTEM_THREADING_H - -namespace llvm { - /// llvm_start_multithreaded - Allocate and initialize structures needed to - /// make LLVM safe for multithreading. The return value indicates whether - /// multithreaded initialization succeeded. LLVM will still be operational - /// on "failed" return, and will still be safe for hosting threading - /// applications in the JIT, but will not be safe for concurrent calls to the - /// LLVM APIs. - /// THIS MUST EXECUTE IN ISOLATION FROM ALL OTHER LLVM API CALLS. - bool llvm_start_multithreaded(); - - /// llvm_stop_multithreaded - Deallocate structures necessary to make LLVM - /// safe for multithreading. - /// THIS MUST EXECUTE IN ISOLATION FROM ALL OTHER LLVM API CALLS. - void llvm_stop_multithreaded(); - - /// llvm_is_multithreaded - Check whether LLVM is executing in thread-safe - /// mode or not. - bool llvm_is_multithreaded(); - - /// acquire_global_lock - Acquire the global lock. This is a no-op if called - /// before llvm_start_multithreaded(). - void llvm_acquire_global_lock(); - - /// release_global_lock - Release the global lock. This is a no-op if called - /// before llvm_start_multithreaded(). - void llvm_release_global_lock(); - - /// llvm_execute_on_thread - Execute the given \arg UserFn on a separate - /// thread, passing it the provided \arg UserData. - /// - /// This function does not guarantee that the code will actually be executed - /// on a separate thread or honoring the requested stack size, but tries to do - /// so where system support is available. - /// - /// \param UserFn - The callback to execute. - /// \param UserData - An argument to pass to the callback function. - /// \param RequestedStackSize - If non-zero, a requested size (in bytes) for - /// the thread stack. - void llvm_execute_on_thread(void (*UserFn)(void*), void *UserData, - unsigned RequestedStackSize = 0); -} - -#endif Removed: llvm/trunk/include/llvm/System/TimeValue.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/TimeValue.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/TimeValue.h (original) +++ llvm/trunk/include/llvm/System/TimeValue.h (removed) @@ -1,382 +0,0 @@ -//===-- TimeValue.h - Declare OS TimeValue Concept --------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This header file declares the operating system TimeValue concept. -// -//===----------------------------------------------------------------------===// - -#include "llvm/System/DataTypes.h" -#include - -#ifndef LLVM_SYSTEM_TIMEVALUE_H -#define LLVM_SYSTEM_TIMEVALUE_H - -namespace llvm { -namespace sys { - /// This class is used where a precise fixed point in time is required. The - /// range of TimeValue spans many hundreds of billions of years both past and - /// present. The precision of TimeValue is to the nanosecond. However, the - /// actual precision of its values will be determined by the resolution of - /// the system clock. The TimeValue class is used in conjunction with several - /// other lib/System interfaces to specify the time at which a call should - /// timeout, etc. - /// @since 1.4 - /// @brief Provides an abstraction for a fixed point in time. - class TimeValue { - - /// @name Constants - /// @{ - public: - - /// A constant TimeValue representing the smallest time - /// value permissable by the class. MinTime is some point - /// in the distant past, about 300 billion years BCE. - /// @brief The smallest possible time value. - static const TimeValue MinTime; - - /// A constant TimeValue representing the largest time - /// value permissable by the class. MaxTime is some point - /// in the distant future, about 300 billion years AD. - /// @brief The largest possible time value. - static const TimeValue MaxTime; - - /// A constant TimeValue representing the base time, - /// or zero time of 00:00:00 (midnight) January 1st, 2000. - /// @brief 00:00:00 Jan 1, 2000 UTC. - static const TimeValue ZeroTime; - - /// A constant TimeValue for the Posix base time which is - /// 00:00:00 (midnight) January 1st, 1970. - /// @brief 00:00:00 Jan 1, 1970 UTC. - static const TimeValue PosixZeroTime; - - /// A constant TimeValue for the Win32 base time which is - /// 00:00:00 (midnight) January 1st, 1601. - /// @brief 00:00:00 Jan 1, 1601 UTC. - static const TimeValue Win32ZeroTime; - - /// @} - /// @name Types - /// @{ - public: - typedef int64_t SecondsType; ///< Type used for representing seconds. - typedef int32_t NanoSecondsType;///< Type used for representing nanoseconds. - - enum TimeConversions { - NANOSECONDS_PER_SECOND = 1000000000, ///< One Billion - MICROSECONDS_PER_SECOND = 1000000, ///< One Million - MILLISECONDS_PER_SECOND = 1000, ///< One Thousand - NANOSECONDS_PER_MICROSECOND = 1000, ///< One Thousand - NANOSECONDS_PER_MILLISECOND = 1000000,///< One Million - NANOSECONDS_PER_POSIX_TICK = 100, ///< Posix tick is 100 Hz (10ms) - NANOSECONDS_PER_WIN32_TICK = 100 ///< Win32 tick is 100 Hz (10ms) - }; - - /// @} - /// @name Constructors - /// @{ - public: - /// Caller provides the exact value in seconds and nanoseconds. The - /// \p nanos argument defaults to zero for convenience. - /// @brief Explicit constructor - explicit TimeValue (SecondsType seconds, NanoSecondsType nanos = 0) - : seconds_( seconds ), nanos_( nanos ) { this->normalize(); } - - /// Caller provides the exact value as a double in seconds with the - /// fractional part representing nanoseconds. - /// @brief Double Constructor. - explicit TimeValue( double new_time ) - : seconds_( 0 ) , nanos_ ( 0 ) { - SecondsType integer_part = static_cast( new_time ); - seconds_ = integer_part; - nanos_ = static_cast( (new_time - - static_cast(integer_part)) * NANOSECONDS_PER_SECOND ); - this->normalize(); - } - - /// This is a static constructor that returns a TimeValue that represents - /// the current time. - /// @brief Creates a TimeValue with the current time (UTC). - static TimeValue now(); - - /// @} - /// @name Operators - /// @{ - public: - /// Add \p that to \p this. - /// @returns this - /// @brief Incrementing assignment operator. - TimeValue& operator += (const TimeValue& that ) { - this->seconds_ += that.seconds_ ; - this->nanos_ += that.nanos_ ; - this->normalize(); - return *this; - } - - /// Subtract \p that from \p this. - /// @returns this - /// @brief Decrementing assignment operator. - TimeValue& operator -= (const TimeValue &that ) { - this->seconds_ -= that.seconds_ ; - this->nanos_ -= that.nanos_ ; - this->normalize(); - return *this; - } - - /// Determine if \p this is less than \p that. - /// @returns True iff *this < that. - /// @brief True if this < that. - int operator < (const TimeValue &that) const { return that > *this; } - - /// Determine if \p this is greather than \p that. - /// @returns True iff *this > that. - /// @brief True if this > that. - int operator > (const TimeValue &that) const { - if ( this->seconds_ > that.seconds_ ) { - return 1; - } else if ( this->seconds_ == that.seconds_ ) { - if ( this->nanos_ > that.nanos_ ) return 1; - } - return 0; - } - - /// Determine if \p this is less than or equal to \p that. - /// @returns True iff *this <= that. - /// @brief True if this <= that. - int operator <= (const TimeValue &that) const { return that >= *this; } - - /// Determine if \p this is greater than or equal to \p that. - /// @returns True iff *this >= that. - /// @brief True if this >= that. - int operator >= (const TimeValue &that) const { - if ( this->seconds_ > that.seconds_ ) { - return 1; - } else if ( this->seconds_ == that.seconds_ ) { - if ( this->nanos_ >= that.nanos_ ) return 1; - } - return 0; - } - - /// Determines if two TimeValue objects represent the same moment in time. - /// @brief True iff *this == that. - /// @brief True if this == that. - int operator == (const TimeValue &that) const { - return (this->seconds_ == that.seconds_) && - (this->nanos_ == that.nanos_); - } - - /// Determines if two TimeValue objects represent times that are not the - /// same. - /// @return True iff *this != that. - /// @brief True if this != that. - int operator != (const TimeValue &that) const { return !(*this == that); } - - /// Adds two TimeValue objects together. - /// @returns The sum of the two operands as a new TimeValue - /// @brief Addition operator. - friend TimeValue operator + (const TimeValue &tv1, const TimeValue &tv2); - - /// Subtracts two TimeValue objects. - /// @returns The difference of the two operands as a new TimeValue - /// @brief Subtraction operator. - friend TimeValue operator - (const TimeValue &tv1, const TimeValue &tv2); - - /// @} - /// @name Accessors - /// @{ - public: - - /// Returns only the seconds component of the TimeValue. The nanoseconds - /// portion is ignored. No rounding is performed. - /// @brief Retrieve the seconds component - SecondsType seconds() const { return seconds_; } - - /// Returns only the nanoseconds component of the TimeValue. The seconds - /// portion is ignored. - /// @brief Retrieve the nanoseconds component. - NanoSecondsType nanoseconds() const { return nanos_; } - - /// Returns only the fractional portion of the TimeValue rounded down to the - /// nearest microsecond (divide by one thousand). - /// @brief Retrieve the fractional part as microseconds; - uint32_t microseconds() const { - return nanos_ / NANOSECONDS_PER_MICROSECOND; - } - - /// Returns only the fractional portion of the TimeValue rounded down to the - /// nearest millisecond (divide by one million). - /// @brief Retrieve the fractional part as milliseconds; - uint32_t milliseconds() const { - return nanos_ / NANOSECONDS_PER_MILLISECOND; - } - - /// Returns the TimeValue as a number of microseconds. Note that the value - /// returned can overflow because the range of a uint64_t is smaller than - /// the range of a TimeValue. Nevertheless, this is useful on some operating - /// systems and is therefore provided. - /// @brief Convert to a number of microseconds (can overflow) - uint64_t usec() const { - return seconds_ * MICROSECONDS_PER_SECOND + - ( nanos_ / NANOSECONDS_PER_MICROSECOND ); - } - - /// Returns the TimeValue as a number of milliseconds. Note that the value - /// returned can overflow because the range of a uint64_t is smaller than - /// the range of a TimeValue. Nevertheless, this is useful on some operating - /// systems and is therefore provided. - /// @brief Convert to a number of milliseconds (can overflow) - uint64_t msec() const { - return seconds_ * MILLISECONDS_PER_SECOND + - ( nanos_ / NANOSECONDS_PER_MILLISECOND ); - } - - /// Converts the TimeValue into the corresponding number of "ticks" for - /// Posix, correcting for the difference in Posix zero time. - /// @brief Convert to unix time (100 nanoseconds since 12:00:00a Jan 1,1970) - uint64_t toPosixTime() const { - uint64_t result = seconds_ - PosixZeroTime.seconds_; - result += nanos_ / NANOSECONDS_PER_POSIX_TICK; - return result; - } - - /// Converts the TimeValue into the corresponding number of seconds - /// since the epoch (00:00:00 Jan 1,1970). - uint64_t toEpochTime() const { - return seconds_ - PosixZeroTime.seconds_; - } - - /// Converts the TimeValue into the corresponding number of "ticks" for - /// Win32 platforms, correcting for the difference in Win32 zero time. - /// @brief Convert to windows time (seconds since 12:00:00a Jan 1, 1601) - uint64_t toWin32Time() const { - uint64_t result = seconds_ - Win32ZeroTime.seconds_; - result += nanos_ / NANOSECONDS_PER_WIN32_TICK; - return result; - } - - /// Provides the seconds and nanoseconds as results in its arguments after - /// correction for the Posix zero time. - /// @brief Convert to timespec time (ala POSIX.1b) - void getTimespecTime( uint64_t& seconds, uint32_t& nanos ) const { - seconds = seconds_ - PosixZeroTime.seconds_; - nanos = nanos_; - } - - /// Provides conversion of the TimeValue into a readable time & date. - /// @returns std::string containing the readable time value - /// @brief Convert time to a string. - std::string str() const; - - /// @} - /// @name Mutators - /// @{ - public: - /// The seconds component of the TimeValue is set to \p sec without - /// modifying the nanoseconds part. This is useful for whole second - /// arithmetic. - /// @brief Set the seconds component. - void seconds (SecondsType sec ) { - this->seconds_ = sec; - this->normalize(); - } - - /// The nanoseconds component of the TimeValue is set to \p nanos without - /// modifying the seconds part. This is useful for basic computations - /// involving just the nanoseconds portion. Note that the TimeValue will be - /// normalized after this call so that the fractional (nanoseconds) portion - /// will have the smallest equivalent value. - /// @brief Set the nanoseconds component using a number of nanoseconds. - void nanoseconds ( NanoSecondsType nanos ) { - this->nanos_ = nanos; - this->normalize(); - } - - /// The seconds component remains unchanged. - /// @brief Set the nanoseconds component using a number of microseconds. - void microseconds ( int32_t micros ) { - this->nanos_ = micros * NANOSECONDS_PER_MICROSECOND; - this->normalize(); - } - - /// The seconds component remains unchanged. - /// @brief Set the nanoseconds component using a number of milliseconds. - void milliseconds ( int32_t millis ) { - this->nanos_ = millis * NANOSECONDS_PER_MILLISECOND; - this->normalize(); - } - - /// @brief Converts from microsecond format to TimeValue format - void usec( int64_t microseconds ) { - this->seconds_ = microseconds / MICROSECONDS_PER_SECOND; - this->nanos_ = NanoSecondsType(microseconds % MICROSECONDS_PER_SECOND) * - NANOSECONDS_PER_MICROSECOND; - this->normalize(); - } - - /// @brief Converts from millisecond format to TimeValue format - void msec( int64_t milliseconds ) { - this->seconds_ = milliseconds / MILLISECONDS_PER_SECOND; - this->nanos_ = NanoSecondsType(milliseconds % MILLISECONDS_PER_SECOND) * - NANOSECONDS_PER_MILLISECOND; - this->normalize(); - } - - /// Converts the \p seconds argument from PosixTime to the corresponding - /// TimeValue and assigns that value to \p this. - /// @brief Convert seconds form PosixTime to TimeValue - void fromEpochTime( SecondsType seconds ) { - seconds_ = seconds + PosixZeroTime.seconds_; - nanos_ = 0; - this->normalize(); - } - - /// Converts the \p win32Time argument from Windows FILETIME to the - /// corresponding TimeValue and assigns that value to \p this. - /// @brief Convert seconds form Windows FILETIME to TimeValue - void fromWin32Time( uint64_t win32Time ) { - this->seconds_ = win32Time / 10000000 + Win32ZeroTime.seconds_; - this->nanos_ = NanoSecondsType(win32Time % 10000000) * 100; - } - - /// @} - /// @name Implementation - /// @{ - private: - /// This causes the values to be represented so that the fractional - /// part is minimized, possibly incrementing the seconds part. - /// @brief Normalize to canonical form. - void normalize(); - - /// @} - /// @name Data - /// @{ - private: - /// Store the values as a . - SecondsType seconds_;///< Stores the seconds part of the TimeVal - NanoSecondsType nanos_; ///< Stores the nanoseconds part of the TimeVal - /// @} - - }; - -inline TimeValue operator + (const TimeValue &tv1, const TimeValue &tv2) { - TimeValue sum (tv1.seconds_ + tv2.seconds_, tv1.nanos_ + tv2.nanos_); - sum.normalize (); - return sum; -} - -inline TimeValue operator - (const TimeValue &tv1, const TimeValue &tv2) { - TimeValue difference (tv1.seconds_ - tv2.seconds_, tv1.nanos_ - tv2.nanos_ ); - difference.normalize (); - return difference; -} - -} -} - -#endif Removed: llvm/trunk/include/llvm/System/Valgrind.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/Valgrind.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/Valgrind.h (original) +++ llvm/trunk/include/llvm/System/Valgrind.h (removed) @@ -1,32 +0,0 @@ -//===- llvm/System/Valgrind.h - Communication with Valgrind -----*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// Methods for communicating with a valgrind instance this program is running -// under. These are all no-ops unless LLVM was configured on a system with the -// valgrind headers installed and valgrind is controlling this process. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_VALGRIND_H -#define LLVM_SYSTEM_VALGRIND_H - -#include - -namespace llvm { -namespace sys { - // True if Valgrind is controlling this process. - bool RunningOnValgrind(); - - // Discard valgrind's translation of code in the range [Addr .. Addr + Len). - // Otherwise valgrind may continue to execute the old version of the code. - void ValgrindDiscardTranslations(const void *Addr, size_t Len); -} -} - -#endif Removed: llvm/trunk/include/llvm/System/system_error.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/system_error.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/include/llvm/System/system_error.h (original) +++ llvm/trunk/include/llvm/System/system_error.h (removed) @@ -1,911 +0,0 @@ -//===---------------------------- system_error ----------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This was lifted from libc++ and modified for C++03. This is called -// system_error even though it does not define that class because that's what -// it's called in C++0x. We don't define system_error because it is only used -// for exception handling, which we don't use in LLVM. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_SYSTEM_ERROR_H -#define LLVM_SYSTEM_SYSTEM_ERROR_H - -/* - system_error synopsis - -namespace std -{ - -class error_category -{ -public: - virtual ~error_category(); - - error_category(const error_category&) = delete; - error_category& operator=(const error_category&) = delete; - - virtual const char* name() const = 0; - virtual error_condition default_error_condition(int ev) const; - virtual bool equivalent(int code, const error_condition& condition) const; - virtual bool equivalent(const error_code& code, int condition) const; - virtual std::string message(int ev) const = 0; - - bool operator==(const error_category& rhs) const; - bool operator!=(const error_category& rhs) const; - bool operator<(const error_category& rhs) const; -}; - -const error_category& generic_category(); -const error_category& system_category(); - -template struct is_error_code_enum - : public false_type {}; - -template struct is_error_condition_enum - : public false_type {}; - -class error_code -{ -public: - // constructors: - error_code(); - error_code(int val, const error_category& cat); - template - error_code(ErrorCodeEnum e); - - // modifiers: - void assign(int val, const error_category& cat); - template - error_code& operator=(ErrorCodeEnum e); - void clear(); - - // observers: - int value() const; - const error_category& category() const; - error_condition default_error_condition() const; - std::string message() const; - explicit operator bool() const; -}; - -// non-member functions: -bool operator<(const error_code& lhs, const error_code& rhs); -template - basic_ostream& - operator<<(basic_ostream& os, const error_code& ec); - -class error_condition -{ -public: - // constructors: - error_condition(); - error_condition(int val, const error_category& cat); - template - error_condition(ErrorConditionEnum e); - - // modifiers: - void assign(int val, const error_category& cat); - template - error_condition& operator=(ErrorConditionEnum e); - void clear(); - - // observers: - int value() const; - const error_category& category() const; - std::string message() const; - explicit operator bool() const; -}; - -bool operator<(const error_condition& lhs, const error_condition& rhs); - -class system_error - : public runtime_error -{ -public: - system_error(error_code ec, const std::string& what_arg); - system_error(error_code ec, const char* what_arg); - system_error(error_code ec); - system_error(int ev, const error_category& ecat, const std::string& what_arg); - system_error(int ev, const error_category& ecat, const char* what_arg); - system_error(int ev, const error_category& ecat); - - const error_code& code() const throw(); - const char* what() const throw(); -}; - -enum class errc -{ - address_family_not_supported, // EAFNOSUPPORT - address_in_use, // EADDRINUSE - address_not_available, // EADDRNOTAVAIL - already_connected, // EISCONN - argument_list_too_long, // E2BIG - argument_out_of_domain, // EDOM - bad_address, // EFAULT - bad_file_descriptor, // EBADF - bad_message, // EBADMSG - broken_pipe, // EPIPE - connection_aborted, // ECONNABORTED - connection_already_in_progress, // EALREADY - connection_refused, // ECONNREFUSED - connection_reset, // ECONNRESET - cross_device_link, // EXDEV - destination_address_required, // EDESTADDRREQ - device_or_resource_busy, // EBUSY - directory_not_empty, // ENOTEMPTY - executable_format_error, // ENOEXEC - file_exists, // EEXIST - file_too_large, // EFBIG - filename_too_long, // ENAMETOOLONG - function_not_supported, // ENOSYS - host_unreachable, // EHOSTUNREACH - identifier_removed, // EIDRM - illegal_byte_sequence, // EILSEQ - inappropriate_io_control_operation, // ENOTTY - interrupted, // EINTR - invalid_argument, // EINVAL - invalid_seek, // ESPIPE - io_error, // EIO - is_a_directory, // EISDIR - message_size, // EMSGSIZE - network_down, // ENETDOWN - network_reset, // ENETRESET - network_unreachable, // ENETUNREACH - no_buffer_space, // ENOBUFS - no_child_process, // ECHILD - no_link, // ENOLINK - no_lock_available, // ENOLCK - no_message_available, // ENODATA - no_message, // ENOMSG - no_protocol_option, // ENOPROTOOPT - no_space_on_device, // ENOSPC - no_stream_resources, // ENOSR - no_such_device_or_address, // ENXIO - no_such_device, // ENODEV - no_such_file_or_directory, // ENOENT - no_such_process, // ESRCH - not_a_directory, // ENOTDIR - not_a_socket, // ENOTSOCK - not_a_stream, // ENOSTR - not_connected, // ENOTCONN - not_enough_memory, // ENOMEM - not_supported, // ENOTSUP - operation_canceled, // ECANCELED - operation_in_progress, // EINPROGRESS - operation_not_permitted, // EPERM - operation_not_supported, // EOPNOTSUPP - operation_would_block, // EWOULDBLOCK - owner_dead, // EOWNERDEAD - permission_denied, // EACCES - protocol_error, // EPROTO - protocol_not_supported, // EPROTONOSUPPORT - read_only_file_system, // EROFS - resource_deadlock_would_occur, // EDEADLK - resource_unavailable_try_again, // EAGAIN - result_out_of_range, // ERANGE - state_not_recoverable, // ENOTRECOVERABLE - stream_timeout, // ETIME - text_file_busy, // ETXTBSY - timed_out, // ETIMEDOUT - too_many_files_open_in_system, // ENFILE - too_many_files_open, // EMFILE - too_many_links, // EMLINK - too_many_symbolic_link_levels, // ELOOP - value_too_large, // EOVERFLOW - wrong_protocol_type // EPROTOTYPE -}; - -template <> struct is_error_condition_enum : true_type { } - -error_code make_error_code(errc e); -error_condition make_error_condition(errc e); - -// Comparison operators: -bool operator==(const error_code& lhs, const error_code& rhs); -bool operator==(const error_code& lhs, const error_condition& rhs); -bool operator==(const error_condition& lhs, const error_code& rhs); -bool operator==(const error_condition& lhs, const error_condition& rhs); -bool operator!=(const error_code& lhs, const error_code& rhs); -bool operator!=(const error_code& lhs, const error_condition& rhs); -bool operator!=(const error_condition& lhs, const error_code& rhs); -bool operator!=(const error_condition& lhs, const error_condition& rhs); - -template <> struct hash; - -} // std - -*/ - -#include "llvm/Config/config.h" -#include "llvm/Support/type_traits.h" -#include -#include - -// This must be here instead of a .inc file because it is used in the definition -// of the enum values below. -#ifdef LLVM_ON_WIN32 - // VS 2008 needs this for some of the defines below. -# include - - // The following numbers were taken from VS2010. -# ifndef EAFNOSUPPORT -# define EAFNOSUPPORT WSAEAFNOSUPPORT -# endif -# ifndef EADDRINUSE -# define EADDRINUSE WSAEADDRINUSE -# endif -# ifndef EADDRNOTAVAIL -# define EADDRNOTAVAIL WSAEADDRNOTAVAIL -# endif -# ifndef EISCONN -# define EISCONN WSAEISCONN -# endif -# ifndef E2BIG -# define E2BIG WSAE2BIG -# endif -# ifndef EDOM -# define EDOM WSAEDOM -# endif -# ifndef EFAULT -# define EFAULT WSAEFAULT -# endif -# ifndef EBADF -# define EBADF WSAEBADF -# endif -# ifndef EBADMSG -# define EBADMSG 104 -# endif -# ifndef EPIPE -# define EPIPE WSAEPIPE -# endif -# ifndef ECONNABORTED -# define ECONNABORTED WSAECONNABORTED -# endif -# ifndef EALREADY -# define EALREADY WSAEALREADY -# endif -# ifndef ECONNREFUSED -# define ECONNREFUSED WSAECONNREFUSED -# endif -# ifndef ECONNRESET -# define ECONNRESET WSAECONNRESET -# endif -# ifndef EXDEV -# define EXDEV WSAEXDEV -# endif -# ifndef EDESTADDRREQ -# define EDESTADDRREQ WSAEDESTADDRREQ -# endif -# ifndef EBUSY -# define EBUSY WSAEBUSY -# endif -# ifndef ENOTEMPTY -# define ENOTEMPTY WSAENOTEMPTY -# endif -# ifndef ENOEXEC -# define ENOEXEC WSAENOEXEC -# endif -# ifndef EEXIST -# define EEXIST WSAEEXIST -# endif -# ifndef EFBIG -# define EFBIG WSAEFBIG -# endif -# ifndef ENAMETOOLONG -# define ENAMETOOLONG WSAENAMETOOLONG -# endif -# ifndef ENOSYS -# define ENOSYS WSAENOSYS -# endif -# ifndef EHOSTUNREACH -# define EHOSTUNREACH WSAEHOSTUNREACH -# endif -# ifndef EIDRM -# define EIDRM 111 -# endif -# ifndef EILSEQ -# define EILSEQ WSAEILSEQ -# endif -# ifndef ENOTTY -# define ENOTTY WSAENOTTY -# endif -# ifndef EINTR -# define EINTR WSAEINTR -# endif -# ifndef EINVAL -# define EINVAL WSAEINVAL -# endif -# ifndef ESPIPE -# define ESPIPE WSAESPIPE -# endif -# ifndef EIO -# define EIO WSAEIO -# endif -# ifndef EISDIR -# define EISDIR WSAEISDIR -# endif -# ifndef EMSGSIZE -# define EMSGSIZE WSAEMSGSIZE -# endif -# ifndef ENETDOWN -# define ENETDOWN WSAENETDOWN -# endif -# ifndef ENETRESET -# define ENETRESET WSAENETRESET -# endif -# ifndef ENETUNREACH -# define ENETUNREACH WSAENETUNREACH -# endif -# ifndef ENOBUFS -# define ENOBUFS WSAENOBUFS -# endif -# ifndef ECHILD -# define ECHILD WSAECHILD -# endif -# ifndef ENOLINK -# define ENOLINK 121 -# endif -# ifndef ENOLCK -# define ENOLCK WSAENOLCK -# endif -# ifndef ENODATA -# define ENODATA 120 -# endif -# ifndef ENOMSG -# define ENOMSG 122 -# endif -# ifndef ENOPROTOOPT -# define ENOPROTOOPT WSAENOPROTOOPT -# endif -# ifndef ENOSPC -# define ENOSPC WSAENOSPC -# endif -# ifndef ENOSR -# define ENOSR 124 -# endif -# ifndef ENXIO -# define ENXIO WSAENXIO -# endif -# ifndef ENODEV -# define ENODEV WSAENODEV -# endif -# ifndef ENOENT -# define ENOENT WSAENOENT -# endif -# ifndef ESRCH -# define ESRCH WSAESRCH -# endif -# ifndef ENOTDIR -# define ENOTDIR WSAENOTDIR -# endif -# ifndef ENOTSOCK -# define ENOTSOCK WSAENOTSOCK -# endif -# ifndef ENOSTR -# define ENOSTR 125 -# endif -# ifndef ENOTCONN -# define ENOTCONN WSAENOTCONN -# endif -# ifndef ENOMEM -# define ENOMEM WSAENOMEM -# endif -# ifndef ENOTSUP -# define ENOTSUP 129 -# endif -# ifndef ECANCELED -# define ECANCELED 105 -# endif -# ifndef EINPROGRESS -# define EINPROGRESS WSAEINPROGRESS -# endif -# ifndef EPERM -# define EPERM WSAEPERM -# endif -# ifndef EOPNOTSUPP -# define EOPNOTSUPP WSAEOPNOTSUPP -# endif -# ifndef EWOULDBLOCK -# define EWOULDBLOCK WSAEWOULDBLOCK -# endif -# ifndef EOWNERDEAD -# define EOWNERDEAD 133 -# endif -# ifndef EACCES -# define EACCES WSAEACCES -# endif -# ifndef EPROTO -# define EPROTO 134 -# endif -# ifndef EPROTONOSUPPORT -# define EPROTONOSUPPORT WSAEPROTONOSUPPORT -# endif -# ifndef EROFS -# define EROFS WSAEROFS -# endif -# ifndef EDEADLK -# define EDEADLK WSAEDEADLK -# endif -# ifndef EAGAIN -# define EAGAIN WSAEAGAIN -# endif -# ifndef ERANGE -# define ERANGE WSAERANGE -# endif -# ifndef ENOTRECOVERABLE -# define ENOTRECOVERABLE 127 -# endif -# ifndef ETIME -# define ETIME 137 -# endif -# ifndef ETXTBSY -# define ETXTBSY 139 -# endif -# ifndef ETIMEDOUT -# define ETIMEDOUT WSAETIMEDOUT -# endif -# ifndef ENFILE -# define ENFILE WSAENFILE -# endif -# ifndef EMFILE -# define EMFILE WSAEMFILE -# endif -# ifndef EMLINK -# define EMLINK WSAEMLINK -# endif -# ifndef ELOOP -# define ELOOP WSAELOOP -# endif -# ifndef EOVERFLOW -# define EOVERFLOW 132 -# endif -# ifndef EPROTOTYPE -# define EPROTOTYPE WSAEPROTOTYPE -# endif -#endif - -namespace llvm { - -template -struct integral_constant { - typedef T value_type; - static const value_type value = v; - typedef integral_constant type; - operator value_type() { return value; } -}; - -typedef integral_constant true_type; -typedef integral_constant false_type; - -// is_error_code_enum - -template struct is_error_code_enum : public false_type {}; - -// is_error_condition_enum - -template struct is_error_condition_enum : public false_type {}; - -// Some error codes are not present on all platforms, so we provide equivalents -// for them: - -//enum class errc -struct errc { -enum _ { - success = 0, - address_family_not_supported = EAFNOSUPPORT, - address_in_use = EADDRINUSE, - address_not_available = EADDRNOTAVAIL, - already_connected = EISCONN, - argument_list_too_long = E2BIG, - argument_out_of_domain = EDOM, - bad_address = EFAULT, - bad_file_descriptor = EBADF, -#ifdef EBADMSG - bad_message = EBADMSG, -#else - bad_message = EINVAL, -#endif - broken_pipe = EPIPE, - connection_aborted = ECONNABORTED, - connection_already_in_progress = EALREADY, - connection_refused = ECONNREFUSED, - connection_reset = ECONNRESET, - cross_device_link = EXDEV, - destination_address_required = EDESTADDRREQ, - device_or_resource_busy = EBUSY, - directory_not_empty = ENOTEMPTY, - executable_format_error = ENOEXEC, - file_exists = EEXIST, - file_too_large = EFBIG, - filename_too_long = ENAMETOOLONG, - function_not_supported = ENOSYS, - host_unreachable = EHOSTUNREACH, - identifier_removed = EIDRM, - illegal_byte_sequence = EILSEQ, - inappropriate_io_control_operation = ENOTTY, - interrupted = EINTR, - invalid_argument = EINVAL, - invalid_seek = ESPIPE, - io_error = EIO, - is_a_directory = EISDIR, - message_size = EMSGSIZE, - network_down = ENETDOWN, - network_reset = ENETRESET, - network_unreachable = ENETUNREACH, - no_buffer_space = ENOBUFS, - no_child_process = ECHILD, -#ifdef ENOLINK - no_link = ENOLINK, -#else - no_link = EINVAL, -#endif - no_lock_available = ENOLCK, -#ifdef ENODATA - no_message_available = ENODATA, -#else - no_message_available = ENOMSG, -#endif - no_message = ENOMSG, - no_protocol_option = ENOPROTOOPT, - no_space_on_device = ENOSPC, -#ifdef ENOSR - no_stream_resources = ENOSR, -#else - no_stream_resources = ENOMEM, -#endif - no_such_device_or_address = ENXIO, - no_such_device = ENODEV, - no_such_file_or_directory = ENOENT, - no_such_process = ESRCH, - not_a_directory = ENOTDIR, - not_a_socket = ENOTSOCK, -#ifdef ENOSTR - not_a_stream = ENOSTR, -#else - not_a_stream = EINVAL, -#endif - not_connected = ENOTCONN, - not_enough_memory = ENOMEM, - not_supported = ENOTSUP, -#ifdef ECANCELED - operation_canceled = ECANCELED, -#else - operation_canceled = EINVAL, -#endif - operation_in_progress = EINPROGRESS, - operation_not_permitted = EPERM, - operation_not_supported = EOPNOTSUPP, - operation_would_block = EWOULDBLOCK, -#ifdef EOWNERDEAD - owner_dead = EOWNERDEAD, -#else - owner_dead = EINVAL, -#endif - permission_denied = EACCES, -#ifdef EPROTO - protocol_error = EPROTO, -#else - protocol_error = EINVAL, -#endif - protocol_not_supported = EPROTONOSUPPORT, - read_only_file_system = EROFS, - resource_deadlock_would_occur = EDEADLK, - resource_unavailable_try_again = EAGAIN, - result_out_of_range = ERANGE, -#ifdef ENOTRECOVERABLE - state_not_recoverable = ENOTRECOVERABLE, -#else - state_not_recoverable = EINVAL, -#endif -#ifdef ETIME - stream_timeout = ETIME, -#else - stream_timeout = ETIMEDOUT, -#endif - text_file_busy = ETXTBSY, - timed_out = ETIMEDOUT, - too_many_files_open_in_system = ENFILE, - too_many_files_open = EMFILE, - too_many_links = EMLINK, - too_many_symbolic_link_levels = ELOOP, - value_too_large = EOVERFLOW, - wrong_protocol_type = EPROTOTYPE -}; - - _ v_; - - errc(_ v) : v_(v) {} - operator int() const {return v_;} -}; - -template <> struct is_error_condition_enum : true_type { }; - -template <> struct is_error_condition_enum : true_type { }; - -class error_condition; -class error_code; - -// class error_category - -class _do_message; - -class error_category -{ -public: - virtual ~error_category(); - -private: - error_category(); - error_category(const error_category&);// = delete; - error_category& operator=(const error_category&);// = delete; - -public: - virtual const char* name() const = 0; - virtual error_condition default_error_condition(int _ev) const; - virtual bool equivalent(int _code, const error_condition& _condition) const; - virtual bool equivalent(const error_code& _code, int _condition) const; - virtual std::string message(int _ev) const = 0; - - bool operator==(const error_category& _rhs) const {return this == &_rhs;} - - bool operator!=(const error_category& _rhs) const {return !(*this == _rhs);} - - bool operator< (const error_category& _rhs) const {return this < &_rhs;} - - friend class _do_message; -}; - -class _do_message : public error_category -{ -public: - virtual std::string message(int ev) const; -}; - -const error_category& generic_category(); -const error_category& system_category(); - -class error_condition -{ - int _val_; - const error_category* _cat_; -public: - error_condition() : _val_(0), _cat_(&generic_category()) {} - - error_condition(int _val, const error_category& _cat) - : _val_(_val), _cat_(&_cat) {} - - template - error_condition(E _e, typename enable_if_c< - is_error_condition_enum::value - >::type* = 0) - {*this = make_error_condition(_e);} - - void assign(int _val, const error_category& _cat) { - _val_ = _val; - _cat_ = &_cat; - } - - template - typename enable_if_c - < - is_error_condition_enum::value, - error_condition& - >::type - operator=(E _e) - {*this = make_error_condition(_e); return *this;} - - void clear() { - _val_ = 0; - _cat_ = &generic_category(); - } - - int value() const {return _val_;} - - const error_category& category() const {return *_cat_;} - std::string message() const; - - // explicit - operator bool() const {return _val_ != 0;} -}; - -inline error_condition make_error_condition(errc _e) { - return error_condition(static_cast(_e), generic_category()); -} - -inline bool operator<(const error_condition& _x, const error_condition& _y) { - return _x.category() < _y.category() - || (_x.category() == _y.category() && _x.value() < _y.value()); -} - -// error_code - -class error_code { - int _val_; - const error_category* _cat_; -public: - error_code() : _val_(0), _cat_(&system_category()) {} - - error_code(int _val, const error_category& _cat) - : _val_(_val), _cat_(&_cat) {} - - template - error_code(E _e, typename enable_if_c< - is_error_code_enum::value - >::type* = 0) { - *this = make_error_code(_e); - } - - void assign(int _val, const error_category& _cat) { - _val_ = _val; - _cat_ = &_cat; - } - - template - typename enable_if_c - < - is_error_code_enum::value, - error_code& - >::type - operator=(E _e) - {*this = make_error_code(_e); return *this;} - - void clear() { - _val_ = 0; - _cat_ = &system_category(); - } - - int value() const {return _val_;} - - const error_category& category() const {return *_cat_;} - - error_condition default_error_condition() const - {return _cat_->default_error_condition(_val_);} - - std::string message() const; - - // explicit - operator bool() const {return _val_ != 0;} -}; - -inline error_code make_error_code(errc _e) { - return error_code(static_cast(_e), generic_category()); -} - -inline bool operator<(const error_code& _x, const error_code& _y) { - return _x.category() < _y.category() - || (_x.category() == _y.category() && _x.value() < _y.value()); -} - -inline bool operator==(const error_code& _x, const error_code& _y) { - return _x.category() == _y.category() && _x.value() == _y.value(); -} - -inline bool operator==(const error_code& _x, const error_condition& _y) { - return _x.category().equivalent(_x.value(), _y) - || _y.category().equivalent(_x, _y.value()); -} - -inline bool operator==(const error_condition& _x, const error_code& _y) { - return _y == _x; -} - -inline bool operator==(const error_condition& _x, const error_condition& _y) { - return _x.category() == _y.category() && _x.value() == _y.value(); -} - -inline bool operator!=(const error_code& _x, const error_code& _y) { - return !(_x == _y); -} - -inline bool operator!=(const error_code& _x, const error_condition& _y) { - return !(_x == _y); -} - -inline bool operator!=(const error_condition& _x, const error_code& _y) { - return !(_x == _y); -} - -inline bool operator!=(const error_condition& _x, const error_condition& _y) { - return !(_x == _y); -} - -// system_error - -} // end namespace llvm - -// This needs to stay here for KillTheDoctor. -#ifdef LLVM_ON_WIN32 -// FIXME: These two headers really really really need to be removed from here. -// Not only is it a violation of System, they define the stupid min and -// max macros :(. -#include -#include - -namespace llvm { - -// To construct an error_code after an API error: -// -// error_code( ::GetLastError(), system_category() ) -struct windows_error { -enum _ { - success = 0, - // These names and values are based on Windows winerror.h - // This is not a complete list. - invalid_function = ERROR_INVALID_FUNCTION, - file_not_found = ERROR_FILE_NOT_FOUND, - path_not_found = ERROR_PATH_NOT_FOUND, - too_many_open_files = ERROR_TOO_MANY_OPEN_FILES, - access_denied = ERROR_ACCESS_DENIED, - invalid_handle = ERROR_INVALID_HANDLE, - arena_trashed = ERROR_ARENA_TRASHED, - not_enough_memory = ERROR_NOT_ENOUGH_MEMORY, - invalid_block = ERROR_INVALID_BLOCK, - bad_environment = ERROR_BAD_ENVIRONMENT, - bad_format = ERROR_BAD_FORMAT, - invalid_access = ERROR_INVALID_ACCESS, - outofmemory = ERROR_OUTOFMEMORY, - invalid_drive = ERROR_INVALID_DRIVE, - current_directory = ERROR_CURRENT_DIRECTORY, - not_same_device = ERROR_NOT_SAME_DEVICE, - no_more_files = ERROR_NO_MORE_FILES, - write_protect = ERROR_WRITE_PROTECT, - bad_unit = ERROR_BAD_UNIT, - not_ready = ERROR_NOT_READY, - bad_command = ERROR_BAD_COMMAND, - crc = ERROR_CRC, - bad_length = ERROR_BAD_LENGTH, - seek = ERROR_SEEK, - not_dos_disk = ERROR_NOT_DOS_DISK, - sector_not_found = ERROR_SECTOR_NOT_FOUND, - out_of_paper = ERROR_OUT_OF_PAPER, - write_fault = ERROR_WRITE_FAULT, - read_fault = ERROR_READ_FAULT, - gen_failure = ERROR_GEN_FAILURE, - sharing_violation = ERROR_SHARING_VIOLATION, - lock_violation = ERROR_LOCK_VIOLATION, - wrong_disk = ERROR_WRONG_DISK, - sharing_buffer_exceeded = ERROR_SHARING_BUFFER_EXCEEDED, - handle_eof = ERROR_HANDLE_EOF, - handle_disk_full = ERROR_HANDLE_DISK_FULL, - rem_not_list = ERROR_REM_NOT_LIST, - dup_name = ERROR_DUP_NAME, - bad_net_path = ERROR_BAD_NETPATH, - network_busy = ERROR_NETWORK_BUSY, - file_exists = ERROR_FILE_EXISTS, - cannot_make = ERROR_CANNOT_MAKE, - broken_pipe = ERROR_BROKEN_PIPE, - open_failed = ERROR_OPEN_FAILED, - buffer_overflow = ERROR_BUFFER_OVERFLOW, - disk_full = ERROR_DISK_FULL, - lock_failed = ERROR_LOCK_FAILED, - busy = ERROR_BUSY, - cancel_violation = ERROR_CANCEL_VIOLATION, - already_exists = ERROR_ALREADY_EXISTS -}; - _ v_; - - windows_error(_ v) : v_(v) {} - explicit windows_error(DWORD v) : v_(_(v)) {} - operator int() const {return v_;} -}; - - -template <> struct is_error_code_enum : true_type { }; - -template <> struct is_error_code_enum : true_type { }; - -inline error_code make_error_code(windows_error e) { - return error_code(static_cast(e), system_category()); -} - -} // end namespace llvm - -#endif // LLVM_ON_WINDOWS - -#endif Modified: llvm/trunk/include/llvm/Target/SubtargetFeature.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/SubtargetFeature.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/SubtargetFeature.h (original) +++ llvm/trunk/include/llvm/Target/SubtargetFeature.h Mon Nov 29 12:16:10 2010 @@ -22,7 +22,7 @@ #include #include #include "llvm/ADT/Triple.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { class raw_ostream; Modified: llvm/trunk/include/llvm/Target/TargetAsmBackend.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetAsmBackend.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetAsmBackend.h (original) +++ llvm/trunk/include/llvm/Target/TargetAsmBackend.h Mon Nov 29 12:16:10 2010 @@ -10,7 +10,7 @@ #ifndef LLVM_TARGET_TARGETASMBACKEND_H #define LLVM_TARGET_TARGETASMBACKEND_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { class MCDataFragment; Modified: llvm/trunk/include/llvm/Target/TargetData.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetData.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetData.h (original) +++ llvm/trunk/include/llvm/Target/TargetData.h Mon Nov 29 12:16:10 2010 @@ -22,7 +22,7 @@ #include "llvm/Pass.h" #include "llvm/ADT/SmallVector.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { Modified: llvm/trunk/include/llvm/Target/TargetInstrDesc.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetInstrDesc.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetInstrDesc.h (original) +++ llvm/trunk/include/llvm/Target/TargetInstrDesc.h Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #ifndef LLVM_TARGET_TARGETINSTRDESC_H #define LLVM_TARGET_TARGETINSTRDESC_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { Modified: llvm/trunk/include/llvm/Target/TargetJITInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetJITInfo.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetJITInfo.h (original) +++ llvm/trunk/include/llvm/Target/TargetJITInfo.h Mon Nov 29 12:16:10 2010 @@ -19,7 +19,7 @@ #include #include "llvm/Support/ErrorHandling.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { class Function; Modified: llvm/trunk/include/llvm/TypeSymbolTable.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/TypeSymbolTable.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/TypeSymbolTable.h (original) +++ llvm/trunk/include/llvm/TypeSymbolTable.h Mon Nov 29 12:16:10 2010 @@ -16,7 +16,7 @@ #include "llvm/Type.h" #include "llvm/ADT/StringRef.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include namespace llvm { Modified: llvm/trunk/include/llvm/ValueSymbolTable.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ValueSymbolTable.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/include/llvm/ValueSymbolTable.h (original) +++ llvm/trunk/include/llvm/ValueSymbolTable.h Mon Nov 29 12:16:10 2010 @@ -16,7 +16,7 @@ #include "llvm/Value.h" #include "llvm/ADT/StringMap.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { template Modified: llvm/trunk/lib/Analysis/ConstantFolding.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ConstantFolding.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/ConstantFolding.cpp (original) +++ llvm/trunk/lib/Analysis/ConstantFolding.cpp Mon Nov 29 12:16:10 2010 @@ -30,7 +30,7 @@ #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/GetElementPtrTypeIterator.h" #include "llvm/Support/MathExtras.h" -#include "llvm/System/FEnv.h" +#include "llvm/Support/FEnv.h" #include #include using namespace llvm; Modified: llvm/trunk/lib/Archive/Archive.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Archive/Archive.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Archive/Archive.cpp (original) +++ llvm/trunk/lib/Archive/Archive.cpp Mon Nov 29 12:16:10 2010 @@ -16,7 +16,7 @@ #include "llvm/Bitcode/ReaderWriter.h" #include "llvm/Module.h" #include "llvm/Support/MemoryBuffer.h" -#include "llvm/System/Process.h" +#include "llvm/Support/Process.h" #include #include using namespace llvm; Modified: llvm/trunk/lib/Archive/ArchiveInternals.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Archive/ArchiveInternals.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Archive/ArchiveInternals.h (original) +++ llvm/trunk/lib/Archive/ArchiveInternals.h Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #define LIB_ARCHIVE_ARCHIVEINTERNALS_H #include "llvm/Bitcode/Archive.h" -#include "llvm/System/TimeValue.h" +#include "llvm/Support/TimeValue.h" #include "llvm/ADT/StringExtras.h" #include Modified: llvm/trunk/lib/Archive/ArchiveWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Archive/ArchiveWriter.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Archive/ArchiveWriter.cpp (original) +++ llvm/trunk/lib/Archive/ArchiveWriter.cpp Mon Nov 29 12:16:10 2010 @@ -16,8 +16,8 @@ #include "llvm/ADT/OwningPtr.h" #include "llvm/Bitcode/ReaderWriter.h" #include "llvm/Support/MemoryBuffer.h" -#include "llvm/System/Process.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Process.h" +#include "llvm/Support/Signals.h" #include #include #include Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original) +++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Mon Nov 29 12:16:10 2010 @@ -26,7 +26,7 @@ #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Program.h" +#include "llvm/Support/Program.h" using namespace llvm; /// These are manifest constants used by the bitcode writer. They do not need to Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Mon Nov 29 12:16:10 2010 @@ -39,7 +39,7 @@ #include "llvm/Support/ValueHandle.h" #include "llvm/Support/FormattedStream.h" #include "llvm/Support/Timer.h" -#include "llvm/System/Path.h" +#include "llvm/Support/Path.h" using namespace llvm; static cl::opt PrintDbgScope("print-dbgscope", cl::Hidden, Modified: llvm/trunk/lib/CodeGen/ELF.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ELF.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/ELF.h (original) +++ llvm/trunk/lib/CodeGen/ELF.h Mon Nov 29 12:16:10 2010 @@ -23,7 +23,7 @@ #include "llvm/CodeGen/BinaryObject.h" #include "llvm/CodeGen/MachineRelocation.h" #include "llvm/Support/ELF.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { class GlobalValue; Modified: llvm/trunk/lib/CodeGen/PseudoSourceValue.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PseudoSourceValue.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/PseudoSourceValue.cpp (original) +++ llvm/trunk/lib/CodeGen/PseudoSourceValue.cpp Mon Nov 29 12:16:10 2010 @@ -18,7 +18,7 @@ #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Mutex.h" +#include "llvm/Support/Mutex.h" #include using namespace llvm; Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h Mon Nov 29 12:16:10 2010 @@ -16,7 +16,7 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/Support/DebugLoc.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Mon Nov 29 12:16:10 2010 @@ -44,7 +44,7 @@ #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Mutex.h" +#include "llvm/Support/Mutex.h" #include "llvm/ADT/SetVector.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallSet.h" Modified: llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp (original) +++ llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp Mon Nov 29 12:16:10 2010 @@ -26,8 +26,8 @@ #include "llvm/Support/MutexGuard.h" #include "llvm/Support/ValueHandle.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/DynamicLibrary.h" -#include "llvm/System/Host.h" +#include "llvm/Support/DynamicLibrary.h" +#include "llvm/Support/Host.h" #include "llvm/Target/TargetData.h" #include #include Modified: llvm/trunk/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp (original) +++ llvm/trunk/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp Mon Nov 29 12:16:10 2010 @@ -24,10 +24,10 @@ #include "llvm/Module.h" #include "llvm/Config/config.h" // Detect libffi #include "llvm/Support/ErrorHandling.h" -#include "llvm/System/DynamicLibrary.h" +#include "llvm/Support/DynamicLibrary.h" #include "llvm/Target/TargetData.h" #include "llvm/Support/ManagedStatic.h" -#include "llvm/System/Mutex.h" +#include "llvm/Support/Mutex.h" #include #include #include Modified: llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.h (original) +++ llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.h Mon Nov 29 12:16:10 2010 @@ -19,7 +19,7 @@ #include "llvm/ExecutionEngine/GenericValue.h" #include "llvm/Target/TargetData.h" #include "llvm/Support/CallSite.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/InstVisitor.h" #include "llvm/Support/raw_ostream.h" Modified: llvm/trunk/lib/ExecutionEngine/JIT/Intercept.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JIT/Intercept.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/ExecutionEngine/JIT/Intercept.cpp (original) +++ llvm/trunk/lib/ExecutionEngine/JIT/Intercept.cpp Mon Nov 29 12:16:10 2010 @@ -17,7 +17,7 @@ #include "JIT.h" #include "llvm/Support/ErrorHandling.h" -#include "llvm/System/DynamicLibrary.h" +#include "llvm/Support/DynamicLibrary.h" #include "llvm/Config/config.h" using namespace llvm; Modified: llvm/trunk/lib/ExecutionEngine/JIT/JIT.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JIT/JIT.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/ExecutionEngine/JIT/JIT.cpp (original) +++ llvm/trunk/lib/ExecutionEngine/JIT/JIT.cpp Mon Nov 29 12:16:10 2010 @@ -30,7 +30,7 @@ #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/MutexGuard.h" -#include "llvm/System/DynamicLibrary.h" +#include "llvm/Support/DynamicLibrary.h" #include "llvm/Config/config.h" using namespace llvm; Modified: llvm/trunk/lib/ExecutionEngine/JIT/JITDebugRegisterer.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JIT/JITDebugRegisterer.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/ExecutionEngine/JIT/JITDebugRegisterer.cpp (original) +++ llvm/trunk/lib/ExecutionEngine/JIT/JITDebugRegisterer.cpp Mon Nov 29 12:16:10 2010 @@ -25,7 +25,7 @@ #include "llvm/Support/Compiler.h" #include "llvm/Support/MutexGuard.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Mutex.h" +#include "llvm/Support/Mutex.h" #include #include Modified: llvm/trunk/lib/ExecutionEngine/JIT/JITDebugRegisterer.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JIT/JITDebugRegisterer.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/ExecutionEngine/JIT/JITDebugRegisterer.h (original) +++ llvm/trunk/lib/ExecutionEngine/JIT/JITDebugRegisterer.h Mon Nov 29 12:16:10 2010 @@ -16,7 +16,7 @@ #define LLVM_EXECUTION_ENGINE_JIT_DEBUGREGISTERER_H #include "llvm/ADT/DenseMap.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include // This must be kept in sync with gdb/gdb/jit.h . Modified: llvm/trunk/lib/ExecutionEngine/JIT/JITEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JIT/JITEmitter.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/ExecutionEngine/JIT/JITEmitter.cpp (original) +++ llvm/trunk/lib/ExecutionEngine/JIT/JITEmitter.cpp Mon Nov 29 12:16:10 2010 @@ -42,8 +42,8 @@ #include "llvm/Support/MutexGuard.h" #include "llvm/Support/ValueHandle.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Disassembler.h" -#include "llvm/System/Memory.h" +#include "llvm/Support/Disassembler.h" +#include "llvm/Support/Memory.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallVector.h" Modified: llvm/trunk/lib/ExecutionEngine/JIT/JITMemoryManager.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JIT/JITMemoryManager.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/ExecutionEngine/JIT/JITMemoryManager.cpp (original) +++ llvm/trunk/lib/ExecutionEngine/JIT/JITMemoryManager.cpp Mon Nov 29 12:16:10 2010 @@ -22,7 +22,7 @@ #include "llvm/Support/Debug.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Memory.h" +#include "llvm/Support/Memory.h" #include #include #include Modified: llvm/trunk/lib/ExecutionEngine/JIT/OProfileJITEventListener.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JIT/OProfileJITEventListener.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/ExecutionEngine/JIT/OProfileJITEventListener.cpp (original) +++ llvm/trunk/lib/ExecutionEngine/JIT/OProfileJITEventListener.cpp Mon Nov 29 12:16:10 2010 @@ -26,7 +26,7 @@ #include "llvm/Support/Debug.h" #include "llvm/Support/ValueHandle.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Errno.h" +#include "llvm/Support/Errno.h" #include "llvm/Config/config.h" #include using namespace llvm; Modified: llvm/trunk/lib/ExecutionEngine/JIT/TargetSelect.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JIT/TargetSelect.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/ExecutionEngine/JIT/TargetSelect.cpp (original) +++ llvm/trunk/lib/ExecutionEngine/JIT/TargetSelect.cpp Mon Nov 29 12:16:10 2010 @@ -18,7 +18,7 @@ #include "llvm/ADT/Triple.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Host.h" +#include "llvm/Support/Host.h" #include "llvm/Target/SubtargetFeature.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetRegistry.h" Modified: llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp (original) +++ llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp Mon Nov 29 12:16:10 2010 @@ -11,7 +11,7 @@ #include "llvm/ExecutionEngine/GenericValue.h" #include "llvm/ExecutionEngine/MCJIT.h" #include "llvm/Support/ErrorHandling.h" -#include "llvm/System/DynamicLibrary.h" +#include "llvm/Support/DynamicLibrary.h" using namespace llvm; Modified: llvm/trunk/lib/ExecutionEngine/MCJIT/TargetSelect.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/MCJIT/TargetSelect.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/ExecutionEngine/MCJIT/TargetSelect.cpp (original) +++ llvm/trunk/lib/ExecutionEngine/MCJIT/TargetSelect.cpp Mon Nov 29 12:16:10 2010 @@ -18,7 +18,7 @@ #include "llvm/ADT/Triple.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Host.h" +#include "llvm/Support/Host.h" #include "llvm/Target/SubtargetFeature.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetRegistry.h" Modified: llvm/trunk/lib/Linker/LinkItems.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Linker/LinkItems.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Linker/LinkItems.cpp (original) +++ llvm/trunk/lib/Linker/LinkItems.cpp Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #include "llvm/Linker.h" #include "llvm/Module.h" #include "llvm/Bitcode/ReaderWriter.h" -#include "llvm/System/Path.h" +#include "llvm/Support/Path.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/MemoryBuffer.h" using namespace llvm; Modified: llvm/trunk/lib/Linker/LinkModules.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Linker/LinkModules.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Linker/LinkModules.cpp (original) +++ llvm/trunk/lib/Linker/LinkModules.cpp Mon Nov 29 12:16:10 2010 @@ -28,7 +28,7 @@ #include "llvm/Support/Debug.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Path.h" +#include "llvm/Support/Path.h" #include "llvm/Transforms/Utils/ValueMapper.h" #include "llvm/ADT/DenseMap.h" using namespace llvm; Modified: llvm/trunk/lib/Linker/Linker.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Linker/Linker.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Linker/Linker.cpp (original) +++ llvm/trunk/lib/Linker/Linker.cpp Mon Nov 29 12:16:10 2010 @@ -14,7 +14,7 @@ #include "llvm/Linker.h" #include "llvm/Module.h" #include "llvm/Bitcode/ReaderWriter.h" -#include "llvm/System/Path.h" +#include "llvm/Support/Path.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Config/config.h" Modified: llvm/trunk/lib/MC/MCAsmInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmInfo.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/MC/MCAsmInfo.cpp (original) +++ llvm/trunk/lib/MC/MCAsmInfo.cpp Mon Nov 29 12:16:10 2010 @@ -13,7 +13,7 @@ //===----------------------------------------------------------------------===// #include "llvm/MC/MCAsmInfo.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include #include using namespace llvm; Modified: llvm/trunk/lib/MC/MCDisassembler/EDDisassembler.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDisassembler/EDDisassembler.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/MC/MCDisassembler/EDDisassembler.h (original) +++ llvm/trunk/lib/MC/MCDisassembler/EDDisassembler.h Mon Nov 29 12:16:10 2010 @@ -21,7 +21,7 @@ #include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/Triple.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Mutex.h" +#include "llvm/Support/Mutex.h" #include #include Modified: llvm/trunk/lib/MC/MCDisassembler/EDInst.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDisassembler/EDInst.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/MC/MCDisassembler/EDInst.h (original) +++ llvm/trunk/lib/MC/MCDisassembler/EDInst.h Mon Nov 29 12:16:10 2010 @@ -16,7 +16,7 @@ #ifndef LLVM_EDINST_H #define LLVM_EDINST_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/ADT/SmallVector.h" #include #include Modified: llvm/trunk/lib/MC/MCDisassembler/EDOperand.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDisassembler/EDOperand.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/MC/MCDisassembler/EDOperand.h (original) +++ llvm/trunk/lib/MC/MCDisassembler/EDOperand.h Mon Nov 29 12:16:10 2010 @@ -16,7 +16,7 @@ #ifndef LLVM_EDOPERAND_H #define LLVM_EDOPERAND_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { Modified: llvm/trunk/lib/MC/MCDisassembler/EDToken.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDisassembler/EDToken.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/MC/MCDisassembler/EDToken.h (original) +++ llvm/trunk/lib/MC/MCDisassembler/EDToken.h Mon Nov 29 12:16:10 2010 @@ -17,7 +17,7 @@ #define LLVM_EDTOKEN_H #include "llvm/ADT/StringRef.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include #include Modified: llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp (original) +++ llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp Mon Nov 29 12:16:10 2010 @@ -31,7 +31,7 @@ #include "llvm/Support/Debug.h" #include "llvm/Support/ErrorHandling.h" -#include "llvm/System/TimeValue.h" +#include "llvm/Support/TimeValue.h" #include "../Target/X86/X86FixupKinds.h" Modified: llvm/trunk/lib/Object/MachOObject.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/MachOObject.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Object/MachOObject.cpp (original) +++ llvm/trunk/lib/Object/MachOObject.cpp Mon Nov 29 12:16:10 2010 @@ -10,8 +10,8 @@ #include "llvm/Object/MachOObject.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/MemoryBuffer.h" -#include "llvm/System/Host.h" -#include "llvm/System/SwapByteOrder.h" +#include "llvm/Support/Host.h" +#include "llvm/Support/SwapByteOrder.h" using namespace llvm; using namespace llvm::object; Modified: llvm/trunk/lib/Object/ObjectFile.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/ObjectFile.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Object/ObjectFile.cpp (original) +++ llvm/trunk/lib/Object/ObjectFile.cpp Mon Nov 29 12:16:10 2010 @@ -14,7 +14,7 @@ #include "llvm/Object/ObjectFile.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/MemoryBuffer.h" -#include "llvm/System/Path.h" +#include "llvm/Support/Path.h" using namespace llvm; using namespace object; Copied: llvm/trunk/lib/Support/Alarm.cpp (from r120288, llvm/trunk/lib/System/Alarm.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Alarm.cpp?p2=llvm/trunk/lib/Support/Alarm.cpp&p1=llvm/trunk/lib/System/Alarm.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Alarm.cpp (original) +++ llvm/trunk/lib/Support/Alarm.cpp Mon Nov 29 12:16:10 2010 @@ -7,11 +7,11 @@ // //===----------------------------------------------------------------------===// // -// This file implements the Alarm functionality +// This file implements the Alarm functionality // //===----------------------------------------------------------------------===// -#include "llvm/System/Alarm.h" +#include "llvm/Support/Alarm.h" #include "llvm/Config/config.h" namespace llvm { @@ -29,5 +29,5 @@ #include "Unix/Alarm.inc" #endif #ifdef LLVM_ON_WIN32 -#include "Win32/Alarm.inc" +#include "Windows/Alarm.inc" #endif Modified: llvm/trunk/lib/Support/Allocator.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Allocator.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/Allocator.cpp (original) +++ llvm/trunk/lib/Support/Allocator.cpp Mon Nov 29 12:16:10 2010 @@ -12,10 +12,10 @@ //===----------------------------------------------------------------------===// #include "llvm/Support/Allocator.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/Support/Recycler.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Memory.h" +#include "llvm/Support/Memory.h" #include namespace llvm { Copied: llvm/trunk/lib/Support/Atomic.cpp (from r120288, llvm/trunk/lib/System/Atomic.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Atomic.cpp?p2=llvm/trunk/lib/Support/Atomic.cpp&p1=llvm/trunk/lib/System/Atomic.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Atomic.cpp (original) +++ llvm/trunk/lib/Support/Atomic.cpp Mon Nov 29 12:16:10 2010 @@ -11,7 +11,7 @@ // //===----------------------------------------------------------------------===// -#include "llvm/System/Atomic.h" +#include "llvm/Support/Atomic.h" #include "llvm/Config/config.h" using namespace llvm; Modified: llvm/trunk/lib/Support/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/CMakeLists.txt?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/CMakeLists.txt (original) +++ llvm/trunk/lib/Support/CMakeLists.txt Mon Nov 29 12:16:10 2010 @@ -1,5 +1,8 @@ ## FIXME: This only requires RTTI because tblgen uses it. Fix that. set(LLVM_REQUIRES_RTTI 1) +if( MINGW ) + set(LLVM_REQUIRES_EH 1) +endif() add_llvm_library(LLVMSupport APFloat.cpp @@ -49,4 +52,51 @@ regexec.c regfree.c regstrlcpy.c + +# System + Alarm.cpp + Atomic.cpp + Disassembler.cpp + DynamicLibrary.cpp + Errno.cpp + Host.cpp + IncludeFile.cpp + Memory.cpp + Mutex.cpp + Path.cpp + Process.cpp + Program.cpp + RWMutex.cpp + SearchForAddressOfSpecialSymbol.cpp + Signals.cpp + system_error.cpp + ThreadLocal.cpp + Threading.cpp + TimeValue.cpp + Valgrind.cpp + Unix/Alarm.inc + Unix/Host.inc + Unix/Memory.inc + Unix/Mutex.inc + Unix/Path.inc + Unix/Process.inc + Unix/Program.inc + Unix/RWMutex.inc + Unix/Signals.inc + Unix/system_error.inc + Unix/ThreadLocal.inc + Unix/TimeValue.inc + Windows/Alarm.inc + Windows/DynamicLibrary.inc + Windows/Host.inc + Windows/Memory.inc + Windows/Mutex.inc + Windows/Path.inc + Windows/Process.inc + Windows/Program.inc + Windows/RWMutex.inc + Windows/Signals.inc + Windows/system_error.inc + Windows/ThreadLocal.inc + Windows/TimeValue.inc ) Modified: llvm/trunk/lib/Support/CommandLine.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/CommandLine.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/CommandLine.cpp (original) +++ llvm/trunk/lib/Support/CommandLine.cpp Mon Nov 29 12:16:10 2010 @@ -23,8 +23,8 @@ #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Target/TargetRegistry.h" -#include "llvm/System/Host.h" -#include "llvm/System/Path.h" +#include "llvm/Support/Host.h" +#include "llvm/Support/Path.h" #include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallString.h" Modified: llvm/trunk/lib/Support/CrashRecoveryContext.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/CrashRecoveryContext.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/CrashRecoveryContext.cpp (original) +++ llvm/trunk/lib/Support/CrashRecoveryContext.cpp Mon Nov 29 12:16:10 2010 @@ -10,8 +10,8 @@ #include "llvm/Support/CrashRecoveryContext.h" #include "llvm/ADT/SmallString.h" #include "llvm/Config/config.h" -#include "llvm/System/Mutex.h" -#include "llvm/System/ThreadLocal.h" +#include "llvm/Support/Mutex.h" +#include "llvm/Support/ThreadLocal.h" #include #include using namespace llvm; Modified: llvm/trunk/lib/Support/Debug.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Debug.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/Debug.cpp (original) +++ llvm/trunk/lib/Support/Debug.cpp Mon Nov 29 12:16:10 2010 @@ -26,7 +26,7 @@ #include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" #include "llvm/Support/circular_raw_ostream.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Signals.h" using namespace llvm; Copied: llvm/trunk/lib/Support/Disassembler.cpp (from r120288, llvm/trunk/lib/System/Disassembler.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Disassembler.cpp?p2=llvm/trunk/lib/Support/Disassembler.cpp&p1=llvm/trunk/lib/System/Disassembler.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Disassembler.cpp (original) +++ llvm/trunk/lib/Support/Disassembler.cpp Mon Nov 29 12:16:10 2010 @@ -13,7 +13,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Config/config.h" -#include "llvm/System/Disassembler.h" +#include "llvm/Support/Disassembler.h" #include #include Copied: llvm/trunk/lib/Support/DynamicLibrary.cpp (from r120288, llvm/trunk/lib/System/DynamicLibrary.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/DynamicLibrary.cpp?p2=llvm/trunk/lib/Support/DynamicLibrary.cpp&p1=llvm/trunk/lib/System/DynamicLibrary.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/DynamicLibrary.cpp (original) +++ llvm/trunk/lib/Support/DynamicLibrary.cpp Mon Nov 29 12:16:10 2010 @@ -14,8 +14,8 @@ // //===----------------------------------------------------------------------===// -#include "llvm/System/DynamicLibrary.h" -#include "llvm/System/Mutex.h" +#include "llvm/Support/DynamicLibrary.h" +#include "llvm/Support/Mutex.h" #include "llvm/Config/config.h" #include #include @@ -47,7 +47,7 @@ #ifdef LLVM_ON_WIN32 -#include "Win32/DynamicLibrary.inc" +#include "Windows/DynamicLibrary.inc" #else @@ -117,7 +117,7 @@ std::map::iterator I = ExplicitSymbols->find(symbolName); std::map::iterator E = ExplicitSymbols->end(); - + if (I != E) return I->second; } @@ -146,7 +146,7 @@ if (!strcmp(symbolName, #SYM)) return &SYM // On linux we have a weird situation. The stderr/out/in symbols are both -// macros and global variables because of standards requirements. So, we +// macros and global variables because of standards requirements. So, we // boldly use the EXPLICIT_SYMBOL macro without checking for a #define first. #if defined(__linux__) { Copied: llvm/trunk/lib/Support/Errno.cpp (from r120288, llvm/trunk/lib/System/Errno.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Errno.cpp?p2=llvm/trunk/lib/Support/Errno.cpp&p1=llvm/trunk/lib/System/Errno.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Errno.cpp (original) +++ llvm/trunk/lib/Support/Errno.cpp Mon Nov 29 12:16:10 2010 @@ -11,7 +11,7 @@ // //===----------------------------------------------------------------------===// -#include "llvm/System/Errno.h" +#include "llvm/Support/Errno.h" #include "llvm/Config/config.h" // Get autoconf configuration settings #if HAVE_STRING_H Modified: llvm/trunk/lib/Support/ErrorHandling.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/ErrorHandling.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/ErrorHandling.cpp (original) +++ llvm/trunk/lib/Support/ErrorHandling.cpp Mon Nov 29 12:16:10 2010 @@ -16,8 +16,8 @@ #include "llvm/Support/Debug.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Signals.h" -#include "llvm/System/Threading.h" +#include "llvm/Support/Signals.h" +#include "llvm/Support/Threading.h" #include "llvm/ADT/SmallVector.h" #include "llvm/Config/config.h" #include Modified: llvm/trunk/lib/Support/FileUtilities.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/FileUtilities.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/FileUtilities.cpp (original) +++ llvm/trunk/lib/Support/FileUtilities.cpp Mon Nov 29 12:16:10 2010 @@ -15,7 +15,7 @@ #include "llvm/Support/FileUtilities.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Path.h" +#include "llvm/Support/Path.h" #include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/SmallString.h" #include Modified: llvm/trunk/lib/Support/FoldingSet.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/FoldingSet.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/FoldingSet.cpp (original) +++ llvm/trunk/lib/Support/FoldingSet.cpp Mon Nov 29 12:16:10 2010 @@ -18,7 +18,7 @@ #include "llvm/Support/Allocator.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/MathExtras.h" -#include "llvm/System/Host.h" +#include "llvm/Support/Host.h" #include #include using namespace llvm; Modified: llvm/trunk/lib/Support/GraphWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/GraphWriter.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/GraphWriter.cpp (original) +++ llvm/trunk/lib/Support/GraphWriter.cpp Mon Nov 29 12:16:10 2010 @@ -12,8 +12,8 @@ //===----------------------------------------------------------------------===// #include "llvm/Support/GraphWriter.h" -#include "llvm/System/Path.h" -#include "llvm/System/Program.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/Program.h" #include "llvm/Config/config.h" using namespace llvm; Copied: llvm/trunk/lib/Support/Host.cpp (from r120288, llvm/trunk/lib/System/Host.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Host.cpp?p2=llvm/trunk/lib/Support/Host.cpp&p1=llvm/trunk/lib/System/Host.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Host.cpp (original) +++ llvm/trunk/lib/Support/Host.cpp Mon Nov 29 12:16:10 2010 @@ -11,7 +11,7 @@ // //===----------------------------------------------------------------------===// -#include "llvm/System/Host.h" +#include "llvm/Support/Host.h" #include "llvm/Config/config.h" #include @@ -20,7 +20,7 @@ #include "Unix/Host.inc" #endif #ifdef LLVM_ON_WIN32 -#include "Win32/Host.inc" +#include "Windows/Host.inc" #endif #ifdef _MSC_VER #include Copied: llvm/trunk/lib/Support/IncludeFile.cpp (from r120288, llvm/trunk/lib/System/IncludeFile.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/IncludeFile.cpp?p2=llvm/trunk/lib/Support/IncludeFile.cpp&p1=llvm/trunk/lib/System/IncludeFile.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/IncludeFile.cpp (original) +++ llvm/trunk/lib/Support/IncludeFile.cpp Mon Nov 29 12:16:10 2010 @@ -11,10 +11,10 @@ // //===----------------------------------------------------------------------===// -#include "llvm/System/IncludeFile.h" +#include "llvm/Support/IncludeFile.h" using namespace llvm; // This constructor is used to ensure linking of other modules. See the -// llvm/System/IncludeFile.h header for details. +// llvm/System/IncludeFile.h header for details. IncludeFile::IncludeFile(const void*) {} Modified: llvm/trunk/lib/Support/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Makefile?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/Makefile (original) +++ llvm/trunk/lib/Support/Makefile Mon Nov 29 12:16:10 2010 @@ -14,4 +14,9 @@ ## FIXME: This only requires RTTI because tblgen uses it. Fix that. REQUIRES_RTTI = 1 +EXTRA_DIST = Unix Win32 README.txt + include $(LEVEL)/Makefile.common + +CompileCommonOpts := $(filter-out -pedantic,$(CompileCommonOpts)) +CompileCommonOpts := $(filter-out -Wno-long-long,$(CompileCommonOpts)) Modified: llvm/trunk/lib/Support/ManagedStatic.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/ManagedStatic.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/ManagedStatic.cpp (original) +++ llvm/trunk/lib/Support/ManagedStatic.cpp Mon Nov 29 12:16:10 2010 @@ -13,7 +13,7 @@ #include "llvm/Support/ManagedStatic.h" #include "llvm/Config/config.h" -#include "llvm/System/Atomic.h" +#include "llvm/Support/Atomic.h" #include using namespace llvm; Copied: llvm/trunk/lib/Support/Memory.cpp (from r120288, llvm/trunk/lib/System/Memory.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Memory.cpp?p2=llvm/trunk/lib/Support/Memory.cpp&p1=llvm/trunk/lib/System/Memory.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Memory.cpp (original) +++ llvm/trunk/lib/Support/Memory.cpp Mon Nov 29 12:16:10 2010 @@ -12,8 +12,8 @@ // //===----------------------------------------------------------------------===// -#include "llvm/System/Memory.h" -#include "llvm/System/Valgrind.h" +#include "llvm/Support/Memory.h" +#include "llvm/Support/Valgrind.h" #include "llvm/Config/config.h" namespace llvm { @@ -25,7 +25,7 @@ #include "Unix/Memory.inc" #endif #ifdef LLVM_ON_WIN32 -#include "Win32/Memory.inc" +#include "Windows/Memory.inc" #endif extern "C" void sys_icache_invalidate(const void *Addr, size_t len); @@ -35,7 +35,7 @@ /// platforms. void llvm::sys::Memory::InvalidateInstructionCache(const void *Addr, size_t Len) { - + // icache invalidation for PPC and ARM. #if defined(__APPLE__) Modified: llvm/trunk/lib/Support/MemoryBuffer.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/MemoryBuffer.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/MemoryBuffer.cpp (original) +++ llvm/trunk/lib/Support/MemoryBuffer.cpp Mon Nov 29 12:16:10 2010 @@ -15,10 +15,10 @@ #include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/SmallString.h" #include "llvm/Support/MathExtras.h" -#include "llvm/System/Errno.h" -#include "llvm/System/Path.h" -#include "llvm/System/Process.h" -#include "llvm/System/Program.h" +#include "llvm/Support/Errno.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/Process.h" +#include "llvm/Support/Program.h" #include #include #include @@ -203,14 +203,14 @@ if (ErrStr) *ErrStr = sys::StrError(); return 0; } - + return getOpenFile(FD, Filename, ErrStr, FileSize); } - + MemoryBuffer *MemoryBuffer::getOpenFile(int FD, const char *Filename, std::string *ErrStr, int64_t FileSize) { FileCloser FC(FD); // Close FD on return. - + // If we don't know the file size, use fstat to find out. fstat on an open // file descriptor is cheaper than stat on a random path. if (FileSize == -1) { @@ -222,8 +222,8 @@ } FileSize = FileInfo.st_size; } - - + + // If the file is large, try to use mmap to read it in. We don't use mmap // for small files, because this can severely fragment our address space. Also // don't try to map files that are exactly a multiple of the system page size, Copied: llvm/trunk/lib/Support/Mutex.cpp (from r120288, llvm/trunk/lib/System/Mutex.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Mutex.cpp?p2=llvm/trunk/lib/Support/Mutex.cpp&p1=llvm/trunk/lib/System/Mutex.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Mutex.cpp (original) +++ llvm/trunk/lib/Support/Mutex.cpp Mon Nov 29 12:16:10 2010 @@ -12,7 +12,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Config/config.h" -#include "llvm/System/Mutex.h" +#include "llvm/Support/Mutex.h" //===----------------------------------------------------------------------===// //=== WARNING: Implementation here must contain only TRULY operating system @@ -149,9 +149,8 @@ #elif defined(LLVM_ON_UNIX) #include "Unix/Mutex.inc" #elif defined( LLVM_ON_WIN32) -#include "Win32/Mutex.inc" +#include "Windows/Mutex.inc" #else #warning Neither LLVM_ON_UNIX nor LLVM_ON_WIN32 was set in System/Mutex.cpp #endif #endif - Copied: llvm/trunk/lib/Support/Path.cpp (from r120288, llvm/trunk/lib/System/Path.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Path.cpp?p2=llvm/trunk/lib/Support/Path.cpp&p1=llvm/trunk/lib/System/Path.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Path.cpp (original) +++ llvm/trunk/lib/Support/Path.cpp Mon Nov 29 12:16:10 2010 @@ -11,7 +11,7 @@ // //===----------------------------------------------------------------------===// -#include "llvm/System/Path.h" +#include "llvm/Support/Path.h" #include "llvm/Config/config.h" #include #include @@ -292,6 +292,5 @@ #include "Unix/Path.inc" #endif #if defined(LLVM_ON_WIN32) -#include "Win32/Path.inc" +#include "Windows/Path.inc" #endif - Modified: llvm/trunk/lib/Support/PluginLoader.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/PluginLoader.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/PluginLoader.cpp (original) +++ llvm/trunk/lib/Support/PluginLoader.cpp Mon Nov 29 12:16:10 2010 @@ -15,8 +15,8 @@ #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/PluginLoader.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/DynamicLibrary.h" -#include "llvm/System/Mutex.h" +#include "llvm/Support/DynamicLibrary.h" +#include "llvm/Support/Mutex.h" #include using namespace llvm; Modified: llvm/trunk/lib/Support/PrettyStackTrace.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/PrettyStackTrace.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/PrettyStackTrace.cpp (original) +++ llvm/trunk/lib/Support/PrettyStackTrace.cpp Mon Nov 29 12:16:10 2010 @@ -15,8 +15,8 @@ #include "llvm/Config/config.h" // Get autoconf configuration settings #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Signals.h" -#include "llvm/System/ThreadLocal.h" +#include "llvm/Support/Signals.h" +#include "llvm/Support/ThreadLocal.h" #include "llvm/ADT/SmallString.h" #ifdef HAVE_CRASHREPORTERCLIENT_H Copied: llvm/trunk/lib/Support/Process.cpp (from r120288, llvm/trunk/lib/System/Process.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Process.cpp?p2=llvm/trunk/lib/Support/Process.cpp&p1=llvm/trunk/lib/System/Process.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Process.cpp (original) +++ llvm/trunk/lib/Support/Process.cpp Mon Nov 29 12:16:10 2010 @@ -11,7 +11,7 @@ // //===----------------------------------------------------------------------===// -#include "llvm/System/Process.h" +#include "llvm/Support/Process.h" #include "llvm/Config/config.h" namespace llvm { @@ -29,5 +29,5 @@ #include "Unix/Process.inc" #endif #ifdef LLVM_ON_WIN32 -#include "Win32/Process.inc" +#include "Windows/Process.inc" #endif Copied: llvm/trunk/lib/Support/Program.cpp (from r120288, llvm/trunk/lib/System/Program.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Program.cpp?p2=llvm/trunk/lib/Support/Program.cpp&p1=llvm/trunk/lib/System/Program.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Program.cpp (original) +++ llvm/trunk/lib/Support/Program.cpp Mon Nov 29 12:16:10 2010 @@ -11,7 +11,7 @@ // //===----------------------------------------------------------------------===// -#include "llvm/System/Program.h" +#include "llvm/Support/Program.h" #include "llvm/Config/config.h" using namespace llvm; using namespace sys; @@ -52,5 +52,5 @@ #include "Unix/Program.inc" #endif #ifdef LLVM_ON_WIN32 -#include "Win32/Program.inc" +#include "Windows/Program.inc" #endif Copied: llvm/trunk/lib/Support/README.txt.system (from r120288, llvm/trunk/lib/System/README.txt) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/README.txt.system?p2=llvm/trunk/lib/Support/README.txt.system&p1=llvm/trunk/lib/System/README.txt&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/README.txt (original) +++ llvm/trunk/lib/Support/README.txt.system Mon Nov 29 12:16:10 2010 @@ -9,15 +9,15 @@ The software located here, of necessity, has very specific and stringent design rules. Violation of these rules means that cracks in the shield could form and the primary goal of the library is defeated. By consistently using this library, -LLVM becomes more easily ported to new platforms since the only thing requiring +LLVM becomes more easily ported to new platforms since the only thing requiring porting is this library. Complete documentation for the library can be found in the file: - llvm/docs/SystemLibrary.html + llvm/docs/SystemLibrary.html or at this URL: http://llvm.org/docs/SystemLibrary.html -While we recommend that you read the more detailed documentation, for the +While we recommend that you read the more detailed documentation, for the impatient, here's a high level summary of the library's requirements. 1. No system header files are to be exposed through the interface. @@ -31,13 +31,13 @@ 9. No duplicate function impementations are permitted within an operating system class. -To accomplish these requirements, the library has numerous design criteria that +To accomplish these requirements, the library has numerous design criteria that must be satisfied. Here's a high level summary of the library's design criteria: 1. No unused functionality (only what LLVM needs) 2. High-Level Interfaces 3. Use Opaque Classes - 4. Common Implementations - 5. Multiple Implementations - 6. Minimize Memory Allocation + 4. Common Implementations + 5. Multiple Implementations + 6. Minimize Memory Allocation 7. No Virtual Methods Copied: llvm/trunk/lib/Support/RWMutex.cpp (from r120288, llvm/trunk/lib/System/RWMutex.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/RWMutex.cpp?p2=llvm/trunk/lib/Support/RWMutex.cpp&p1=llvm/trunk/lib/System/RWMutex.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/RWMutex.cpp (original) +++ llvm/trunk/lib/Support/RWMutex.cpp Mon Nov 29 12:16:10 2010 @@ -12,7 +12,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Config/config.h" -#include "llvm/System/RWMutex.h" +#include "llvm/Support/RWMutex.h" #include //===----------------------------------------------------------------------===// @@ -150,7 +150,7 @@ #elif defined(LLVM_ON_UNIX) #include "Unix/RWMutex.inc" #elif defined( LLVM_ON_WIN32) -#include "Win32/RWMutex.inc" +#include "Windows/RWMutex.inc" #else #warning Neither LLVM_ON_UNIX nor LLVM_ON_WIN32 was set in System/Mutex.cpp #endif Copied: llvm/trunk/lib/Support/SearchForAddressOfSpecialSymbol.cpp (from r120288, llvm/trunk/lib/System/SearchForAddressOfSpecialSymbol.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/SearchForAddressOfSpecialSymbol.cpp?p2=llvm/trunk/lib/Support/SearchForAddressOfSpecialSymbol.cpp&p1=llvm/trunk/lib/System/SearchForAddressOfSpecialSymbol.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== (empty) Copied: llvm/trunk/lib/Support/Signals.cpp (from r120288, llvm/trunk/lib/System/Signals.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Signals.cpp?p2=llvm/trunk/lib/Support/Signals.cpp&p1=llvm/trunk/lib/System/Signals.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Signals.cpp (original) +++ llvm/trunk/lib/Support/Signals.cpp Mon Nov 29 12:16:10 2010 @@ -12,7 +12,7 @@ // //===----------------------------------------------------------------------===// -#include "llvm/System/Signals.h" +#include "llvm/Support/Signals.h" #include "llvm/Config/config.h" namespace llvm { @@ -30,5 +30,5 @@ #include "Unix/Signals.inc" #endif #ifdef LLVM_ON_WIN32 -#include "Win32/Signals.inc" +#include "Windows/Signals.inc" #endif Modified: llvm/trunk/lib/Support/Statistic.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Statistic.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/Statistic.cpp (original) +++ llvm/trunk/lib/Support/Statistic.cpp Mon Nov 29 12:16:10 2010 @@ -26,7 +26,7 @@ #include "llvm/Support/Debug.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Mutex.h" +#include "llvm/Support/Mutex.h" #include "llvm/ADT/StringExtras.h" #include #include Modified: llvm/trunk/lib/Support/SystemUtils.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/SystemUtils.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/SystemUtils.cpp (original) +++ llvm/trunk/lib/Support/SystemUtils.cpp Mon Nov 29 12:16:10 2010 @@ -13,8 +13,8 @@ //===----------------------------------------------------------------------===// #include "llvm/Support/SystemUtils.h" -#include "llvm/System/Process.h" -#include "llvm/System/Program.h" +#include "llvm/Support/Process.h" +#include "llvm/Support/Program.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; Modified: llvm/trunk/lib/Support/TargetRegistry.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/TargetRegistry.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/TargetRegistry.cpp (original) +++ llvm/trunk/lib/Support/TargetRegistry.cpp Mon Nov 29 12:16:10 2010 @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Target/TargetRegistry.h" -#include "llvm/System/Host.h" +#include "llvm/Support/Host.h" #include using namespace llvm; Copied: llvm/trunk/lib/Support/ThreadLocal.cpp (from r120288, llvm/trunk/lib/System/ThreadLocal.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/ThreadLocal.cpp?p2=llvm/trunk/lib/Support/ThreadLocal.cpp&p1=llvm/trunk/lib/System/ThreadLocal.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/ThreadLocal.cpp (original) +++ llvm/trunk/lib/Support/ThreadLocal.cpp Mon Nov 29 12:16:10 2010 @@ -12,7 +12,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Config/config.h" -#include "llvm/System/ThreadLocal.h" +#include "llvm/Support/ThreadLocal.h" //===----------------------------------------------------------------------===// //=== WARNING: Implementation here must contain only TRULY operating system @@ -77,9 +77,8 @@ #elif defined(LLVM_ON_UNIX) #include "Unix/ThreadLocal.inc" #elif defined( LLVM_ON_WIN32) -#include "Win32/ThreadLocal.inc" +#include "Windows/ThreadLocal.inc" #else #warning Neither LLVM_ON_UNIX nor LLVM_ON_WIN32 was set in System/ThreadLocal.cpp #endif #endif - Copied: llvm/trunk/lib/Support/Threading.cpp (from r120288, llvm/trunk/lib/System/Threading.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Threading.cpp?p2=llvm/trunk/lib/Support/Threading.cpp&p1=llvm/trunk/lib/System/Threading.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Threading.cpp (original) +++ llvm/trunk/lib/Support/Threading.cpp Mon Nov 29 12:16:10 2010 @@ -11,9 +11,9 @@ // //===----------------------------------------------------------------------===// -#include "llvm/System/Threading.h" -#include "llvm/System/Atomic.h" -#include "llvm/System/Mutex.h" +#include "llvm/Support/Threading.h" +#include "llvm/Support/Atomic.h" +#include "llvm/Support/Mutex.h" #include "llvm/Config/config.h" #include @@ -28,7 +28,7 @@ assert(!multithreaded_mode && "Already multithreaded!"); multithreaded_mode = true; global_lock = new sys::Mutex(true); - + // We fence here to ensure that all initialization is complete BEFORE we // return from llvm_start_multithreaded(). sys::MemoryFence(); @@ -41,11 +41,11 @@ void llvm::llvm_stop_multithreaded() { #ifdef LLVM_MULTITHREADED assert(multithreaded_mode && "Not currently multithreaded!"); - + // We fence here to insure that all threaded operations are complete BEFORE we // return from llvm_stop_multithreaded(). sys::MemoryFence(); - + multithreaded_mode = false; delete global_lock; #endif @@ -98,7 +98,7 @@ // Wait for the thread and clean up. ::pthread_join(Thread, 0); - + error: ::pthread_attr_destroy(&Attr); } Copied: llvm/trunk/lib/Support/TimeValue.cpp (from r120288, llvm/trunk/lib/System/TimeValue.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/TimeValue.cpp?p2=llvm/trunk/lib/Support/TimeValue.cpp&p1=llvm/trunk/lib/System/TimeValue.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/TimeValue.cpp (original) +++ llvm/trunk/lib/Support/TimeValue.cpp Mon Nov 29 12:16:10 2010 @@ -11,7 +11,7 @@ // //===----------------------------------------------------------------------===// -#include "llvm/System/TimeValue.h" +#include "llvm/Support/TimeValue.h" #include "llvm/Config/config.h" namespace llvm { @@ -53,6 +53,5 @@ #include "Unix/TimeValue.inc" #endif #ifdef LLVM_ON_WIN32 -#include "Win32/TimeValue.inc" +#include "Windows/TimeValue.inc" #endif - Modified: llvm/trunk/lib/Support/Timer.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Timer.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/Timer.cpp (original) +++ llvm/trunk/lib/Support/Timer.cpp Mon Nov 29 12:16:10 2010 @@ -17,8 +17,8 @@ #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Support/Format.h" -#include "llvm/System/Mutex.h" -#include "llvm/System/Process.h" +#include "llvm/Support/Mutex.h" +#include "llvm/Support/Process.h" #include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/StringMap.h" using namespace llvm; Modified: llvm/trunk/lib/Support/ToolOutputFile.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/ToolOutputFile.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/ToolOutputFile.cpp (original) +++ llvm/trunk/lib/Support/ToolOutputFile.cpp Mon Nov 29 12:16:10 2010 @@ -12,7 +12,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Support/ToolOutputFile.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Signals.h" using namespace llvm; tool_output_file::CleanupInstaller::CleanupInstaller(const char *filename) Copied: llvm/trunk/lib/Support/Unix/Alarm.inc (from r120288, llvm/trunk/lib/System/Unix/Alarm.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Alarm.inc?p2=llvm/trunk/lib/Support/Unix/Alarm.inc&p1=llvm/trunk/lib/System/Unix/Alarm.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== (empty) Copied: llvm/trunk/lib/Support/Unix/Host.inc (from r120288, llvm/trunk/lib/System/Unix/Host.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Host.inc?p2=llvm/trunk/lib/Support/Unix/Host.inc&p1=llvm/trunk/lib/System/Unix/Host.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Unix/Host.inc (original) +++ llvm/trunk/lib/Support/Unix/Host.inc Mon Nov 29 12:16:10 2010 @@ -39,7 +39,7 @@ StringRef HostTripleString(LLVM_HOSTTRIPLE); std::pair ArchSplit = HostTripleString.split('-'); - + // Normalize the arch, since the host triple may not actually match the host. std::string Arch = ArchSplit.first; @@ -77,16 +77,16 @@ Triple += ArchSplit.second; // Force i86 to i386. - if (Triple[0] == 'i' && isdigit(Triple[1]) && + if (Triple[0] == 'i' && isdigit(Triple[1]) && Triple[2] == '8' && Triple[3] == '6') Triple[1] = '3'; // On darwin, we want to update the version to match that of the - // host. + // host. std::string::size_type DarwinDashIdx = Triple.find("-darwin"); if (DarwinDashIdx != std::string::npos) { Triple.resize(DarwinDashIdx + strlen("-darwin")); - + // Only add the major part of the os version. std::string Version = getOSVersion(); Triple += Version.substr(0, Version.find('.')); Copied: llvm/trunk/lib/Support/Unix/Memory.inc (from r120288, llvm/trunk/lib/System/Unix/Memory.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Memory.inc?p2=llvm/trunk/lib/Support/Unix/Memory.inc&p1=llvm/trunk/lib/System/Unix/Memory.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Unix/Memory.inc (original) +++ llvm/trunk/lib/Support/Unix/Memory.inc Mon Nov 29 12:16:10 2010 @@ -1,10 +1,10 @@ //===- Unix/Memory.cpp - Generic UNIX System Configuration ------*- C++ -*-===// -// +// // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. -// +// //===----------------------------------------------------------------------===// // // This file defines some functions for various memory management utilities. @@ -12,8 +12,8 @@ //===----------------------------------------------------------------------===// #include "Unix.h" -#include "llvm/System/DataTypes.h" -#include "llvm/System/Process.h" +#include "llvm/Support/DataTypes.h" +#include "llvm/Support/Process.h" #ifdef HAVE_SYS_MMAN_H #include @@ -28,7 +28,7 @@ /// to emit code to the memory then jump to it. Getting this type of memory /// is very OS specific. /// -llvm::sys::MemoryBlock +llvm::sys::MemoryBlock llvm::sys::Memory::AllocateRWX(size_t NumBytes, const MemoryBlock* NearBlock, std::string *ErrMsg) { if (NumBytes == 0) return MemoryBlock(); @@ -54,7 +54,7 @@ #endif ; - void* start = NearBlock ? (unsigned char*)NearBlock->base() + + void* start = NearBlock ? (unsigned char*)NearBlock->base() + NearBlock->size() : 0; #if defined(__APPLE__) && defined(__arm__) Copied: llvm/trunk/lib/Support/Unix/Mutex.inc (from r120288, llvm/trunk/lib/System/Unix/Mutex.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Mutex.inc?p2=llvm/trunk/lib/Support/Unix/Mutex.inc&p1=llvm/trunk/lib/System/Unix/Mutex.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Unix/Mutex.inc (original) +++ llvm/trunk/lib/Support/Unix/Mutex.inc Mon Nov 29 12:16:10 2010 @@ -1,10 +1,10 @@ //===- llvm/System/Unix/Mutex.inc - Unix Mutex Implementation ---*- C++ -*-===// -// +// // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. -// +// //===----------------------------------------------------------------------===// // // This file implements the Unix specific (non-pthread) Mutex class. @@ -28,13 +28,13 @@ { } -bool +bool MutexImpl::release() { return true; } -bool +bool MutexImpl::tryacquire( void ) { return true; Copied: llvm/trunk/lib/Support/Unix/Path.inc (from r120288, llvm/trunk/lib/System/Unix/Path.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Path.inc?p2=llvm/trunk/lib/Support/Unix/Path.inc&p1=llvm/trunk/lib/System/Unix/Path.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== (empty) Copied: llvm/trunk/lib/Support/Unix/Process.inc (from r120288, llvm/trunk/lib/System/Unix/Process.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Process.inc?p2=llvm/trunk/lib/Support/Unix/Process.inc&p1=llvm/trunk/lib/System/Unix/Process.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Unix/Process.inc (original) +++ llvm/trunk/lib/Support/Unix/Process.inc Mon Nov 29 12:16:10 2010 @@ -1,10 +1,10 @@ //===- Unix/Process.cpp - Unix Process Implementation --------- -*- C++ -*-===// -// +// // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. -// +// //===----------------------------------------------------------------------===// // // This file provides the generic Unix implementation of the Process class. @@ -41,8 +41,8 @@ using namespace llvm; using namespace sys; -unsigned -Process::GetPageSize() +unsigned +Process::GetPageSize() { #if defined(__CYGWIN__) // On Cygwin, getpagesize() returns 64k but the page size for the purposes of @@ -104,20 +104,20 @@ } void -Process::GetTimeUsage(TimeValue& elapsed, TimeValue& user_time, +Process::GetTimeUsage(TimeValue& elapsed, TimeValue& user_time, TimeValue& sys_time) { elapsed = TimeValue::now(); #if defined(HAVE_GETRUSAGE) struct rusage usage; ::getrusage(RUSAGE_SELF, &usage); - user_time = TimeValue( - static_cast( usage.ru_utime.tv_sec ), - static_cast( usage.ru_utime.tv_usec * + user_time = TimeValue( + static_cast( usage.ru_utime.tv_sec ), + static_cast( usage.ru_utime.tv_usec * TimeValue::NANOSECONDS_PER_MICROSECOND ) ); - sys_time = TimeValue( - static_cast( usage.ru_stime.tv_sec ), - static_cast( usage.ru_stime.tv_usec * + sys_time = TimeValue( + static_cast( usage.ru_stime.tv_sec ), + static_cast( usage.ru_stime.tv_usec * TimeValue::NANOSECONDS_PER_MICROSECOND ) ); #else #warning Cannot get usage times on this platform @@ -159,14 +159,14 @@ exception_port_t OriginalPorts[EXC_TYPES_COUNT]; exception_behavior_t OriginalBehaviors[EXC_TYPES_COUNT]; thread_state_flavor_t OriginalFlavors[EXC_TYPES_COUNT]; - kern_return_t err = + kern_return_t err = task_get_exception_ports(mach_task_self(), EXC_MASK_ALL, OriginalMasks, &Count, OriginalPorts, OriginalBehaviors, OriginalFlavors); if (err == KERN_SUCCESS) { // replace each with MACH_PORT_NULL. for (unsigned i = 0; i != Count; ++i) - task_set_exception_ports(mach_task_self(), OriginalMasks[i], + task_set_exception_ports(mach_task_self(), OriginalMasks[i], MACH_PORT_NULL, OriginalBehaviors[i], OriginalFlavors[i]); } Copied: llvm/trunk/lib/Support/Unix/Program.inc (from r120288, llvm/trunk/lib/System/Unix/Program.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Program.inc?p2=llvm/trunk/lib/Support/Unix/Program.inc&p1=llvm/trunk/lib/System/Unix/Program.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== (empty) Copied: llvm/trunk/lib/Support/Unix/README.txt (from r120288, llvm/trunk/lib/System/Unix/README.txt) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/README.txt?p2=llvm/trunk/lib/Support/Unix/README.txt&p1=llvm/trunk/lib/System/Unix/README.txt&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Unix/README.txt (original) +++ llvm/trunk/lib/Support/Unix/README.txt Mon Nov 29 12:16:10 2010 @@ -1,13 +1,13 @@ -llvm/lib/System/Unix README +llvm/lib/Support/Unix README =========================== This directory provides implementations of the lib/System classes that -are common to two or more variants of UNIX. For example, the directory +are common to two or more variants of UNIX. For example, the directory structure underneath this directory could look like this: Unix - only code that is truly generic to all UNIX platforms Posix - code that is specific to Posix variants of UNIX - SUS - code that is specific to the Single Unix Specification + SUS - code that is specific to the Single Unix Specification SysV - code that is specific to System V variants of UNIX As a rule, only those directories actually needing to be created should be Copied: llvm/trunk/lib/Support/Unix/RWMutex.inc (from r120288, llvm/trunk/lib/System/Unix/RWMutex.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/RWMutex.inc?p2=llvm/trunk/lib/Support/Unix/RWMutex.inc&p1=llvm/trunk/lib/System/Unix/RWMutex.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Unix/RWMutex.inc (original) +++ llvm/trunk/lib/Support/Unix/RWMutex.inc Mon Nov 29 12:16:10 2010 @@ -1,10 +1,10 @@ //= llvm/System/Unix/RWMutex.inc - Unix Reader/Writer Mutual Exclusion Lock =// -// +// // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. -// +// //===----------------------------------------------------------------------===// // // This file implements the Unix specific (non-pthread) RWMutex class. Copied: llvm/trunk/lib/Support/Unix/Signals.inc (from r120288, llvm/trunk/lib/System/Unix/Signals.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Signals.inc?p2=llvm/trunk/lib/Support/Unix/Signals.inc&p1=llvm/trunk/lib/System/Unix/Signals.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Unix/Signals.inc (original) +++ llvm/trunk/lib/Support/Unix/Signals.inc Mon Nov 29 12:16:10 2010 @@ -1,10 +1,10 @@ //===- Signals.cpp - Generic Unix Signals Implementation -----*- C++ -*-===// -// +// // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. -// +// //===----------------------------------------------------------------------===// // // This file defines some helpful functions for dealing with the possibility of @@ -14,7 +14,7 @@ #include "Unix.h" #include "llvm/ADT/STLExtras.h" -#include "llvm/System/Mutex.h" +#include "llvm/Support/Mutex.h" #include #include #if HAVE_EXECINFO_H @@ -28,7 +28,7 @@ #endif #if HAVE_DLFCN_H && __GNUG__ #include -#include +#include #endif using namespace llvm; @@ -82,11 +82,11 @@ "Out of space for signal handlers!"); struct sigaction NewHandler; - + NewHandler.sa_handler = SignalHandler; NewHandler.sa_flags = SA_NODEFER|SA_RESETHAND; - sigemptyset(&NewHandler.sa_mask); - + sigemptyset(&NewHandler.sa_mask); + // Install the new handler, save the old one in RegisteredSignalInfo. sigaction(Signal, &NewHandler, &RegisteredSignalInfo[NumRegisteredSignals].SA); @@ -144,7 +144,7 @@ IF(); // run the interrupt function. return; } - + SignalsMutex.release(); raise(Sig); // Execute the default handler. return; @@ -205,7 +205,7 @@ // trace so that the user has an indication of why and where we died. // // On glibc systems we have the 'backtrace' function, which works nicely, but -// doesn't demangle symbols. +// doesn't demangle symbols. static void PrintStackTrace(void *) { #ifdef HAVE_BACKTRACE static void* StackTrace[256]; Copied: llvm/trunk/lib/Support/Unix/ThreadLocal.inc (from r120288, llvm/trunk/lib/System/Unix/ThreadLocal.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/ThreadLocal.inc?p2=llvm/trunk/lib/Support/Unix/ThreadLocal.inc&p1=llvm/trunk/lib/System/Unix/ThreadLocal.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Unix/ThreadLocal.inc (original) +++ llvm/trunk/lib/Support/Unix/ThreadLocal.inc Mon Nov 29 12:16:10 2010 @@ -1,10 +1,10 @@ //=== llvm/System/Unix/ThreadLocal.inc - Unix Thread Local Data -*- C++ -*-===// -// +// // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. -// +// //===----------------------------------------------------------------------===// // // This file implements the Unix specific (non-pthread) ThreadLocal class. Copied: llvm/trunk/lib/Support/Unix/TimeValue.inc (from r120288, llvm/trunk/lib/System/Unix/TimeValue.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/TimeValue.inc?p2=llvm/trunk/lib/Support/Unix/TimeValue.inc&p1=llvm/trunk/lib/System/Unix/TimeValue.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Unix/TimeValue.inc (original) +++ llvm/trunk/lib/Support/Unix/TimeValue.inc Mon Nov 29 12:16:10 2010 @@ -1,10 +1,10 @@ //===- Unix/TimeValue.cpp - Unix TimeValue Implementation -------*- C++ -*-===// -// +// // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. -// +// //===----------------------------------------------------------------------===// // // This file implements the Unix specific portion of the TimeValue class. @@ -26,7 +26,7 @@ time_t ourTime = time_t(this->toEpochTime()); #ifdef __hpux -// note that the following line needs -D_REENTRANT on HP-UX to be picked up +// note that the following line needs -D_REENTRANT on HP-UX to be picked up asctime_r(localtime(&ourTime), buffer); #else ::asctime_r(::localtime(&ourTime), buffer); @@ -43,13 +43,13 @@ // This is *really* unlikely to occur because the only gettimeofday // errors concern the timezone parameter which we're passing in as 0. // In the unlikely case it does happen, just return MinTime, no error - // message needed. + // message needed. return MinTime; } return TimeValue( - static_cast( the_time.tv_sec + PosixZeroTime.seconds_ ), - static_cast( the_time.tv_usec * + static_cast( the_time.tv_sec + PosixZeroTime.seconds_ ), + static_cast( the_time.tv_usec * NANOSECONDS_PER_MICROSECOND ) ); } Copied: llvm/trunk/lib/Support/Unix/Unix.h (from r120288, llvm/trunk/lib/System/Unix/Unix.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Unix.h?p2=llvm/trunk/lib/Support/Unix/Unix.h&p1=llvm/trunk/lib/System/Unix/Unix.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== (empty) Copied: llvm/trunk/lib/Support/Unix/system_error.inc (from r120288, llvm/trunk/lib/System/Unix/system_error.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/system_error.inc?p2=llvm/trunk/lib/Support/Unix/system_error.inc&p1=llvm/trunk/lib/System/Unix/system_error.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== (empty) Copied: llvm/trunk/lib/Support/Valgrind.cpp (from r120288, llvm/trunk/lib/System/Valgrind.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Valgrind.cpp?p2=llvm/trunk/lib/Support/Valgrind.cpp&p1=llvm/trunk/lib/System/Valgrind.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Valgrind.cpp (original) +++ llvm/trunk/lib/Support/Valgrind.cpp Mon Nov 29 12:16:10 2010 @@ -13,7 +13,7 @@ // //===----------------------------------------------------------------------===// -#include "llvm/System/Valgrind.h" +#include "llvm/Support/Valgrind.h" #include "llvm/Config/config.h" #if HAVE_VALGRIND_VALGRIND_H Copied: llvm/trunk/lib/Support/Windows/Alarm.inc (from r120288, llvm/trunk/lib/System/Win32/Alarm.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Alarm.inc?p2=llvm/trunk/lib/Support/Windows/Alarm.inc&p1=llvm/trunk/lib/System/Win32/Alarm.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== (empty) Copied: llvm/trunk/lib/Support/Windows/DynamicLibrary.inc (from r120288, llvm/trunk/lib/System/Win32/DynamicLibrary.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/DynamicLibrary.inc?p2=llvm/trunk/lib/Support/Windows/DynamicLibrary.inc&p1=llvm/trunk/lib/System/Win32/DynamicLibrary.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Win32/DynamicLibrary.inc (original) +++ llvm/trunk/lib/Support/Windows/DynamicLibrary.inc Mon Nov 29 12:16:10 2010 @@ -1,17 +1,17 @@ //===- Win32/DynamicLibrary.cpp - Win32 DL Implementation -------*- C++ -*-===// -// +// // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. -// +// //===----------------------------------------------------------------------===// // // This file provides the Win32 specific implementation of DynamicLibrary. // //===----------------------------------------------------------------------===// -#include "Win32.h" +#include "Windows.h" #ifdef __MINGW32__ #include @@ -35,7 +35,7 @@ using namespace sys; //===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only Win32 specific code +//=== WARNING: Implementation here must contain only Win32 specific code //=== and must not be UNIX code. //===----------------------------------------------------------------------===// @@ -50,7 +50,7 @@ extern "C" { // Use old callback if: // - Not using Visual Studio -// - Visual Studio 2005 or earlier but only if we are not using the Windows SDK +// - Visual Studio 2005 or earlier but only if we are not using the Windows SDK // or Windows SDK version is older than 6.0 // Use new callback if: // - Newer Visual Studio (comes with newer SDK). @@ -89,7 +89,7 @@ } bool DynamicLibrary::LoadLibraryPermanently(const char *filename, - std::string *ErrMsg) { + std::string *ErrMsg) { if (filename) { HMODULE a_handle = LoadLibrary(filename); @@ -143,7 +143,7 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) { // First check symbols added via AddSymbol(). if (ExplicitSymbols) { - std::map::iterator I = + std::map::iterator I = ExplicitSymbols->find(symbolName); std::map::iterator E = ExplicitSymbols->end(); if (I != E) @@ -197,4 +197,3 @@ } } - Copied: llvm/trunk/lib/Support/Windows/Host.inc (from r120288, llvm/trunk/lib/System/Win32/Host.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Host.inc?p2=llvm/trunk/lib/Support/Windows/Host.inc&p1=llvm/trunk/lib/System/Win32/Host.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Win32/Host.inc (original) +++ llvm/trunk/lib/Support/Windows/Host.inc Mon Nov 29 12:16:10 2010 @@ -11,7 +11,7 @@ // //===----------------------------------------------------------------------===// -#include "Win32.h" +#include "Windows.h" #include #include Copied: llvm/trunk/lib/Support/Windows/Memory.inc (from r120288, llvm/trunk/lib/System/Win32/Memory.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Memory.inc?p2=llvm/trunk/lib/Support/Windows/Memory.inc&p1=llvm/trunk/lib/System/Win32/Memory.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Win32/Memory.inc (original) +++ llvm/trunk/lib/Support/Windows/Memory.inc Mon Nov 29 12:16:10 2010 @@ -1,10 +1,10 @@ //===- Win32/Memory.cpp - Win32 Memory Implementation -----------*- C++ -*-===// -// +// // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. -// +// //===----------------------------------------------------------------------===// // // This file provides the Win32 specific implementation of various Memory @@ -12,15 +12,15 @@ // //===----------------------------------------------------------------------===// -#include "Win32.h" -#include "llvm/System/DataTypes.h" -#include "llvm/System/Process.h" +#include "Windows.h" +#include "llvm/Support/DataTypes.h" +#include "llvm/Support/Process.h" namespace llvm { using namespace sys; //===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only Win32 specific code +//=== WARNING: Implementation here must contain only Win32 specific code //=== and must not be UNIX code //===----------------------------------------------------------------------===// Copied: llvm/trunk/lib/Support/Windows/Mutex.inc (from r120288, llvm/trunk/lib/System/Win32/Mutex.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Mutex.inc?p2=llvm/trunk/lib/Support/Windows/Mutex.inc&p1=llvm/trunk/lib/System/Win32/Mutex.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Win32/Mutex.inc (original) +++ llvm/trunk/lib/Support/Windows/Mutex.inc Mon Nov 29 12:16:10 2010 @@ -1,10 +1,10 @@ //===- llvm/System/Win32/Mutex.inc - Win32 Mutex Implementation -*- C++ -*-===// -// +// // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. -// +// //===----------------------------------------------------------------------===// // // This file implements the Win32 specific (non-pthread) Mutex class. @@ -16,8 +16,8 @@ //=== is guaranteed to work on *all* Win32 variants. //===----------------------------------------------------------------------===// -#include "Win32.h" -#include "llvm/System/Mutex.h" +#include "Windows.h" +#include "llvm/Support/Mutex.h" namespace llvm { using namespace sys; @@ -35,21 +35,21 @@ data_ = 0; } -bool +bool MutexImpl::acquire() { EnterCriticalSection((LPCRITICAL_SECTION)data_); return true; } -bool +bool MutexImpl::release() { LeaveCriticalSection((LPCRITICAL_SECTION)data_); return true; } -bool +bool MutexImpl::tryacquire() { return TryEnterCriticalSection((LPCRITICAL_SECTION)data_); Copied: llvm/trunk/lib/Support/Windows/Path.inc (from r120288, llvm/trunk/lib/System/Win32/Path.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Path.inc?p2=llvm/trunk/lib/Support/Windows/Path.inc&p1=llvm/trunk/lib/System/Win32/Path.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Win32/Path.inc (original) +++ llvm/trunk/lib/Support/Windows/Path.inc Mon Nov 29 12:16:10 2010 @@ -16,7 +16,7 @@ //=== is guaranteed to work on *all* Win32 variants. //===----------------------------------------------------------------------===// -#include "Win32.h" +#include "Windows.h" #include #include Copied: llvm/trunk/lib/Support/Windows/Process.inc (from r120288, llvm/trunk/lib/System/Win32/Process.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Process.inc?p2=llvm/trunk/lib/Support/Windows/Process.inc&p1=llvm/trunk/lib/System/Win32/Process.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Win32/Process.inc (original) +++ llvm/trunk/lib/Support/Windows/Process.inc Mon Nov 29 12:16:10 2010 @@ -1,17 +1,17 @@ //===- Win32/Process.cpp - Win32 Process Implementation ------- -*- C++ -*-===// -// +// // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. -// +// //===----------------------------------------------------------------------===// // // This file provides the Win32 specific implementation of the Process class. // //===----------------------------------------------------------------------===// -#include "Win32.h" +#include "Windows.h" #include #include #include @@ -25,7 +25,7 @@ #endif //===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only Win32 specific code +//=== WARNING: Implementation here must contain only Win32 specific code //=== and must not be UNIX code //===----------------------------------------------------------------------===// @@ -51,13 +51,13 @@ return static_cast(info.dwPageSize); } -unsigned +unsigned Process::GetPageSize() { static const unsigned PageSize = GetPageSizeOnce(); return PageSize; } -size_t +size_t Process::GetMallocUsage() { _HEAPINFO hinfo; @@ -86,7 +86,7 @@ elapsed = TimeValue::now(); uint64_t ProcCreate, ProcExit, KernelTime, UserTime; - GetProcessTimes(GetCurrentProcess(), (FILETIME*)&ProcCreate, + GetProcessTimes(GetCurrentProcess(), (FILETIME*)&ProcCreate, (FILETIME*)&ProcExit, (FILETIME*)&KernelTime, (FILETIME*)&UserTime); Copied: llvm/trunk/lib/Support/Windows/Program.inc (from r120288, llvm/trunk/lib/System/Win32/Program.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Program.inc?p2=llvm/trunk/lib/Support/Windows/Program.inc&p1=llvm/trunk/lib/System/Win32/Program.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Win32/Program.inc (original) +++ llvm/trunk/lib/Support/Windows/Program.inc Mon Nov 29 12:16:10 2010 @@ -11,7 +11,7 @@ // //===----------------------------------------------------------------------===// -#include "Win32.h" +#include "Windows.h" #include #include #include Copied: llvm/trunk/lib/Support/Windows/RWMutex.inc (from r120288, llvm/trunk/lib/System/Win32/RWMutex.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/RWMutex.inc?p2=llvm/trunk/lib/Support/Windows/RWMutex.inc&p1=llvm/trunk/lib/System/Win32/RWMutex.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Win32/RWMutex.inc (original) +++ llvm/trunk/lib/Support/Windows/RWMutex.inc Mon Nov 29 12:16:10 2010 @@ -1,10 +1,10 @@ //= llvm/System/Win32/Mutex.inc - Win32 Reader/Writer Mutual Exclusion Lock =// -// +// // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. -// +// //===----------------------------------------------------------------------===// // // This file implements the Win32 specific (non-pthread) RWMutex class. @@ -16,10 +16,10 @@ //=== is guaranteed to work on *all* Win32 variants. //===----------------------------------------------------------------------===// -#include "Win32.h" +#include "Windows.h" // FIXME: Windows does not have reader-writer locks pre-Vista. If you want -// real reader-writer locks, you a pthreads implementation for Windows. +// real reader-writer locks, you a threads implementation for Windows. namespace llvm { using namespace sys; Copied: llvm/trunk/lib/Support/Windows/Signals.inc (from r120288, llvm/trunk/lib/System/Win32/Signals.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Signals.inc?p2=llvm/trunk/lib/Support/Windows/Signals.inc&p1=llvm/trunk/lib/System/Win32/Signals.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Win32/Signals.inc (original) +++ llvm/trunk/lib/Support/Windows/Signals.inc Mon Nov 29 12:16:10 2010 @@ -11,7 +11,7 @@ // //===----------------------------------------------------------------------===// -#include "Win32.h" +#include "Windows.h" #include #include #include @@ -323,4 +323,3 @@ LeaveCriticalSection(&CriticalSection); return FALSE; } - Copied: llvm/trunk/lib/Support/Windows/ThreadLocal.inc (from r120288, llvm/trunk/lib/System/Win32/ThreadLocal.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/ThreadLocal.inc?p2=llvm/trunk/lib/Support/Windows/ThreadLocal.inc&p1=llvm/trunk/lib/System/Win32/ThreadLocal.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Win32/ThreadLocal.inc (original) +++ llvm/trunk/lib/Support/Windows/ThreadLocal.inc Mon Nov 29 12:16:10 2010 @@ -1,10 +1,10 @@ //= llvm/System/Win32/ThreadLocal.inc - Win32 Thread Local Data -*- C++ -*-===// -// +// // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. -// +// //===----------------------------------------------------------------------===// // // This file implements the Win32 specific (non-pthread) ThreadLocal class. @@ -16,8 +16,8 @@ //=== is guaranteed to work on *all* Win32 variants. //===----------------------------------------------------------------------===// -#include "Win32.h" -#include "llvm/System/ThreadLocal.h" +#include "Windows.h" +#include "llvm/Support/ThreadLocal.h" namespace llvm { using namespace sys; Copied: llvm/trunk/lib/Support/Windows/TimeValue.inc (from r120288, llvm/trunk/lib/System/Win32/TimeValue.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/TimeValue.inc?p2=llvm/trunk/lib/Support/Windows/TimeValue.inc&p1=llvm/trunk/lib/System/Win32/TimeValue.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/Win32/TimeValue.inc (original) +++ llvm/trunk/lib/Support/Windows/TimeValue.inc Mon Nov 29 12:16:10 2010 @@ -1,17 +1,17 @@ //===- Win32/TimeValue.cpp - Win32 TimeValue Implementation -----*- C++ -*-===// -// +// // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. -// +// //===----------------------------------------------------------------------===// // // This file provides the Win32 implementation of the TimeValue class. // //===----------------------------------------------------------------------===// -#include "Win32.h" +#include "Windows.h" #include namespace llvm { Copied: llvm/trunk/lib/Support/Windows/Windows.h (from r120288, llvm/trunk/lib/System/Win32/Win32.h) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Windows.h?p2=llvm/trunk/lib/Support/Windows/Windows.h&p1=llvm/trunk/lib/System/Win32/Win32.h&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== (empty) Copied: llvm/trunk/lib/Support/Windows/system_error.inc (from r120288, llvm/trunk/lib/System/Win32/system_error.inc) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/system_error.inc?p2=llvm/trunk/lib/Support/Windows/system_error.inc&p1=llvm/trunk/lib/System/Win32/system_error.inc&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== (empty) Modified: llvm/trunk/lib/Support/raw_ostream.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/raw_ostream.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Support/raw_ostream.cpp (original) +++ llvm/trunk/lib/Support/raw_ostream.cpp Mon Nov 29 12:16:10 2010 @@ -13,8 +13,8 @@ #include "llvm/Support/raw_ostream.h" #include "llvm/Support/Format.h" -#include "llvm/System/Program.h" -#include "llvm/System/Process.h" +#include "llvm/Support/Program.h" +#include "llvm/Support/Process.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/SmallVector.h" #include "llvm/Config/config.h" Copied: llvm/trunk/lib/Support/system_error.cpp (from r120288, llvm/trunk/lib/System/system_error.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/system_error.cpp?p2=llvm/trunk/lib/Support/system_error.cpp&p1=llvm/trunk/lib/System/system_error.cpp&r1=120288&r2=120298&rev=120298&view=diff ============================================================================== --- llvm/trunk/lib/System/system_error.cpp (original) +++ llvm/trunk/lib/Support/system_error.cpp Mon Nov 29 12:16:10 2010 @@ -11,8 +11,8 @@ // //===----------------------------------------------------------------------===// -#include "llvm/System/system_error.h" -#include "llvm/System/Errno.h" +#include "llvm/Support/system_error.h" +#include "llvm/Support/Errno.h" #include #include @@ -117,5 +117,5 @@ #include "Unix/system_error.inc" #endif #if defined(LLVM_ON_WIN32) -#include "Win32/system_error.inc" +#include "Windows/system_error.inc" #endif Removed: llvm/trunk/lib/System/Alarm.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Alarm.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Alarm.cpp (original) +++ llvm/trunk/lib/System/Alarm.cpp (removed) @@ -1,33 +0,0 @@ -//===- Alarm.cpp - Alarm Generation Support ---------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the Alarm functionality -// -//===----------------------------------------------------------------------===// - -#include "llvm/System/Alarm.h" -#include "llvm/Config/config.h" - -namespace llvm { -using namespace sys; - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only TRULY operating system -//=== independent code. -//===----------------------------------------------------------------------===// - -} - -// Include the platform-specific parts of this class. -#ifdef LLVM_ON_UNIX -#include "Unix/Alarm.inc" -#endif -#ifdef LLVM_ON_WIN32 -#include "Win32/Alarm.inc" -#endif Removed: llvm/trunk/lib/System/Atomic.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Atomic.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Atomic.cpp (original) +++ llvm/trunk/lib/System/Atomic.cpp (removed) @@ -1,112 +0,0 @@ -//===-- Atomic.cpp - Atomic Operations --------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This header file implements atomic operations. -// -//===----------------------------------------------------------------------===// - -#include "llvm/System/Atomic.h" -#include "llvm/Config/config.h" - -using namespace llvm; - -#if defined(_MSC_VER) -#include -#undef MemoryFence -#endif - -void sys::MemoryFence() { -#if LLVM_MULTITHREADED==0 - return; -#else -# if defined(__GNUC__) - __sync_synchronize(); -# elif defined(_MSC_VER) - MemoryBarrier(); -# else -# error No memory fence implementation for your platform! -# endif -#endif -} - -sys::cas_flag sys::CompareAndSwap(volatile sys::cas_flag* ptr, - sys::cas_flag new_value, - sys::cas_flag old_value) { -#if LLVM_MULTITHREADED==0 - sys::cas_flag result = *ptr; - if (result == old_value) - *ptr = new_value; - return result; -#elif defined(__GNUC__) - return __sync_val_compare_and_swap(ptr, old_value, new_value); -#elif defined(_MSC_VER) - return InterlockedCompareExchange(ptr, new_value, old_value); -#else -# error No compare-and-swap implementation for your platform! -#endif -} - -sys::cas_flag sys::AtomicIncrement(volatile sys::cas_flag* ptr) { -#if LLVM_MULTITHREADED==0 - ++(*ptr); - return *ptr; -#elif defined(__GNUC__) - return __sync_add_and_fetch(ptr, 1); -#elif defined(_MSC_VER) - return InterlockedIncrement(ptr); -#else -# error No atomic increment implementation for your platform! -#endif -} - -sys::cas_flag sys::AtomicDecrement(volatile sys::cas_flag* ptr) { -#if LLVM_MULTITHREADED==0 - --(*ptr); - return *ptr; -#elif defined(__GNUC__) - return __sync_sub_and_fetch(ptr, 1); -#elif defined(_MSC_VER) - return InterlockedDecrement(ptr); -#else -# error No atomic decrement implementation for your platform! -#endif -} - -sys::cas_flag sys::AtomicAdd(volatile sys::cas_flag* ptr, sys::cas_flag val) { -#if LLVM_MULTITHREADED==0 - *ptr += val; - return *ptr; -#elif defined(__GNUC__) - return __sync_add_and_fetch(ptr, val); -#elif defined(_MSC_VER) - return InterlockedExchangeAdd(ptr, val) + val; -#else -# error No atomic add implementation for your platform! -#endif -} - -sys::cas_flag sys::AtomicMul(volatile sys::cas_flag* ptr, sys::cas_flag val) { - sys::cas_flag original, result; - do { - original = *ptr; - result = original * val; - } while (sys::CompareAndSwap(ptr, result, original) != original); - - return result; -} - -sys::cas_flag sys::AtomicDiv(volatile sys::cas_flag* ptr, sys::cas_flag val) { - sys::cas_flag original, result; - do { - original = *ptr; - result = original / val; - } while (sys::CompareAndSwap(ptr, result, original) != original); - - return result; -} Removed: llvm/trunk/lib/System/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/CMakeLists.txt?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/CMakeLists.txt (original) +++ llvm/trunk/lib/System/CMakeLists.txt (removed) @@ -1,52 +0,0 @@ -set(LLVM_REQUIRES_RTTI 1) -if( MINGW ) - set(LLVM_REQUIRES_EH 1) -endif() - -add_llvm_library(LLVMSystem - Alarm.cpp - Atomic.cpp - Disassembler.cpp - DynamicLibrary.cpp - Errno.cpp - Host.cpp - IncludeFile.cpp - Memory.cpp - Mutex.cpp - Path.cpp - Process.cpp - Program.cpp - RWMutex.cpp - SearchForAddressOfSpecialSymbol.cpp - Signals.cpp - system_error.cpp - ThreadLocal.cpp - Threading.cpp - TimeValue.cpp - Valgrind.cpp - Unix/Alarm.inc - Unix/Host.inc - Unix/Memory.inc - Unix/Mutex.inc - Unix/Path.inc - Unix/Process.inc - Unix/Program.inc - Unix/RWMutex.inc - Unix/Signals.inc - Unix/system_error.inc - Unix/ThreadLocal.inc - Unix/TimeValue.inc - Win32/Alarm.inc - Win32/DynamicLibrary.inc - Win32/Host.inc - Win32/Memory.inc - Win32/Mutex.inc - Win32/Path.inc - Win32/Process.inc - Win32/Program.inc - Win32/RWMutex.inc - Win32/Signals.inc - Win32/system_error.inc - Win32/ThreadLocal.inc - Win32/TimeValue.inc - ) Removed: llvm/trunk/lib/System/Disassembler.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Disassembler.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Disassembler.cpp (original) +++ llvm/trunk/lib/System/Disassembler.cpp (removed) @@ -1,75 +0,0 @@ -//===- lib/System/Disassembler.cpp ------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the necessary glue to call external disassembler -// libraries. -// -//===----------------------------------------------------------------------===// - -#include "llvm/Config/config.h" -#include "llvm/System/Disassembler.h" - -#include -#include -#include -#include - -#if USE_UDIS86 -#include -#endif - -using namespace llvm; - -bool llvm::sys::hasDisassembler() -{ -#if defined (__i386__) || defined (__amd64__) || defined (__x86_64__) - // We have option to enable udis86 library. -# if USE_UDIS86 - return true; -#else - return false; -#endif -#else - return false; -#endif -} - -std::string llvm::sys::disassembleBuffer(uint8_t* start, size_t length, - uint64_t pc) { - std::stringstream res; - -#if (defined (__i386__) || defined (__amd64__) || defined (__x86_64__)) \ - && USE_UDIS86 - unsigned bits; -# if defined(__i386__) - bits = 32; -# else - bits = 64; -# endif - - ud_t ud_obj; - - ud_init(&ud_obj); - ud_set_input_buffer(&ud_obj, start, length); - ud_set_mode(&ud_obj, bits); - ud_set_pc(&ud_obj, pc); - ud_set_syntax(&ud_obj, UD_SYN_ATT); - - res << std::setbase(16) - << std::setw(bits/4); - - while (ud_disassemble(&ud_obj)) { - res << ud_insn_off(&ud_obj) << ":\t" << ud_insn_asm(&ud_obj) << "\n"; - } -#else - res << "No disassembler available. See configure help for options.\n"; -#endif - - return res.str(); -} Removed: llvm/trunk/lib/System/DynamicLibrary.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/DynamicLibrary.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/DynamicLibrary.cpp (original) +++ llvm/trunk/lib/System/DynamicLibrary.cpp (removed) @@ -1,177 +0,0 @@ -//===-- DynamicLibrary.cpp - Runtime link/load libraries --------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This header file implements the operating system DynamicLibrary concept. -// -// FIXME: This file leaks the ExplicitSymbols and OpenedHandles vector, and is -// not thread safe! -// -//===----------------------------------------------------------------------===// - -#include "llvm/System/DynamicLibrary.h" -#include "llvm/System/Mutex.h" -#include "llvm/Config/config.h" -#include -#include -#include -#include - -// Collection of symbol name/value pairs to be searched prior to any libraries. -static std::map *ExplicitSymbols = 0; - -namespace { - -struct ExplicitSymbolsDeleter { - ~ExplicitSymbolsDeleter() { - if (ExplicitSymbols) - delete ExplicitSymbols; - } -}; - -} - -static ExplicitSymbolsDeleter Dummy; - -void llvm::sys::DynamicLibrary::AddSymbol(const char* symbolName, - void *symbolValue) { - if (ExplicitSymbols == 0) - ExplicitSymbols = new std::map(); - (*ExplicitSymbols)[symbolName] = symbolValue; -} - -#ifdef LLVM_ON_WIN32 - -#include "Win32/DynamicLibrary.inc" - -#else - -#if HAVE_DLFCN_H -#include -using namespace llvm; -using namespace llvm::sys; - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only TRULY operating system -//=== independent code. -//===----------------------------------------------------------------------===// - -static SmartMutex* HandlesMutex; -static std::vector *OpenedHandles = 0; - -static bool InitializeMutex() { - HandlesMutex = new SmartMutex; - return HandlesMutex != 0; -} - -static bool EnsureMutexInitialized() { - static bool result = InitializeMutex(); - return result; -} - - -bool DynamicLibrary::LoadLibraryPermanently(const char *Filename, - std::string *ErrMsg) { - void *H = dlopen(Filename, RTLD_LAZY|RTLD_GLOBAL); - if (H == 0) { - if (ErrMsg) *ErrMsg = dlerror(); - return true; - } -#ifdef __CYGWIN__ - // Cygwin searches symbols only in the main - // with the handle of dlopen(NULL, RTLD_GLOBAL). - if (Filename == NULL) - H = RTLD_DEFAULT; -#endif - EnsureMutexInitialized(); - SmartScopedLock Lock(*HandlesMutex); - if (OpenedHandles == 0) - OpenedHandles = new std::vector(); - OpenedHandles->push_back(H); - return false; -} -#else - -using namespace llvm; -using namespace llvm::sys; - -bool DynamicLibrary::LoadLibraryPermanently(const char *Filename, - std::string *ErrMsg) { - if (ErrMsg) *ErrMsg = "dlopen() not supported on this platform"; - return true; -} -#endif - -namespace llvm { -void *SearchForAddressOfSpecialSymbol(const char* symbolName); -} - -void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) { - // First check symbols added via AddSymbol(). - if (ExplicitSymbols) { - std::map::iterator I = - ExplicitSymbols->find(symbolName); - std::map::iterator E = ExplicitSymbols->end(); - - if (I != E) - return I->second; - } - -#if HAVE_DLFCN_H - // Now search the libraries. - EnsureMutexInitialized(); - SmartScopedLock Lock(*HandlesMutex); - if (OpenedHandles) { - for (std::vector::iterator I = OpenedHandles->begin(), - E = OpenedHandles->end(); I != E; ++I) { - //lt_ptr ptr = lt_dlsym(*I, symbolName); - void *ptr = dlsym(*I, symbolName); - if (ptr) { - return ptr; - } - } - } -#endif - - if (void *Result = llvm::SearchForAddressOfSpecialSymbol(symbolName)) - return Result; - -// This macro returns the address of a well-known, explicit symbol -#define EXPLICIT_SYMBOL(SYM) \ - if (!strcmp(symbolName, #SYM)) return &SYM - -// On linux we have a weird situation. The stderr/out/in symbols are both -// macros and global variables because of standards requirements. So, we -// boldly use the EXPLICIT_SYMBOL macro without checking for a #define first. -#if defined(__linux__) - { - EXPLICIT_SYMBOL(stderr); - EXPLICIT_SYMBOL(stdout); - EXPLICIT_SYMBOL(stdin); - } -#else - // For everything else, we want to check to make sure the symbol isn't defined - // as a macro before using EXPLICIT_SYMBOL. - { -#ifndef stdin - EXPLICIT_SYMBOL(stdin); -#endif -#ifndef stdout - EXPLICIT_SYMBOL(stdout); -#endif -#ifndef stderr - EXPLICIT_SYMBOL(stderr); -#endif - } -#endif -#undef EXPLICIT_SYMBOL - - return 0; -} - -#endif // LLVM_ON_WIN32 Removed: llvm/trunk/lib/System/Errno.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Errno.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Errno.cpp (original) +++ llvm/trunk/lib/System/Errno.cpp (removed) @@ -1,74 +0,0 @@ -//===- Errno.cpp - errno support --------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the errno wrappers. -// -//===----------------------------------------------------------------------===// - -#include "llvm/System/Errno.h" -#include "llvm/Config/config.h" // Get autoconf configuration settings - -#if HAVE_STRING_H -#include - -#if HAVE_ERRNO_H -#include -#endif - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only TRULY operating system -//=== independent code. -//===----------------------------------------------------------------------===// - -namespace llvm { -namespace sys { - -#if HAVE_ERRNO_H -std::string StrError() { - return StrError(errno); -} -#endif // HAVE_ERRNO_H - -std::string StrError(int errnum) { - const int MaxErrStrLen = 2000; - char buffer[MaxErrStrLen]; - buffer[0] = '\0'; - char* str = buffer; -#ifdef HAVE_STRERROR_R - // strerror_r is thread-safe. - if (errnum) -# if defined(__GLIBC__) && defined(_GNU_SOURCE) - // glibc defines its own incompatible version of strerror_r - // which may not use the buffer supplied. - str = strerror_r(errnum,buffer,MaxErrStrLen-1); -# else - strerror_r(errnum,buffer,MaxErrStrLen-1); -# endif -#elif defined(HAVE_STRERROR_S) // Windows. - if (errnum) - strerror_s(buffer, errnum); -#elif defined(HAVE_STRERROR) - // Copy the thread un-safe result of strerror into - // the buffer as fast as possible to minimize impact - // of collision of strerror in multiple threads. - if (errnum) - strncpy(buffer,strerror(errnum),MaxErrStrLen-1); - buffer[MaxErrStrLen-1] = '\0'; -#else - // Strange that this system doesn't even have strerror - // but, oh well, just use a generic message - sprintf(buffer, "Error #%d", errnum); -#endif - return str; -} - -} // namespace sys -} // namespace llvm - -#endif // HAVE_STRING_H Removed: llvm/trunk/lib/System/Host.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Host.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Host.cpp (original) +++ llvm/trunk/lib/System/Host.cpp (removed) @@ -1,307 +0,0 @@ -//===-- Host.cpp - Implement OS Host Concept --------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This header file implements the operating system Host concept. -// -//===----------------------------------------------------------------------===// - -#include "llvm/System/Host.h" -#include "llvm/Config/config.h" -#include - -// Include the platform-specific parts of this class. -#ifdef LLVM_ON_UNIX -#include "Unix/Host.inc" -#endif -#ifdef LLVM_ON_WIN32 -#include "Win32/Host.inc" -#endif -#ifdef _MSC_VER -#include -#endif - -//===----------------------------------------------------------------------===// -// -// Implementations of the CPU detection routines -// -//===----------------------------------------------------------------------===// - -using namespace llvm; - -#if defined(i386) || defined(__i386__) || defined(__x86__) || defined(_M_IX86)\ - || defined(__x86_64__) || defined(_M_AMD64) || defined (_M_X64) - -/// GetX86CpuIDAndInfo - Execute the specified cpuid and return the 4 values in the -/// specified arguments. If we can't run cpuid on the host, return true. -static bool GetX86CpuIDAndInfo(unsigned value, unsigned *rEAX, - unsigned *rEBX, unsigned *rECX, unsigned *rEDX) { -#if defined(__x86_64__) || defined(_M_AMD64) || defined (_M_X64) - #if defined(__GNUC__) - // gcc doesn't know cpuid would clobber ebx/rbx. Preseve it manually. - asm ("movq\t%%rbx, %%rsi\n\t" - "cpuid\n\t" - "xchgq\t%%rbx, %%rsi\n\t" - : "=a" (*rEAX), - "=S" (*rEBX), - "=c" (*rECX), - "=d" (*rEDX) - : "a" (value)); - return false; - #elif defined(_MSC_VER) - int registers[4]; - __cpuid(registers, value); - *rEAX = registers[0]; - *rEBX = registers[1]; - *rECX = registers[2]; - *rEDX = registers[3]; - return false; - #endif -#elif defined(i386) || defined(__i386__) || defined(__x86__) || defined(_M_IX86) - #if defined(__GNUC__) - asm ("movl\t%%ebx, %%esi\n\t" - "cpuid\n\t" - "xchgl\t%%ebx, %%esi\n\t" - : "=a" (*rEAX), - "=S" (*rEBX), - "=c" (*rECX), - "=d" (*rEDX) - : "a" (value)); - return false; - #elif defined(_MSC_VER) - __asm { - mov eax,value - cpuid - mov esi,rEAX - mov dword ptr [esi],eax - mov esi,rEBX - mov dword ptr [esi],ebx - mov esi,rECX - mov dword ptr [esi],ecx - mov esi,rEDX - mov dword ptr [esi],edx - } - return false; - #endif -#endif - return true; -} - -static void DetectX86FamilyModel(unsigned EAX, unsigned &Family, - unsigned &Model) { - Family = (EAX >> 8) & 0xf; // Bits 8 - 11 - Model = (EAX >> 4) & 0xf; // Bits 4 - 7 - if (Family == 6 || Family == 0xf) { - if (Family == 0xf) - // Examine extended family ID if family ID is F. - Family += (EAX >> 20) & 0xff; // Bits 20 - 27 - // Examine extended model ID if family ID is 6 or F. - Model += ((EAX >> 16) & 0xf) << 4; // Bits 16 - 19 - } -} - -std::string sys::getHostCPUName() { - unsigned EAX = 0, EBX = 0, ECX = 0, EDX = 0; - if (GetX86CpuIDAndInfo(0x1, &EAX, &EBX, &ECX, &EDX)) - return "generic"; - unsigned Family = 0; - unsigned Model = 0; - DetectX86FamilyModel(EAX, Family, Model); - - bool HasSSE3 = (ECX & 0x1); - GetX86CpuIDAndInfo(0x80000001, &EAX, &EBX, &ECX, &EDX); - bool Em64T = (EDX >> 29) & 0x1; - - union { - unsigned u[3]; - char c[12]; - } text; - - GetX86CpuIDAndInfo(0, &EAX, text.u+0, text.u+2, text.u+1); - if (memcmp(text.c, "GenuineIntel", 12) == 0) { - switch (Family) { - case 3: - return "i386"; - case 4: - switch (Model) { - case 0: // Intel486 DX processors - case 1: // Intel486 DX processors - case 2: // Intel486 SX processors - case 3: // Intel487 processors, IntelDX2 OverDrive processors, - // IntelDX2 processors - case 4: // Intel486 SL processor - case 5: // IntelSX2 processors - case 7: // Write-Back Enhanced IntelDX2 processors - case 8: // IntelDX4 OverDrive processors, IntelDX4 processors - default: return "i486"; - } - case 5: - switch (Model) { - case 1: // Pentium OverDrive processor for Pentium processor (60, 66), - // Pentium processors (60, 66) - case 2: // Pentium OverDrive processor for Pentium processor (75, 90, - // 100, 120, 133), Pentium processors (75, 90, 100, 120, 133, - // 150, 166, 200) - case 3: // Pentium OverDrive processors for Intel486 processor-based - // systems - return "pentium"; - - case 4: // Pentium OverDrive processor with MMX technology for Pentium - // processor (75, 90, 100, 120, 133), Pentium processor with - // MMX technology (166, 200) - return "pentium-mmx"; - - default: return "pentium"; - } - case 6: - switch (Model) { - case 1: // Pentium Pro processor - return "pentiumpro"; - - case 3: // Intel Pentium II OverDrive processor, Pentium II processor, - // model 03 - case 5: // Pentium II processor, model 05, Pentium II Xeon processor, - // model 05, and Intel Celeron processor, model 05 - case 6: // Celeron processor, model 06 - return "pentium2"; - - case 7: // Pentium III processor, model 07, and Pentium III Xeon - // processor, model 07 - case 8: // Pentium III processor, model 08, Pentium III Xeon processor, - // model 08, and Celeron processor, model 08 - case 10: // Pentium III Xeon processor, model 0Ah - case 11: // Pentium III processor, model 0Bh - return "pentium3"; - - case 9: // Intel Pentium M processor, Intel Celeron M processor model 09. - case 13: // Intel Pentium M processor, Intel Celeron M processor, model - // 0Dh. All processors are manufactured using the 90 nm process. - return "pentium-m"; - - case 14: // Intel Core Duo processor, Intel Core Solo processor, model - // 0Eh. All processors are manufactured using the 65 nm process. - return "yonah"; - - case 15: // Intel Core 2 Duo processor, Intel Core 2 Duo mobile - // processor, Intel Core 2 Quad processor, Intel Core 2 Quad - // mobile processor, Intel Core 2 Extreme processor, Intel - // Pentium Dual-Core processor, Intel Xeon processor, model - // 0Fh. All processors are manufactured using the 65 nm process. - case 22: // Intel Celeron processor model 16h. All processors are - // manufactured using the 65 nm process - return "core2"; - - case 21: // Intel EP80579 Integrated Processor and Intel EP80579 - // Integrated Processor with Intel QuickAssist Technology - return "i686"; // FIXME: ??? - - case 23: // Intel Core 2 Extreme processor, Intel Xeon processor, model - // 17h. All processors are manufactured using the 45 nm process. - // - // 45nm: Penryn , Wolfdale, Yorkfield (XE) - return "penryn"; - - case 26: // Intel Core i7 processor and Intel Xeon processor. All - // processors are manufactured using the 45 nm process. - case 29: // Intel Xeon processor MP. All processors are manufactured using - // the 45 nm process. - case 30: // Intel(R) Core(TM) i7 CPU 870 @ 2.93GHz. - // As found in a Summer 2010 model iMac. - case 37: // Intel Core i7, laptop version. - return "corei7"; - - case 28: // Intel Atom processor. All processors are manufactured using - // the 45 nm process - return "atom"; - - default: return "i686"; - } - case 15: { - switch (Model) { - case 0: // Pentium 4 processor, Intel Xeon processor. All processors are - // model 00h and manufactured using the 0.18 micron process. - case 1: // Pentium 4 processor, Intel Xeon processor, Intel Xeon - // processor MP, and Intel Celeron processor. All processors are - // model 01h and manufactured using the 0.18 micron process. - case 2: // Pentium 4 processor, Mobile Intel Pentium 4 processor - M, - // Intel Xeon processor, Intel Xeon processor MP, Intel Celeron - // processor, and Mobile Intel Celeron processor. All processors - // are model 02h and manufactured using the 0.13 micron process. - return (Em64T) ? "x86-64" : "pentium4"; - - case 3: // Pentium 4 processor, Intel Xeon processor, Intel Celeron D - // processor. All processors are model 03h and manufactured using - // the 90 nm process. - case 4: // Pentium 4 processor, Pentium 4 processor Extreme Edition, - // Pentium D processor, Intel Xeon processor, Intel Xeon - // processor MP, Intel Celeron D processor. All processors are - // model 04h and manufactured using the 90 nm process. - case 6: // Pentium 4 processor, Pentium D processor, Pentium processor - // Extreme Edition, Intel Xeon processor, Intel Xeon processor - // MP, Intel Celeron D processor. All processors are model 06h - // and manufactured using the 65 nm process. - return (Em64T) ? "nocona" : "prescott"; - - default: - return (Em64T) ? "x86-64" : "pentium4"; - } - } - - default: - return "generic"; - } - } else if (memcmp(text.c, "AuthenticAMD", 12) == 0) { - // FIXME: this poorly matches the generated SubtargetFeatureKV table. There - // appears to be no way to generate the wide variety of AMD-specific targets - // from the information returned from CPUID. - switch (Family) { - case 4: - return "i486"; - case 5: - switch (Model) { - case 6: - case 7: return "k6"; - case 8: return "k6-2"; - case 9: - case 13: return "k6-3"; - default: return "pentium"; - } - case 6: - switch (Model) { - case 4: return "athlon-tbird"; - case 6: - case 7: - case 8: return "athlon-mp"; - case 10: return "athlon-xp"; - default: return "athlon"; - } - case 15: - if (HasSSE3) - return "k8-sse3"; - switch (Model) { - case 1: return "opteron"; - case 5: return "athlon-fx"; // also opteron - default: return "athlon64"; - } - case 16: - return "amdfam10"; - default: - return "generic"; - } - } - return "generic"; -} -#else -std::string sys::getHostCPUName() { - return "generic"; -} -#endif - -bool sys::getHostCPUFeatures(StringMap &Features){ - return false; -} Removed: llvm/trunk/lib/System/IncludeFile.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/IncludeFile.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/IncludeFile.cpp (original) +++ llvm/trunk/lib/System/IncludeFile.cpp (removed) @@ -1,20 +0,0 @@ -//===- lib/System/IncludeFile.cpp - Ensure Linking Of Implementation -----===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the IncludeFile constructor. -// -//===----------------------------------------------------------------------===// - -#include "llvm/System/IncludeFile.h" - -using namespace llvm; - -// This constructor is used to ensure linking of other modules. See the -// llvm/System/IncludeFile.h header for details. -IncludeFile::IncludeFile(const void*) {} Removed: llvm/trunk/lib/System/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Makefile?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Makefile (original) +++ llvm/trunk/lib/System/Makefile (removed) @@ -1,20 +0,0 @@ -##===- lib/System/Makefile ---------------------------------*- Makefile -*-===## -# -# The LLVM Compiler Infrastructure -# -# This file is distributed under the University of Illinois Open Source -# License. See LICENSE.TXT for details. -# -##===----------------------------------------------------------------------===## - -LEVEL = ../.. -LIBRARYNAME = LLVMSystem -BUILD_ARCHIVE = 1 -REQUIRES_RTTI = 1 - -EXTRA_DIST = Unix Win32 README.txt - -include $(LEVEL)/Makefile.common - -CompileCommonOpts := $(filter-out -pedantic,$(CompileCommonOpts)) -CompileCommonOpts := $(filter-out -Wno-long-long,$(CompileCommonOpts)) Removed: llvm/trunk/lib/System/Memory.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Memory.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Memory.cpp (original) +++ llvm/trunk/lib/System/Memory.cpp (removed) @@ -1,74 +0,0 @@ -//===- Memory.cpp - Memory Handling Support ---------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file defines some helpful functions for allocating memory and dealing -// with memory mapped files -// -//===----------------------------------------------------------------------===// - -#include "llvm/System/Memory.h" -#include "llvm/System/Valgrind.h" -#include "llvm/Config/config.h" - -namespace llvm { -using namespace sys; -} - -// Include the platform-specific parts of this class. -#ifdef LLVM_ON_UNIX -#include "Unix/Memory.inc" -#endif -#ifdef LLVM_ON_WIN32 -#include "Win32/Memory.inc" -#endif - -extern "C" void sys_icache_invalidate(const void *Addr, size_t len); - -/// InvalidateInstructionCache - Before the JIT can run a block of code -/// that has been emitted it must invalidate the instruction cache on some -/// platforms. -void llvm::sys::Memory::InvalidateInstructionCache(const void *Addr, - size_t Len) { - -// icache invalidation for PPC and ARM. -#if defined(__APPLE__) - -# if (defined(__POWERPC__) || defined (__ppc__) || \ - defined(_POWER) || defined(_ARCH_PPC)) || defined(__arm__) - sys_icache_invalidate(Addr, Len); -# endif - -#else - -# if (defined(__POWERPC__) || defined (__ppc__) || \ - defined(_POWER) || defined(_ARCH_PPC)) && defined(__GNUC__) - const size_t LineSize = 32; - - const intptr_t Mask = ~(LineSize - 1); - const intptr_t StartLine = ((intptr_t) Addr) & Mask; - const intptr_t EndLine = ((intptr_t) Addr + Len + LineSize - 1) & Mask; - - for (intptr_t Line = StartLine; Line < EndLine; Line += LineSize) - asm volatile("dcbf 0, %0" : : "r"(Line)); - asm volatile("sync"); - - for (intptr_t Line = StartLine; Line < EndLine; Line += LineSize) - asm volatile("icbi 0, %0" : : "r"(Line)); - asm volatile("isync"); -# elif defined(__arm__) && defined(__GNUC__) - // FIXME: Can we safely always call this for __GNUC__ everywhere? - char *Start = (char*) Addr; - char *End = Start + Len; - __clear_cache(Start, End); -# endif - -#endif // end apple - - ValgrindDiscardTranslations(Addr, Len); -} Removed: llvm/trunk/lib/System/Mutex.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Mutex.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Mutex.cpp (original) +++ llvm/trunk/lib/System/Mutex.cpp (removed) @@ -1,157 +0,0 @@ -//===- Mutex.cpp - Mutual Exclusion Lock ------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the llvm::sys::Mutex class. -// -//===----------------------------------------------------------------------===// - -#include "llvm/Config/config.h" -#include "llvm/System/Mutex.h" - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only TRULY operating system -//=== independent code. -//===----------------------------------------------------------------------===// - -#if !defined(ENABLE_THREADS) || ENABLE_THREADS == 0 -// Define all methods as no-ops if threading is explicitly disabled -namespace llvm { -using namespace sys; -MutexImpl::MutexImpl( bool recursive) { } -MutexImpl::~MutexImpl() { } -bool MutexImpl::acquire() { return true; } -bool MutexImpl::release() { return true; } -bool MutexImpl::tryacquire() { return true; } -} -#else - -#if defined(HAVE_PTHREAD_H) && defined(HAVE_PTHREAD_MUTEX_LOCK) - -#include -#include -#include - -namespace llvm { -using namespace sys; - - -// This variable is useful for situations where the pthread library has been -// compiled with weak linkage for its interface symbols. This allows the -// threading support to be turned off by simply not linking against -lpthread. -// In that situation, the value of pthread_mutex_init will be 0 and -// consequently pthread_enabled will be false. In such situations, all the -// pthread operations become no-ops and the functions all return false. If -// pthread_mutex_init does have an address, then mutex support is enabled. -// Note: all LLVM tools will link against -lpthread if its available since it -// is configured into the LIBS variable. -// Note: this line of code generates a warning if pthread_mutex_init is not -// declared with weak linkage. It's safe to ignore the warning. -static const bool pthread_enabled = true; - -// Construct a Mutex using pthread calls -MutexImpl::MutexImpl( bool recursive) - : data_(0) -{ - if (pthread_enabled) - { - // Declare the pthread_mutex data structures - pthread_mutex_t* mutex = - static_cast(malloc(sizeof(pthread_mutex_t))); - pthread_mutexattr_t attr; - - // Initialize the mutex attributes - int errorcode = pthread_mutexattr_init(&attr); - assert(errorcode == 0); - - // Initialize the mutex as a recursive mutex, if requested, or normal - // otherwise. - int kind = ( recursive ? PTHREAD_MUTEX_RECURSIVE : PTHREAD_MUTEX_NORMAL ); - errorcode = pthread_mutexattr_settype(&attr, kind); - assert(errorcode == 0); - -#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__DragonFly__) - // Make it a process local mutex - errorcode = pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_PRIVATE); -#endif - - // Initialize the mutex - errorcode = pthread_mutex_init(mutex, &attr); - assert(errorcode == 0); - - // Destroy the attributes - errorcode = pthread_mutexattr_destroy(&attr); - assert(errorcode == 0); - - // Assign the data member - data_ = mutex; - } -} - -// Destruct a Mutex -MutexImpl::~MutexImpl() -{ - if (pthread_enabled) - { - pthread_mutex_t* mutex = static_cast(data_); - assert(mutex != 0); - pthread_mutex_destroy(mutex); - free(mutex); - } -} - -bool -MutexImpl::acquire() -{ - if (pthread_enabled) - { - pthread_mutex_t* mutex = static_cast(data_); - assert(mutex != 0); - - int errorcode = pthread_mutex_lock(mutex); - return errorcode == 0; - } else return false; -} - -bool -MutexImpl::release() -{ - if (pthread_enabled) - { - pthread_mutex_t* mutex = static_cast(data_); - assert(mutex != 0); - - int errorcode = pthread_mutex_unlock(mutex); - return errorcode == 0; - } else return false; -} - -bool -MutexImpl::tryacquire() -{ - if (pthread_enabled) - { - pthread_mutex_t* mutex = static_cast(data_); - assert(mutex != 0); - - int errorcode = pthread_mutex_trylock(mutex); - return errorcode == 0; - } else return false; -} - -} - -#elif defined(LLVM_ON_UNIX) -#include "Unix/Mutex.inc" -#elif defined( LLVM_ON_WIN32) -#include "Win32/Mutex.inc" -#else -#warning Neither LLVM_ON_UNIX nor LLVM_ON_WIN32 was set in System/Mutex.cpp -#endif -#endif - Removed: llvm/trunk/lib/System/Path.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Path.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Path.cpp (original) +++ llvm/trunk/lib/System/Path.cpp (removed) @@ -1,297 +0,0 @@ -//===-- Path.cpp - Implement OS Path Concept --------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This header file implements the operating system Path concept. -// -//===----------------------------------------------------------------------===// - -#include "llvm/System/Path.h" -#include "llvm/Config/config.h" -#include -#include -#include -using namespace llvm; -using namespace sys; - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only TRULY operating system -//=== independent code. -//===----------------------------------------------------------------------===// - -bool Path::operator==(const Path &that) const { - return path == that.path; -} - -bool Path::operator<(const Path& that) const { - return path < that.path; -} - -Path -Path::GetLLVMConfigDir() { - Path result; -#ifdef LLVM_ETCDIR - if (result.set(LLVM_ETCDIR)) - return result; -#endif - return GetLLVMDefaultConfigDir(); -} - -LLVMFileType -sys::IdentifyFileType(const char *magic, unsigned length) { - assert(magic && "Invalid magic number string"); - assert(length >=4 && "Invalid magic number length"); - switch ((unsigned char)magic[0]) { - case 0xDE: // 0x0B17C0DE = BC wraper - if (magic[1] == (char)0xC0 && magic[2] == (char)0x17 && - magic[3] == (char)0x0B) - return Bitcode_FileType; - break; - case 'B': - if (magic[1] == 'C' && magic[2] == (char)0xC0 && magic[3] == (char)0xDE) - return Bitcode_FileType; - break; - case '!': - if (length >= 8) - if (memcmp(magic,"!\n",8) == 0) - return Archive_FileType; - break; - - case '\177': - if (magic[1] == 'E' && magic[2] == 'L' && magic[3] == 'F') { - if (length >= 18 && magic[17] == 0) - switch (magic[16]) { - default: break; - case 1: return ELF_Relocatable_FileType; - case 2: return ELF_Executable_FileType; - case 3: return ELF_SharedObject_FileType; - case 4: return ELF_Core_FileType; - } - } - break; - - case 0xCA: - if (magic[1] == char(0xFE) && magic[2] == char(0xBA) && - magic[3] == char(0xBE)) { - // This is complicated by an overlap with Java class files. - // See the Mach-O section in /usr/share/file/magic for details. - if (length >= 8 && magic[7] < 43) - // FIXME: Universal Binary of any type. - return Mach_O_DynamicallyLinkedSharedLib_FileType; - } - break; - - case 0xFE: - case 0xCE: { - uint16_t type = 0; - if (magic[0] == char(0xFE) && magic[1] == char(0xED) && - magic[2] == char(0xFA) && magic[3] == char(0xCE)) { - /* Native endian */ - if (length >= 16) type = magic[14] << 8 | magic[15]; - } else if (magic[0] == char(0xCE) && magic[1] == char(0xFA) && - magic[2] == char(0xED) && magic[3] == char(0xFE)) { - /* Reverse endian */ - if (length >= 14) type = magic[13] << 8 | magic[12]; - } - switch (type) { - default: break; - case 1: return Mach_O_Object_FileType; - case 2: return Mach_O_Executable_FileType; - case 3: return Mach_O_FixedVirtualMemorySharedLib_FileType; - case 4: return Mach_O_Core_FileType; - case 5: return Mach_O_PreloadExecutable_FileType; - case 6: return Mach_O_DynamicallyLinkedSharedLib_FileType; - case 7: return Mach_O_DynamicLinker_FileType; - case 8: return Mach_O_Bundle_FileType; - case 9: return Mach_O_DynamicallyLinkedSharedLibStub_FileType; - case 10: break; // FIXME: MH_DSYM companion file with only debug. - } - break; - } - case 0xF0: // PowerPC Windows - case 0x83: // Alpha 32-bit - case 0x84: // Alpha 64-bit - case 0x66: // MPS R4000 Windows - case 0x50: // mc68K - case 0x4c: // 80386 Windows - if (magic[1] == 0x01) - return COFF_FileType; - - case 0x90: // PA-RISC Windows - case 0x68: // mc68K Windows - if (magic[1] == 0x02) - return COFF_FileType; - break; - case 0x64: // x86-64 Windows. - if (magic[1] == char(0x86)) - return COFF_FileType; - break; - - default: - break; - } - return Unknown_FileType; -} - -bool -Path::isArchive() const { - return hasMagicNumber("!\012"); -} - -bool -Path::isDynamicLibrary() const { - std::string Magic; - if (getMagicNumber(Magic, 64)) - switch (IdentifyFileType(Magic.c_str(), - static_cast(Magic.length()))) { - default: return false; - case Mach_O_FixedVirtualMemorySharedLib_FileType: - case Mach_O_DynamicallyLinkedSharedLib_FileType: - case Mach_O_DynamicallyLinkedSharedLibStub_FileType: - case ELF_SharedObject_FileType: - case COFF_FileType: return true; - } - - return false; -} - -bool -Path::isObjectFile() const { - std::string Magic; - if (getMagicNumber(Magic, 64)) - if (IdentifyFileType(Magic.c_str(), - static_cast(Magic.length())) - != Unknown_FileType) { - // Everything in LLVMFileType is currently an object file. - return true; - } - - return false; -} - -Path -Path::FindLibrary(std::string& name) { - std::vector LibPaths; - GetSystemLibraryPaths(LibPaths); - for (unsigned i = 0; i < LibPaths.size(); ++i) { - sys::Path FullPath(LibPaths[i]); - FullPath.appendComponent("lib" + name + LTDL_SHLIB_EXT); - if (FullPath.isDynamicLibrary()) - return FullPath; - FullPath.eraseSuffix(); - FullPath.appendSuffix("a"); - if (FullPath.isArchive()) - return FullPath; - } - return sys::Path(); -} - -StringRef Path::GetDLLSuffix() { - return &(LTDL_SHLIB_EXT[1]); -} - -bool -Path::appendSuffix(StringRef suffix) { - if (!suffix.empty()) { - std::string save(path); - path.append("."); - path.append(suffix); - if (!isValid()) { - path = save; - return false; - } - } - - return true; -} - -bool -Path::isBitcodeFile() const { - std::string actualMagic; - if (!getMagicNumber(actualMagic, 4)) - return false; - LLVMFileType FT = - IdentifyFileType(actualMagic.c_str(), - static_cast(actualMagic.length())); - return FT == Bitcode_FileType; -} - -bool Path::hasMagicNumber(StringRef Magic) const { - std::string actualMagic; - if (getMagicNumber(actualMagic, static_cast(Magic.size()))) - return Magic == actualMagic; - return false; -} - -static void getPathList(const char*path, std::vector& Paths) { - const char* at = path; - const char* delim = strchr(at, PathSeparator); - Path tmpPath; - while (delim != 0) { - std::string tmp(at, size_t(delim-at)); - if (tmpPath.set(tmp)) - if (tmpPath.canRead()) - Paths.push_back(tmpPath); - at = delim + 1; - delim = strchr(at, PathSeparator); - } - - if (*at != 0) - if (tmpPath.set(std::string(at))) - if (tmpPath.canRead()) - Paths.push_back(tmpPath); -} - -static StringRef getDirnameCharSep(StringRef path, const char *Sep) { - assert(Sep[0] != '\0' && Sep[1] == '\0' && - "Sep must be a 1-character string literal."); - if (path.empty()) - return "."; - - // If the path is all slashes, return a single slash. - // Otherwise, remove all trailing slashes. - - signed pos = static_cast(path.size()) - 1; - - while (pos >= 0 && path[pos] == Sep[0]) - --pos; - - if (pos < 0) - return path[0] == Sep[0] ? Sep : "."; - - // Any slashes left? - signed i = 0; - - while (i < pos && path[i] != Sep[0]) - ++i; - - if (i == pos) // No slashes? Return "." - return "."; - - // There is at least one slash left. Remove all trailing non-slashes. - while (pos >= 0 && path[pos] != Sep[0]) - --pos; - - // Remove any trailing slashes. - while (pos >= 0 && path[pos] == Sep[0]) - --pos; - - if (pos < 0) - return path[0] == Sep[0] ? Sep : "."; - - return path.substr(0, pos+1); -} - -// Include the truly platform-specific parts of this class. -#if defined(LLVM_ON_UNIX) -#include "Unix/Path.inc" -#endif -#if defined(LLVM_ON_WIN32) -#include "Win32/Path.inc" -#endif - Removed: llvm/trunk/lib/System/Process.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Process.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Process.cpp (original) +++ llvm/trunk/lib/System/Process.cpp (removed) @@ -1,33 +0,0 @@ -//===-- Process.cpp - Implement OS Process Concept --------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This header file implements the operating system Process concept. -// -//===----------------------------------------------------------------------===// - -#include "llvm/System/Process.h" -#include "llvm/Config/config.h" - -namespace llvm { -using namespace sys; - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only TRULY operating system -//=== independent code. -//===----------------------------------------------------------------------===// - -} - -// Include the platform-specific parts of this class. -#ifdef LLVM_ON_UNIX -#include "Unix/Process.inc" -#endif -#ifdef LLVM_ON_WIN32 -#include "Win32/Process.inc" -#endif Removed: llvm/trunk/lib/System/Program.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Program.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Program.cpp (original) +++ llvm/trunk/lib/System/Program.cpp (removed) @@ -1,56 +0,0 @@ -//===-- Program.cpp - Implement OS Program Concept --------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This header file implements the operating system Program concept. -// -//===----------------------------------------------------------------------===// - -#include "llvm/System/Program.h" -#include "llvm/Config/config.h" -using namespace llvm; -using namespace sys; - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only TRULY operating system -//=== independent code. -//===----------------------------------------------------------------------===// - -int -Program::ExecuteAndWait(const Path& path, - const char** args, - const char** envp, - const Path** redirects, - unsigned secondsToWait, - unsigned memoryLimit, - std::string* ErrMsg) { - Program prg; - if (prg.Execute(path, args, envp, redirects, memoryLimit, ErrMsg)) - return prg.Wait(path, secondsToWait, ErrMsg); - else - return -1; -} - -void -Program::ExecuteNoWait(const Path& path, - const char** args, - const char** envp, - const Path** redirects, - unsigned memoryLimit, - std::string* ErrMsg) { - Program prg; - prg.Execute(path, args, envp, redirects, memoryLimit, ErrMsg); -} - -// Include the platform-specific parts of this class. -#ifdef LLVM_ON_UNIX -#include "Unix/Program.inc" -#endif -#ifdef LLVM_ON_WIN32 -#include "Win32/Program.inc" -#endif Removed: llvm/trunk/lib/System/README.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/README.txt?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/README.txt (original) +++ llvm/trunk/lib/System/README.txt (removed) @@ -1,43 +0,0 @@ -Design Of lib/System -==================== - -The software in this directory is designed to completely shield LLVM from any -and all operating system specific functionality. It is not intended to be a -complete operating system wrapper (such as ACE), but only to provide the -functionality necessary to support LLVM. - -The software located here, of necessity, has very specific and stringent design -rules. Violation of these rules means that cracks in the shield could form and -the primary goal of the library is defeated. By consistently using this library, -LLVM becomes more easily ported to new platforms since the only thing requiring -porting is this library. - -Complete documentation for the library can be found in the file: - llvm/docs/SystemLibrary.html -or at this URL: - http://llvm.org/docs/SystemLibrary.html - -While we recommend that you read the more detailed documentation, for the -impatient, here's a high level summary of the library's requirements. - - 1. No system header files are to be exposed through the interface. - 2. Std C++ and Std C header files are okay to be exposed through the interface. - 3. No exposed system-specific functions. - 4. No exposed system-specific data. - 5. Data in lib/System classes must use only simple C++ intrinsic types. - 6. Errors are handled by returning "true" and setting an optional std::string - 7. Library must not throw any exceptions, period. - 8. Interface functions must not have throw() specifications. - 9. No duplicate function impementations are permitted within an operating - system class. - -To accomplish these requirements, the library has numerous design criteria that -must be satisfied. Here's a high level summary of the library's design criteria: - - 1. No unused functionality (only what LLVM needs) - 2. High-Level Interfaces - 3. Use Opaque Classes - 4. Common Implementations - 5. Multiple Implementations - 6. Minimize Memory Allocation - 7. No Virtual Methods Removed: llvm/trunk/lib/System/RWMutex.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/RWMutex.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/RWMutex.cpp (original) +++ llvm/trunk/lib/System/RWMutex.cpp (removed) @@ -1,157 +0,0 @@ -//===- RWMutex.cpp - Reader/Writer Mutual Exclusion Lock --------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the llvm::sys::RWMutex class. -// -//===----------------------------------------------------------------------===// - -#include "llvm/Config/config.h" -#include "llvm/System/RWMutex.h" -#include - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only TRULY operating system -//=== independent code. -//===----------------------------------------------------------------------===// - -#if !defined(ENABLE_THREADS) || ENABLE_THREADS == 0 -// Define all methods as no-ops if threading is explicitly disabled -namespace llvm { -using namespace sys; -RWMutexImpl::RWMutexImpl() { } -RWMutexImpl::~RWMutexImpl() { } -bool RWMutexImpl::reader_acquire() { return true; } -bool RWMutexImpl::reader_release() { return true; } -bool RWMutexImpl::writer_acquire() { return true; } -bool RWMutexImpl::writer_release() { return true; } -} -#else - -#if defined(HAVE_PTHREAD_H) && defined(HAVE_PTHREAD_RWLOCK_INIT) - -#include -#include -#include - -namespace llvm { -using namespace sys; - - -// This variable is useful for situations where the pthread library has been -// compiled with weak linkage for its interface symbols. This allows the -// threading support to be turned off by simply not linking against -lpthread. -// In that situation, the value of pthread_mutex_init will be 0 and -// consequently pthread_enabled will be false. In such situations, all the -// pthread operations become no-ops and the functions all return false. If -// pthread_rwlock_init does have an address, then rwlock support is enabled. -// Note: all LLVM tools will link against -lpthread if its available since it -// is configured into the LIBS variable. -// Note: this line of code generates a warning if pthread_rwlock_init is not -// declared with weak linkage. It's safe to ignore the warning. -static const bool pthread_enabled = true; - -// Construct a RWMutex using pthread calls -RWMutexImpl::RWMutexImpl() - : data_(0) -{ - if (pthread_enabled) - { - // Declare the pthread_rwlock data structures - pthread_rwlock_t* rwlock = - static_cast(malloc(sizeof(pthread_rwlock_t))); - -#ifdef __APPLE__ - // Workaround a bug/mis-feature in Darwin's pthread_rwlock_init. - bzero(rwlock, sizeof(pthread_rwlock_t)); -#endif - - // Initialize the rwlock - int errorcode = pthread_rwlock_init(rwlock, NULL); - (void)errorcode; - assert(errorcode == 0); - - // Assign the data member - data_ = rwlock; - } -} - -// Destruct a RWMutex -RWMutexImpl::~RWMutexImpl() -{ - if (pthread_enabled) - { - pthread_rwlock_t* rwlock = static_cast(data_); - assert(rwlock != 0); - pthread_rwlock_destroy(rwlock); - free(rwlock); - } -} - -bool -RWMutexImpl::reader_acquire() -{ - if (pthread_enabled) - { - pthread_rwlock_t* rwlock = static_cast(data_); - assert(rwlock != 0); - - int errorcode = pthread_rwlock_rdlock(rwlock); - return errorcode == 0; - } else return false; -} - -bool -RWMutexImpl::reader_release() -{ - if (pthread_enabled) - { - pthread_rwlock_t* rwlock = static_cast(data_); - assert(rwlock != 0); - - int errorcode = pthread_rwlock_unlock(rwlock); - return errorcode == 0; - } else return false; -} - -bool -RWMutexImpl::writer_acquire() -{ - if (pthread_enabled) - { - pthread_rwlock_t* rwlock = static_cast(data_); - assert(rwlock != 0); - - int errorcode = pthread_rwlock_wrlock(rwlock); - return errorcode == 0; - } else return false; -} - -bool -RWMutexImpl::writer_release() -{ - if (pthread_enabled) - { - pthread_rwlock_t* rwlock = static_cast(data_); - assert(rwlock != 0); - - int errorcode = pthread_rwlock_unlock(rwlock); - return errorcode == 0; - } else return false; -} - -} - -#elif defined(LLVM_ON_UNIX) -#include "Unix/RWMutex.inc" -#elif defined( LLVM_ON_WIN32) -#include "Win32/RWMutex.inc" -#else -#warning Neither LLVM_ON_UNIX nor LLVM_ON_WIN32 was set in System/Mutex.cpp -#endif -#endif Removed: llvm/trunk/lib/System/SearchForAddressOfSpecialSymbol.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/SearchForAddressOfSpecialSymbol.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/SearchForAddressOfSpecialSymbol.cpp (original) +++ llvm/trunk/lib/System/SearchForAddressOfSpecialSymbol.cpp (removed) @@ -1,68 +0,0 @@ -//===- SearchForAddressOfSpecialSymbol.cpp - Function addresses -*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file pulls the addresses of certain symbols out of the linker. It must -// include as few header files as possible because it declares the symbols as -// void*, which would conflict with the actual symbol type if any header -// declared it. -// -//===----------------------------------------------------------------------===// - -#include - -// Must declare the symbols in the global namespace. -static void *DoSearch(const char* symbolName) { -#define EXPLICIT_SYMBOL(SYM) \ - extern void *SYM; if (!strcmp(symbolName, #SYM)) return &SYM - - // If this is darwin, it has some funky issues, try to solve them here. Some - // important symbols are marked 'private external' which doesn't allow - // SearchForAddressOfSymbol to find them. As such, we special case them here, - // there is only a small handful of them. - -#ifdef __APPLE__ - { - EXPLICIT_SYMBOL(__ashldi3); - EXPLICIT_SYMBOL(__ashrdi3); - EXPLICIT_SYMBOL(__cmpdi2); - EXPLICIT_SYMBOL(__divdi3); - EXPLICIT_SYMBOL(__fixdfdi); - EXPLICIT_SYMBOL(__fixsfdi); - EXPLICIT_SYMBOL(__fixunsdfdi); - EXPLICIT_SYMBOL(__fixunssfdi); - EXPLICIT_SYMBOL(__floatdidf); - EXPLICIT_SYMBOL(__floatdisf); - EXPLICIT_SYMBOL(__lshrdi3); - EXPLICIT_SYMBOL(__moddi3); - EXPLICIT_SYMBOL(__udivdi3); - EXPLICIT_SYMBOL(__umoddi3); - - // __eprintf is sometimes used for assert() handling on x86. -#ifdef __i386__ - EXPLICIT_SYMBOL(__eprintf); -#endif - } -#endif - -#ifdef __CYGWIN__ - { - EXPLICIT_SYMBOL(_alloca); - EXPLICIT_SYMBOL(__main); - } -#endif - -#undef EXPLICIT_SYMBOL - return 0; -} - -namespace llvm { -void *SearchForAddressOfSpecialSymbol(const char* symbolName) { - return DoSearch(symbolName); -} -} // namespace llvm Removed: llvm/trunk/lib/System/Signals.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Signals.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Signals.cpp (original) +++ llvm/trunk/lib/System/Signals.cpp (removed) @@ -1,34 +0,0 @@ -//===- Signals.cpp - Signal Handling support --------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file defines some helpful functions for dealing with the possibility of -// Unix signals occuring while your program is running. -// -//===----------------------------------------------------------------------===// - -#include "llvm/System/Signals.h" -#include "llvm/Config/config.h" - -namespace llvm { -using namespace sys; - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only TRULY operating system -//=== independent code. -//===----------------------------------------------------------------------===// - -} - -// Include the platform-specific parts of this class. -#ifdef LLVM_ON_UNIX -#include "Unix/Signals.inc" -#endif -#ifdef LLVM_ON_WIN32 -#include "Win32/Signals.inc" -#endif Removed: llvm/trunk/lib/System/ThreadLocal.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/ThreadLocal.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/ThreadLocal.cpp (original) +++ llvm/trunk/lib/System/ThreadLocal.cpp (removed) @@ -1,85 +0,0 @@ -//===- ThreadLocal.cpp - Thread Local Data ----------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the llvm::sys::ThreadLocal class. -// -//===----------------------------------------------------------------------===// - -#include "llvm/Config/config.h" -#include "llvm/System/ThreadLocal.h" - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only TRULY operating system -//=== independent code. -//===----------------------------------------------------------------------===// - -#if !defined(ENABLE_THREADS) || ENABLE_THREADS == 0 -// Define all methods as no-ops if threading is explicitly disabled -namespace llvm { -using namespace sys; -ThreadLocalImpl::ThreadLocalImpl() { } -ThreadLocalImpl::~ThreadLocalImpl() { } -void ThreadLocalImpl::setInstance(const void* d) { data = const_cast(d);} -const void* ThreadLocalImpl::getInstance() { return data; } -void ThreadLocalImpl::removeInstance() { data = 0; } -} -#else - -#if defined(HAVE_PTHREAD_H) && defined(HAVE_PTHREAD_GETSPECIFIC) - -#include -#include -#include - -namespace llvm { -using namespace sys; - -ThreadLocalImpl::ThreadLocalImpl() : data(0) { - pthread_key_t* key = new pthread_key_t; - int errorcode = pthread_key_create(key, NULL); - assert(errorcode == 0); - (void) errorcode; - data = (void*)key; -} - -ThreadLocalImpl::~ThreadLocalImpl() { - pthread_key_t* key = static_cast(data); - int errorcode = pthread_key_delete(*key); - assert(errorcode == 0); - (void) errorcode; - delete key; -} - -void ThreadLocalImpl::setInstance(const void* d) { - pthread_key_t* key = static_cast(data); - int errorcode = pthread_setspecific(*key, d); - assert(errorcode == 0); - (void) errorcode; -} - -const void* ThreadLocalImpl::getInstance() { - pthread_key_t* key = static_cast(data); - return pthread_getspecific(*key); -} - -void ThreadLocalImpl::removeInstance() { - setInstance(0); -} - -} - -#elif defined(LLVM_ON_UNIX) -#include "Unix/ThreadLocal.inc" -#elif defined( LLVM_ON_WIN32) -#include "Win32/ThreadLocal.inc" -#else -#warning Neither LLVM_ON_UNIX nor LLVM_ON_WIN32 was set in System/ThreadLocal.cpp -#endif -#endif - Removed: llvm/trunk/lib/System/Threading.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Threading.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Threading.cpp (original) +++ llvm/trunk/lib/System/Threading.cpp (removed) @@ -1,116 +0,0 @@ -//===-- llvm/System/Threading.cpp- Control multithreading mode --*- C++ -*-==// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements llvm_start_multithreaded() and friends. -// -//===----------------------------------------------------------------------===// - -#include "llvm/System/Threading.h" -#include "llvm/System/Atomic.h" -#include "llvm/System/Mutex.h" -#include "llvm/Config/config.h" -#include - -using namespace llvm; - -static bool multithreaded_mode = false; - -static sys::Mutex* global_lock = 0; - -bool llvm::llvm_start_multithreaded() { -#ifdef LLVM_MULTITHREADED - assert(!multithreaded_mode && "Already multithreaded!"); - multithreaded_mode = true; - global_lock = new sys::Mutex(true); - - // We fence here to ensure that all initialization is complete BEFORE we - // return from llvm_start_multithreaded(). - sys::MemoryFence(); - return true; -#else - return false; -#endif -} - -void llvm::llvm_stop_multithreaded() { -#ifdef LLVM_MULTITHREADED - assert(multithreaded_mode && "Not currently multithreaded!"); - - // We fence here to insure that all threaded operations are complete BEFORE we - // return from llvm_stop_multithreaded(). - sys::MemoryFence(); - - multithreaded_mode = false; - delete global_lock; -#endif -} - -bool llvm::llvm_is_multithreaded() { - return multithreaded_mode; -} - -void llvm::llvm_acquire_global_lock() { - if (multithreaded_mode) global_lock->acquire(); -} - -void llvm::llvm_release_global_lock() { - if (multithreaded_mode) global_lock->release(); -} - -#if defined(LLVM_MULTITHREADED) && defined(HAVE_PTHREAD_H) -#include - -struct ThreadInfo { - void (*UserFn)(void *); - void *UserData; -}; -static void *ExecuteOnThread_Dispatch(void *Arg) { - ThreadInfo *TI = reinterpret_cast(Arg); - TI->UserFn(TI->UserData); - return 0; -} - -void llvm::llvm_execute_on_thread(void (*Fn)(void*), void *UserData, - unsigned RequestedStackSize) { - ThreadInfo Info = { Fn, UserData }; - pthread_attr_t Attr; - pthread_t Thread; - - // Construct the attributes object. - if (::pthread_attr_init(&Attr) != 0) - return; - - // Set the requested stack size, if given. - if (RequestedStackSize != 0) { - if (::pthread_attr_setstacksize(&Attr, RequestedStackSize) != 0) - goto error; - } - - // Construct and execute the thread. - if (::pthread_create(&Thread, &Attr, ExecuteOnThread_Dispatch, &Info) != 0) - goto error; - - // Wait for the thread and clean up. - ::pthread_join(Thread, 0); - - error: - ::pthread_attr_destroy(&Attr); -} - -#else - -// No non-pthread implementation, currently. - -void llvm::llvm_execute_on_thread(void (*Fn)(void*), void *UserData, - unsigned RequestedStackSize) { - (void) RequestedStackSize; - Fn(UserData); -} - -#endif Removed: llvm/trunk/lib/System/TimeValue.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/TimeValue.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/TimeValue.cpp (original) +++ llvm/trunk/lib/System/TimeValue.cpp (removed) @@ -1,58 +0,0 @@ -//===-- TimeValue.cpp - Implement OS TimeValue Concept ----------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the operating system TimeValue concept. -// -//===----------------------------------------------------------------------===// - -#include "llvm/System/TimeValue.h" -#include "llvm/Config/config.h" - -namespace llvm { -using namespace sys; - -const TimeValue TimeValue::MinTime = TimeValue ( INT64_MIN,0 ); -const TimeValue TimeValue::MaxTime = TimeValue ( INT64_MAX,0 ); -const TimeValue TimeValue::ZeroTime = TimeValue ( 0,0 ); -const TimeValue TimeValue::PosixZeroTime = TimeValue ( -946684800,0 ); -const TimeValue TimeValue::Win32ZeroTime = TimeValue ( -12591158400ULL,0 ); - -void -TimeValue::normalize( void ) { - if ( nanos_ >= NANOSECONDS_PER_SECOND ) { - do { - seconds_++; - nanos_ -= NANOSECONDS_PER_SECOND; - } while ( nanos_ >= NANOSECONDS_PER_SECOND ); - } else if (nanos_ <= -NANOSECONDS_PER_SECOND ) { - do { - seconds_--; - nanos_ += NANOSECONDS_PER_SECOND; - } while (nanos_ <= -NANOSECONDS_PER_SECOND); - } - - if (seconds_ >= 1 && nanos_ < 0) { - seconds_--; - nanos_ += NANOSECONDS_PER_SECOND; - } else if (seconds_ < 0 && nanos_ > 0) { - seconds_++; - nanos_ -= NANOSECONDS_PER_SECOND; - } -} - -} - -/// Include the platform specific portion of TimeValue class -#ifdef LLVM_ON_UNIX -#include "Unix/TimeValue.inc" -#endif -#ifdef LLVM_ON_WIN32 -#include "Win32/TimeValue.inc" -#endif - Removed: llvm/trunk/lib/System/Unix/Alarm.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/Alarm.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Unix/Alarm.inc (original) +++ llvm/trunk/lib/System/Unix/Alarm.inc (removed) @@ -1,72 +0,0 @@ -//===-- Alarm.inc - Implement Unix Alarm Support ----------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the UNIX Alarm support. -// -//===----------------------------------------------------------------------===// - -#include -#include -#include -using namespace llvm; - -/// AlarmCancelled - This flag is set by the SIGINT signal handler if the -/// user presses CTRL-C. -static volatile bool AlarmCancelled = false; - -/// AlarmTriggered - This flag is set by the SIGALRM signal handler if the -/// alarm was triggered. -static volatile bool AlarmTriggered = false; - -/// NestedSOI - Sanity check. Alarms cannot be nested or run in parallel. -/// This ensures that they never do. -static bool NestedSOI = false; - -static RETSIGTYPE SigIntHandler(int Sig) { - AlarmCancelled = true; - signal(SIGINT, SigIntHandler); -} - -static RETSIGTYPE SigAlarmHandler(int Sig) { - AlarmTriggered = true; -} - -static void (*OldSigIntHandler) (int); - -void sys::SetupAlarm(unsigned seconds) { - assert(!NestedSOI && "sys::SetupAlarm calls cannot be nested!"); - NestedSOI = true; - AlarmCancelled = false; - AlarmTriggered = false; - ::signal(SIGALRM, SigAlarmHandler); - OldSigIntHandler = ::signal(SIGINT, SigIntHandler); - ::alarm(seconds); -} - -void sys::TerminateAlarm() { - assert(NestedSOI && "sys::TerminateAlarm called without sys::SetupAlarm!"); - ::alarm(0); - ::signal(SIGALRM, SIG_DFL); - ::signal(SIGINT, OldSigIntHandler); - AlarmCancelled = false; - AlarmTriggered = false; - NestedSOI = false; -} - -int sys::AlarmStatus() { - if (AlarmCancelled) - return -1; - if (AlarmTriggered) - return 1; - return 0; -} - -void sys::Sleep(unsigned n) { - ::sleep(n); -} Removed: llvm/trunk/lib/System/Unix/Host.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/Host.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Unix/Host.inc (original) +++ llvm/trunk/lib/System/Unix/Host.inc (removed) @@ -1,96 +0,0 @@ - //===- llvm/System/Unix/Host.inc -------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the UNIX Host support. -// -//===----------------------------------------------------------------------===// - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only generic UNIX code that -//=== is guaranteed to work on *all* UNIX variants. -//===----------------------------------------------------------------------===// - -#include "llvm/Config/config.h" -#include "llvm/ADT/StringRef.h" -#include "Unix.h" -#include -#include - -using namespace llvm; - -static std::string getOSVersion() { - struct utsname info; - - if (uname(&info)) - return ""; - - return info.release; -} - -std::string sys::getHostTriple() { - // FIXME: Derive directly instead of relying on the autoconf generated - // variable. - - StringRef HostTripleString(LLVM_HOSTTRIPLE); - std::pair ArchSplit = HostTripleString.split('-'); - - // Normalize the arch, since the host triple may not actually match the host. - std::string Arch = ArchSplit.first; - - // It would be nice to do this in terms of llvm::Triple, but that is in - // Support which is layered above us. -#if defined(__x86_64__) - Arch = "x86_64"; -#elif defined(__i386__) - Arch = "i386"; -#elif defined(__ppc64__) - Arch = "powerpc64"; -#elif defined(__ppc__) - Arch = "powerpc"; -#elif defined(__arm__) - - // FIXME: We need to pick the right ARM triple (which involves querying the - // chip). However, for now this is most important for LLVM arch selection, so - // we only need to make sure to distinguish ARM and Thumb. -# if defined(__thumb__) - Arch = "thumb"; -# else - Arch = "arm"; -# endif - -#else - - // FIXME: When enough auto-detection is in place, this should just - // #error. Then at least the arch selection is done, and we only need the OS - // etc selection to kill off the use of LLVM_HOSTTRIPLE. - -#endif - - std::string Triple(Arch); - Triple += '-'; - Triple += ArchSplit.second; - - // Force i86 to i386. - if (Triple[0] == 'i' && isdigit(Triple[1]) && - Triple[2] == '8' && Triple[3] == '6') - Triple[1] = '3'; - - // On darwin, we want to update the version to match that of the - // host. - std::string::size_type DarwinDashIdx = Triple.find("-darwin"); - if (DarwinDashIdx != std::string::npos) { - Triple.resize(DarwinDashIdx + strlen("-darwin")); - - // Only add the major part of the os version. - std::string Version = getOSVersion(); - Triple += Version.substr(0, Version.find('.')); - } - - return Triple; -} Removed: llvm/trunk/lib/System/Unix/Memory.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/Memory.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Unix/Memory.inc (original) +++ llvm/trunk/lib/System/Unix/Memory.inc (removed) @@ -1,151 +0,0 @@ -//===- Unix/Memory.cpp - Generic UNIX System Configuration ------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file defines some functions for various memory management utilities. -// -//===----------------------------------------------------------------------===// - -#include "Unix.h" -#include "llvm/System/DataTypes.h" -#include "llvm/System/Process.h" - -#ifdef HAVE_SYS_MMAN_H -#include -#endif - -#ifdef __APPLE__ -#include -#endif - -/// AllocateRWX - Allocate a slab of memory with read/write/execute -/// permissions. This is typically used for JIT applications where we want -/// to emit code to the memory then jump to it. Getting this type of memory -/// is very OS specific. -/// -llvm::sys::MemoryBlock -llvm::sys::Memory::AllocateRWX(size_t NumBytes, const MemoryBlock* NearBlock, - std::string *ErrMsg) { - if (NumBytes == 0) return MemoryBlock(); - - size_t pageSize = Process::GetPageSize(); - size_t NumPages = (NumBytes+pageSize-1)/pageSize; - - int fd = -1; -#ifdef NEED_DEV_ZERO_FOR_MMAP - static int zero_fd = open("/dev/zero", O_RDWR); - if (zero_fd == -1) { - MakeErrMsg(ErrMsg, "Can't open /dev/zero device"); - return MemoryBlock(); - } - fd = zero_fd; -#endif - - int flags = MAP_PRIVATE | -#ifdef HAVE_MMAP_ANONYMOUS - MAP_ANONYMOUS -#else - MAP_ANON -#endif - ; - - void* start = NearBlock ? (unsigned char*)NearBlock->base() + - NearBlock->size() : 0; - -#if defined(__APPLE__) && defined(__arm__) - void *pa = ::mmap(start, pageSize*NumPages, PROT_READ|PROT_EXEC, - flags, fd, 0); -#else - void *pa = ::mmap(start, pageSize*NumPages, PROT_READ|PROT_WRITE|PROT_EXEC, - flags, fd, 0); -#endif - if (pa == MAP_FAILED) { - if (NearBlock) //Try again without a near hint - return AllocateRWX(NumBytes, 0); - - MakeErrMsg(ErrMsg, "Can't allocate RWX Memory"); - return MemoryBlock(); - } - -#if defined(__APPLE__) && defined(__arm__) - kern_return_t kr = vm_protect(mach_task_self(), (vm_address_t)pa, - (vm_size_t)(pageSize*NumPages), 0, - VM_PROT_READ | VM_PROT_EXECUTE | VM_PROT_COPY); - if (KERN_SUCCESS != kr) { - MakeErrMsg(ErrMsg, "vm_protect max RX failed"); - return sys::MemoryBlock(); - } - - kr = vm_protect(mach_task_self(), (vm_address_t)pa, - (vm_size_t)(pageSize*NumPages), 0, - VM_PROT_READ | VM_PROT_WRITE); - if (KERN_SUCCESS != kr) { - MakeErrMsg(ErrMsg, "vm_protect RW failed"); - return sys::MemoryBlock(); - } -#endif - - MemoryBlock result; - result.Address = pa; - result.Size = NumPages*pageSize; - - return result; -} - -bool llvm::sys::Memory::ReleaseRWX(MemoryBlock &M, std::string *ErrMsg) { - if (M.Address == 0 || M.Size == 0) return false; - if (0 != ::munmap(M.Address, M.Size)) - return MakeErrMsg(ErrMsg, "Can't release RWX Memory"); - return false; -} - -bool llvm::sys::Memory::setWritable (MemoryBlock &M, std::string *ErrMsg) { -#if defined(__APPLE__) && defined(__arm__) - if (M.Address == 0 || M.Size == 0) return false; - sys::Memory::InvalidateInstructionCache(M.Address, M.Size); - kern_return_t kr = vm_protect(mach_task_self(), (vm_address_t)M.Address, - (vm_size_t)M.Size, 0, VM_PROT_READ | VM_PROT_WRITE); - return KERN_SUCCESS == kr; -#else - return true; -#endif -} - -bool llvm::sys::Memory::setExecutable (MemoryBlock &M, std::string *ErrMsg) { -#if defined(__APPLE__) && defined(__arm__) - if (M.Address == 0 || M.Size == 0) return false; - sys::Memory::InvalidateInstructionCache(M.Address, M.Size); - kern_return_t kr = vm_protect(mach_task_self(), (vm_address_t)M.Address, - (vm_size_t)M.Size, 0, VM_PROT_READ | VM_PROT_EXECUTE | VM_PROT_COPY); - return KERN_SUCCESS == kr; -#else - return false; -#endif -} - -bool llvm::sys::Memory::setRangeWritable(const void *Addr, size_t Size) { -#if defined(__APPLE__) && defined(__arm__) - kern_return_t kr = vm_protect(mach_task_self(), (vm_address_t)Addr, - (vm_size_t)Size, 0, - VM_PROT_READ | VM_PROT_WRITE); - return KERN_SUCCESS == kr; -#else - return true; -#endif -} - -bool llvm::sys::Memory::setRangeExecutable(const void *Addr, size_t Size) { -#if defined(__APPLE__) && defined(__arm__) - kern_return_t kr = vm_protect(mach_task_self(), (vm_address_t)Addr, - (vm_size_t)Size, 0, - VM_PROT_READ | VM_PROT_EXECUTE | VM_PROT_COPY); - return KERN_SUCCESS == kr; -#else - return true; -#endif -} Removed: llvm/trunk/lib/System/Unix/Mutex.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/Mutex.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Unix/Mutex.inc (original) +++ llvm/trunk/lib/System/Unix/Mutex.inc (removed) @@ -1,43 +0,0 @@ -//===- llvm/System/Unix/Mutex.inc - Unix Mutex Implementation ---*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the Unix specific (non-pthread) Mutex class. -// -//===----------------------------------------------------------------------===// - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only generic UNIX code that -//=== is guaranteed to work on *all* UNIX variants. -//===----------------------------------------------------------------------===// - -namespace llvm -{ -using namespace sys; - -MutexImpl::MutexImpl( bool recursive) -{ -} - -MutexImpl::~MutexImpl() -{ -} - -bool -MutexImpl::release() -{ - return true; -} - -bool -MutexImpl::tryacquire( void ) -{ - return true; -} - -} Removed: llvm/trunk/lib/System/Unix/Path.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/Path.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Unix/Path.inc (original) +++ llvm/trunk/lib/System/Unix/Path.inc (removed) @@ -1,896 +0,0 @@ -//===- llvm/System/Unix/Path.cpp - Unix Path Implementation -----*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the Unix specific portion of the Path class. -// -//===----------------------------------------------------------------------===// - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only generic UNIX code that -//=== is guaranteed to work on *all* UNIX variants. -//===----------------------------------------------------------------------===// - -#include "Unix.h" -#if HAVE_SYS_STAT_H -#include -#endif -#if HAVE_FCNTL_H -#include -#endif -#ifdef HAVE_SYS_MMAN_H -#include -#endif -#ifdef HAVE_SYS_STAT_H -#include -#endif -#if HAVE_UTIME_H -#include -#endif -#if HAVE_TIME_H -#include -#endif -#if HAVE_DIRENT_H -# include -# define NAMLEN(dirent) strlen((dirent)->d_name) -#else -# define dirent direct -# define NAMLEN(dirent) (dirent)->d_namlen -# if HAVE_SYS_NDIR_H -# include -# endif -# if HAVE_SYS_DIR_H -# include -# endif -# if HAVE_NDIR_H -# include -# endif -#endif - -#if HAVE_DLFCN_H -#include -#endif - -#ifdef __APPLE__ -#include -#endif - -// Put in a hack for Cygwin which falsely reports that the mkdtemp function -// is available when it is not. -#ifdef __CYGWIN__ -# undef HAVE_MKDTEMP -#endif - -namespace { -inline bool lastIsSlash(const std::string& path) { - return !path.empty() && path[path.length() - 1] == '/'; -} - -} - -namespace llvm { -using namespace sys; - -const char sys::PathSeparator = ':'; - -StringRef Path::GetEXESuffix() { - return StringRef(); -} - -Path::Path(StringRef p) - : path(p) {} - -Path::Path(const char *StrStart, unsigned StrLen) - : path(StrStart, StrLen) {} - -Path& -Path::operator=(StringRef that) { - path.assign(that.data(), that.size()); - return *this; -} - -bool -Path::isValid() const { - // Empty paths are considered invalid here. - // This code doesn't check MAXPATHLEN because there's no need. Nothing in - // LLVM manipulates Paths with fixed-sizes arrays, and if the OS can't - // handle names longer than some limit, it'll report this on demand using - // ENAMETOLONG. - return !path.empty(); -} - -bool -Path::isAbsolute(const char *NameStart, unsigned NameLen) { - assert(NameStart); - if (NameLen == 0) - return false; - return NameStart[0] == '/'; -} - -bool -Path::isAbsolute() const { - if (path.empty()) - return false; - return path[0] == '/'; -} - -void Path::makeAbsolute() { - if (isAbsolute()) - return; - - Path CWD = Path::GetCurrentDirectory(); - assert(CWD.isAbsolute() && "GetCurrentDirectory returned relative path!"); - - CWD.appendComponent(path); - - path = CWD.str(); -} - -Path -Path::GetRootDirectory() { - Path result; - result.set("/"); - return result; -} - -Path -Path::GetTemporaryDirectory(std::string *ErrMsg) { -#if defined(HAVE_MKDTEMP) - // The best way is with mkdtemp but that's not available on many systems, - // Linux and FreeBSD have it. Others probably won't. - char pathname[] = "/tmp/llvm_XXXXXX"; - if (0 == mkdtemp(pathname)) { - MakeErrMsg(ErrMsg, - std::string(pathname) + ": can't create temporary directory"); - return Path(); - } - return Path(pathname); -#elif defined(HAVE_MKSTEMP) - // If no mkdtemp is available, mkstemp can be used to create a temporary file - // which is then removed and created as a directory. We prefer this over - // mktemp because of mktemp's inherent security and threading risks. We still - // have a slight race condition from the time the temporary file is created to - // the time it is re-created as a directoy. - char pathname[] = "/tmp/llvm_XXXXXX"; - int fd = 0; - if (-1 == (fd = mkstemp(pathname))) { - MakeErrMsg(ErrMsg, - std::string(pathname) + ": can't create temporary directory"); - return Path(); - } - ::close(fd); - ::unlink(pathname); // start race condition, ignore errors - if (-1 == ::mkdir(pathname, S_IRWXU)) { // end race condition - MakeErrMsg(ErrMsg, - std::string(pathname) + ": can't create temporary directory"); - return Path(); - } - return Path(pathname); -#elif defined(HAVE_MKTEMP) - // If a system doesn't have mkdtemp(3) or mkstemp(3) but it does have - // mktemp(3) then we'll assume that system (e.g. AIX) has a reasonable - // implementation of mktemp(3) and doesn't follow BSD 4.3's lead of replacing - // the XXXXXX with the pid of the process and a letter. That leads to only - // twenty six temporary files that can be generated. - char pathname[] = "/tmp/llvm_XXXXXX"; - char *TmpName = ::mktemp(pathname); - if (TmpName == 0) { - MakeErrMsg(ErrMsg, - std::string(TmpName) + ": can't create unique directory name"); - return Path(); - } - if (-1 == ::mkdir(TmpName, S_IRWXU)) { - MakeErrMsg(ErrMsg, - std::string(TmpName) + ": can't create temporary directory"); - return Path(); - } - return Path(TmpName); -#else - // This is the worst case implementation. tempnam(3) leaks memory unless its - // on an SVID2 (or later) system. On BSD 4.3 it leaks. tmpnam(3) has thread - // issues. The mktemp(3) function doesn't have enough variability in the - // temporary name generated. So, we provide our own implementation that - // increments an integer from a random number seeded by the current time. This - // should be sufficiently unique that we don't have many collisions between - // processes. Generally LLVM processes don't run very long and don't use very - // many temporary files so this shouldn't be a big issue for LLVM. - static time_t num = ::time(0); - char pathname[MAXPATHLEN]; - do { - num++; - sprintf(pathname, "/tmp/llvm_%010u", unsigned(num)); - } while ( 0 == access(pathname, F_OK ) ); - if (-1 == ::mkdir(pathname, S_IRWXU)) { - MakeErrMsg(ErrMsg, - std::string(pathname) + ": can't create temporary directory"); - return Path(); - } - return Path(pathname); -#endif -} - -void -Path::GetSystemLibraryPaths(std::vector& Paths) { -#ifdef LTDL_SHLIBPATH_VAR - char* env_var = getenv(LTDL_SHLIBPATH_VAR); - if (env_var != 0) { - getPathList(env_var,Paths); - } -#endif - // FIXME: Should this look at LD_LIBRARY_PATH too? - Paths.push_back(sys::Path("/usr/local/lib/")); - Paths.push_back(sys::Path("/usr/X11R6/lib/")); - Paths.push_back(sys::Path("/usr/lib/")); - Paths.push_back(sys::Path("/lib/")); -} - -void -Path::GetBitcodeLibraryPaths(std::vector& Paths) { - char * env_var = getenv("LLVM_LIB_SEARCH_PATH"); - if (env_var != 0) { - getPathList(env_var,Paths); - } -#ifdef LLVM_LIBDIR - { - Path tmpPath; - if (tmpPath.set(LLVM_LIBDIR)) - if (tmpPath.canRead()) - Paths.push_back(tmpPath); - } -#endif - GetSystemLibraryPaths(Paths); -} - -Path -Path::GetLLVMDefaultConfigDir() { - return Path("/etc/llvm/"); -} - -Path -Path::GetUserHomeDirectory() { - const char* home = getenv("HOME"); - if (home) { - Path result; - if (result.set(home)) - return result; - } - return GetRootDirectory(); -} - -Path -Path::GetCurrentDirectory() { - char pathname[MAXPATHLEN]; - if (!getcwd(pathname,MAXPATHLEN)) { - assert (false && "Could not query current working directory."); - return Path(); - } - - return Path(pathname); -} - -#if defined(__FreeBSD__) || defined (__NetBSD__) || defined(__minix) -static int -test_dir(char buf[PATH_MAX], char ret[PATH_MAX], - const char *dir, const char *bin) -{ - struct stat sb; - - snprintf(buf, PATH_MAX, "%s/%s", dir, bin); - if (realpath(buf, ret) == NULL) - return (1); - if (stat(buf, &sb) != 0) - return (1); - - return (0); -} - -static char * -getprogpath(char ret[PATH_MAX], const char *bin) -{ - char *pv, *s, *t, buf[PATH_MAX]; - - /* First approach: absolute path. */ - if (bin[0] == '/') { - if (test_dir(buf, ret, "/", bin) == 0) - return (ret); - return (NULL); - } - - /* Second approach: relative path. */ - if (strchr(bin, '/') != NULL) { - if (getcwd(buf, PATH_MAX) == NULL) - return (NULL); - if (test_dir(buf, ret, buf, bin) == 0) - return (ret); - return (NULL); - } - - /* Third approach: $PATH */ - if ((pv = getenv("PATH")) == NULL) - return (NULL); - s = pv = strdup(pv); - if (pv == NULL) - return (NULL); - while ((t = strsep(&s, ":")) != NULL) { - if (test_dir(buf, ret, t, bin) == 0) { - free(pv); - return (ret); - } - } - free(pv); - return (NULL); -} -#endif // __FreeBSD__ || __NetBSD__ - -/// GetMainExecutable - Return the path to the main executable, given the -/// value of argv[0] from program startup. -Path Path::GetMainExecutable(const char *argv0, void *MainAddr) { -#if defined(__APPLE__) - // On OS X the executable path is saved to the stack by dyld. Reading it - // from there is much faster than calling dladdr, especially for large - // binaries with symbols. - char exe_path[MAXPATHLEN]; - uint32_t size = sizeof(exe_path); - if (_NSGetExecutablePath(exe_path, &size) == 0) { - char link_path[MAXPATHLEN]; - if (realpath(exe_path, link_path)) - return Path(link_path); - } -#elif defined(__FreeBSD__) || defined (__NetBSD__) || defined(__minix) - char exe_path[PATH_MAX]; - - if (getprogpath(exe_path, argv0) != NULL) - return Path(exe_path); -#elif defined(__linux__) || defined(__CYGWIN__) - char exe_path[MAXPATHLEN]; - ssize_t len = readlink("/proc/self/exe", exe_path, sizeof(exe_path)); - if (len >= 0) - return Path(StringRef(exe_path, len)); -#elif defined(HAVE_DLFCN_H) - // Use dladdr to get executable path if available. - Dl_info DLInfo; - int err = dladdr(MainAddr, &DLInfo); - if (err == 0) - return Path(); - - // If the filename is a symlink, we need to resolve and return the location of - // the actual executable. - char link_path[MAXPATHLEN]; - if (realpath(DLInfo.dli_fname, link_path)) - return Path(link_path); -#else -#error GetMainExecutable is not implemented on this host yet. -#endif - return Path(); -} - - -StringRef Path::getDirname() const { - return getDirnameCharSep(path, "/"); -} - -StringRef -Path::getBasename() const { - // Find the last slash - std::string::size_type slash = path.rfind('/'); - if (slash == std::string::npos) - slash = 0; - else - slash++; - - std::string::size_type dot = path.rfind('.'); - if (dot == std::string::npos || dot < slash) - return StringRef(path).substr(slash); - else - return StringRef(path).substr(slash, dot - slash); -} - -StringRef -Path::getSuffix() const { - // Find the last slash - std::string::size_type slash = path.rfind('/'); - if (slash == std::string::npos) - slash = 0; - else - slash++; - - std::string::size_type dot = path.rfind('.'); - if (dot == std::string::npos || dot < slash) - return StringRef(); - else - return StringRef(path).substr(dot + 1); -} - -bool Path::getMagicNumber(std::string &Magic, unsigned len) const { - assert(len < 1024 && "Request for magic string too long"); - char Buf[1025]; - int fd = ::open(path.c_str(), O_RDONLY); - if (fd < 0) - return false; - ssize_t bytes_read = ::read(fd, Buf, len); - ::close(fd); - if (ssize_t(len) != bytes_read) - return false; - Magic.assign(Buf, len); - return true; -} - -bool -Path::exists() const { - return 0 == access(path.c_str(), F_OK ); -} - -bool -Path::isDirectory() const { - struct stat buf; - if (0 != stat(path.c_str(), &buf)) - return false; - return ((buf.st_mode & S_IFMT) == S_IFDIR) ? true : false; -} - -bool -Path::isSymLink() const { - struct stat buf; - if (0 != lstat(path.c_str(), &buf)) - return false; - return S_ISLNK(buf.st_mode); -} - - -bool -Path::canRead() const { - return 0 == access(path.c_str(), R_OK); -} - -bool -Path::canWrite() const { - return 0 == access(path.c_str(), W_OK); -} - -bool -Path::isRegularFile() const { - // Get the status so we can determine if it's a file or directory - struct stat buf; - - if (0 != stat(path.c_str(), &buf)) - return false; - - if (S_ISREG(buf.st_mode)) - return true; - - return false; -} - -bool -Path::canExecute() const { - if (0 != access(path.c_str(), R_OK | X_OK )) - return false; - struct stat buf; - if (0 != stat(path.c_str(), &buf)) - return false; - if (!S_ISREG(buf.st_mode)) - return false; - return true; -} - -StringRef -Path::getLast() const { - // Find the last slash - size_t pos = path.rfind('/'); - - // Handle the corner cases - if (pos == std::string::npos) - return path; - - // If the last character is a slash - if (pos == path.length()-1) { - // Find the second to last slash - size_t pos2 = path.rfind('/', pos-1); - if (pos2 == std::string::npos) - return StringRef(path).substr(0,pos); - else - return StringRef(path).substr(pos2+1,pos-pos2-1); - } - // Return everything after the last slash - return StringRef(path).substr(pos+1); -} - -const FileStatus * -PathWithStatus::getFileStatus(bool update, std::string *ErrStr) const { - if (!fsIsValid || update) { - struct stat buf; - if (0 != stat(path.c_str(), &buf)) { - MakeErrMsg(ErrStr, path + ": can't get status of file"); - return 0; - } - status.fileSize = buf.st_size; - status.modTime.fromEpochTime(buf.st_mtime); - status.mode = buf.st_mode; - status.user = buf.st_uid; - status.group = buf.st_gid; - status.uniqueID = uint64_t(buf.st_ino); - status.isDir = S_ISDIR(buf.st_mode); - status.isFile = S_ISREG(buf.st_mode); - fsIsValid = true; - } - return &status; -} - -static bool AddPermissionBits(const Path &File, int bits) { - // Get the umask value from the operating system. We want to use it - // when changing the file's permissions. Since calling umask() sets - // the umask and returns its old value, we must call it a second - // time to reset it to the user's preference. - int mask = umask(0777); // The arg. to umask is arbitrary. - umask(mask); // Restore the umask. - - // Get the file's current mode. - struct stat buf; - if (0 != stat(File.c_str(), &buf)) - return false; - // Change the file to have whichever permissions bits from 'bits' - // that the umask would not disable. - if ((chmod(File.c_str(), (buf.st_mode | (bits & ~mask)))) == -1) - return false; - return true; -} - -bool Path::makeReadableOnDisk(std::string* ErrMsg) { - if (!AddPermissionBits(*this, 0444)) - return MakeErrMsg(ErrMsg, path + ": can't make file readable"); - return false; -} - -bool Path::makeWriteableOnDisk(std::string* ErrMsg) { - if (!AddPermissionBits(*this, 0222)) - return MakeErrMsg(ErrMsg, path + ": can't make file writable"); - return false; -} - -bool Path::makeExecutableOnDisk(std::string* ErrMsg) { - if (!AddPermissionBits(*this, 0111)) - return MakeErrMsg(ErrMsg, path + ": can't make file executable"); - return false; -} - -bool -Path::getDirectoryContents(std::set& result, std::string* ErrMsg) const { - DIR* direntries = ::opendir(path.c_str()); - if (direntries == 0) - return MakeErrMsg(ErrMsg, path + ": can't open directory"); - - std::string dirPath = path; - if (!lastIsSlash(dirPath)) - dirPath += '/'; - - result.clear(); - struct dirent* de = ::readdir(direntries); - for ( ; de != 0; de = ::readdir(direntries)) { - if (de->d_name[0] != '.') { - Path aPath(dirPath + (const char*)de->d_name); - struct stat st; - if (0 != lstat(aPath.path.c_str(), &st)) { - if (S_ISLNK(st.st_mode)) - continue; // dangling symlink -- ignore - return MakeErrMsg(ErrMsg, - aPath.path + ": can't determine file object type"); - } - result.insert(aPath); - } - } - - closedir(direntries); - return false; -} - -bool -Path::set(StringRef a_path) { - if (a_path.empty()) - return false; - path = a_path; - return true; -} - -bool -Path::appendComponent(StringRef name) { - if (name.empty()) - return false; - if (!lastIsSlash(path)) - path += '/'; - path += name; - return true; -} - -bool -Path::eraseComponent() { - size_t slashpos = path.rfind('/',path.size()); - if (slashpos == 0 || slashpos == std::string::npos) { - path.erase(); - return true; - } - if (slashpos == path.size() - 1) - slashpos = path.rfind('/',slashpos-1); - if (slashpos == std::string::npos) { - path.erase(); - return true; - } - path.erase(slashpos); - return true; -} - -bool -Path::eraseSuffix() { - size_t dotpos = path.rfind('.',path.size()); - size_t slashpos = path.rfind('/',path.size()); - if (dotpos != std::string::npos) { - if (slashpos == std::string::npos || dotpos > slashpos+1) { - path.erase(dotpos, path.size()-dotpos); - return true; - } - } - return false; -} - -static bool createDirectoryHelper(char* beg, char* end, bool create_parents) { - - if (access(beg, R_OK | W_OK) == 0) - return false; - - if (create_parents) { - - char* c = end; - - for (; c != beg; --c) - if (*c == '/') { - - // Recurse to handling the parent directory. - *c = '\0'; - bool x = createDirectoryHelper(beg, c, create_parents); - *c = '/'; - - // Return if we encountered an error. - if (x) - return true; - - break; - } - } - - return mkdir(beg, S_IRWXU | S_IRWXG) != 0; -} - -bool -Path::createDirectoryOnDisk( bool create_parents, std::string* ErrMsg ) { - // Get a writeable copy of the path name - std::string pathname(path); - - // Null-terminate the last component - size_t lastchar = path.length() - 1 ; - - if (pathname[lastchar] != '/') - ++lastchar; - - pathname[lastchar] = '\0'; - - if (createDirectoryHelper(&pathname[0], &pathname[lastchar], create_parents)) - return MakeErrMsg(ErrMsg, pathname + ": can't create directory"); - - return false; -} - -bool -Path::createFileOnDisk(std::string* ErrMsg) { - // Create the file - int fd = ::creat(path.c_str(), S_IRUSR | S_IWUSR); - if (fd < 0) - return MakeErrMsg(ErrMsg, path + ": can't create file"); - ::close(fd); - return false; -} - -bool -Path::createTemporaryFileOnDisk(bool reuse_current, std::string* ErrMsg) { - // Make this into a unique file name - if (makeUnique( reuse_current, ErrMsg )) - return true; - - // create the file - int fd = ::open(path.c_str(), O_WRONLY|O_CREAT|O_TRUNC, 0666); - if (fd < 0) - return MakeErrMsg(ErrMsg, path + ": can't create temporary file"); - ::close(fd); - return false; -} - -bool -Path::eraseFromDisk(bool remove_contents, std::string *ErrStr) const { - // Get the status so we can determine if it's a file or directory. - struct stat buf; - if (0 != stat(path.c_str(), &buf)) { - MakeErrMsg(ErrStr, path + ": can't get status of file"); - return true; - } - - // Note: this check catches strange situations. In all cases, LLVM should - // only be involved in the creation and deletion of regular files. This - // check ensures that what we're trying to erase is a regular file. It - // effectively prevents LLVM from erasing things like /dev/null, any block - // special file, or other things that aren't "regular" files. - if (S_ISREG(buf.st_mode)) { - if (unlink(path.c_str()) != 0) - return MakeErrMsg(ErrStr, path + ": can't destroy file"); - return false; - } - - if (!S_ISDIR(buf.st_mode)) { - if (ErrStr) *ErrStr = "not a file or directory"; - return true; - } - - if (remove_contents) { - // Recursively descend the directory to remove its contents. - std::string cmd = "/bin/rm -rf " + path; - if (system(cmd.c_str()) != 0) { - MakeErrMsg(ErrStr, path + ": failed to recursively remove directory."); - return true; - } - return false; - } - - // Otherwise, try to just remove the one directory. - std::string pathname(path); - size_t lastchar = path.length() - 1; - if (pathname[lastchar] == '/') - pathname[lastchar] = '\0'; - else - pathname[lastchar+1] = '\0'; - - if (rmdir(pathname.c_str()) != 0) - return MakeErrMsg(ErrStr, pathname + ": can't erase directory"); - return false; -} - -bool -Path::renamePathOnDisk(const Path& newName, std::string* ErrMsg) { - if (0 != ::rename(path.c_str(), newName.c_str())) - return MakeErrMsg(ErrMsg, std::string("can't rename '") + path + "' as '" + - newName.str() + "'"); - return false; -} - -bool -Path::setStatusInfoOnDisk(const FileStatus &si, std::string *ErrStr) const { - struct utimbuf utb; - utb.actime = si.modTime.toPosixTime(); - utb.modtime = utb.actime; - if (0 != ::utime(path.c_str(),&utb)) - return MakeErrMsg(ErrStr, path + ": can't set file modification time"); - if (0 != ::chmod(path.c_str(),si.mode)) - return MakeErrMsg(ErrStr, path + ": can't set mode"); - return false; -} - -bool -sys::CopyFile(const sys::Path &Dest, const sys::Path &Src, std::string* ErrMsg){ - int inFile = -1; - int outFile = -1; - inFile = ::open(Src.c_str(), O_RDONLY); - if (inFile == -1) - return MakeErrMsg(ErrMsg, Src.str() + - ": can't open source file to copy"); - - outFile = ::open(Dest.c_str(), O_WRONLY|O_CREAT, 0666); - if (outFile == -1) { - ::close(inFile); - return MakeErrMsg(ErrMsg, Dest.str() + - ": can't create destination file for copy"); - } - - char Buffer[16*1024]; - while (ssize_t Amt = ::read(inFile, Buffer, 16*1024)) { - if (Amt == -1) { - if (errno != EINTR && errno != EAGAIN) { - ::close(inFile); - ::close(outFile); - return MakeErrMsg(ErrMsg, Src.str()+": can't read source file"); - } - } else { - char *BufPtr = Buffer; - while (Amt) { - ssize_t AmtWritten = ::write(outFile, BufPtr, Amt); - if (AmtWritten == -1) { - if (errno != EINTR && errno != EAGAIN) { - ::close(inFile); - ::close(outFile); - return MakeErrMsg(ErrMsg, Dest.str() + - ": can't write destination file"); - } - } else { - Amt -= AmtWritten; - BufPtr += AmtWritten; - } - } - } - } - ::close(inFile); - ::close(outFile); - return false; -} - -bool -Path::makeUnique(bool reuse_current, std::string* ErrMsg) { - if (reuse_current && !exists()) - return false; // File doesn't exist already, just use it! - - // Append an XXXXXX pattern to the end of the file for use with mkstemp, - // mktemp or our own implementation. - // This uses std::vector instead of SmallVector to avoid a dependence on - // libSupport. And performance isn't critical here. - std::vector Buf; - Buf.resize(path.size()+8); - char *FNBuffer = &Buf[0]; - path.copy(FNBuffer,path.size()); - if (isDirectory()) - strcpy(FNBuffer+path.size(), "/XXXXXX"); - else - strcpy(FNBuffer+path.size(), "-XXXXXX"); - -#if defined(HAVE_MKSTEMP) - int TempFD; - if ((TempFD = mkstemp(FNBuffer)) == -1) - return MakeErrMsg(ErrMsg, path + ": can't make unique filename"); - - // We don't need to hold the temp file descriptor... we will trust that no one - // will overwrite/delete the file before we can open it again. - close(TempFD); - - // Save the name - path = FNBuffer; -#elif defined(HAVE_MKTEMP) - // If we don't have mkstemp, use the old and obsolete mktemp function. - if (mktemp(FNBuffer) == 0) - return MakeErrMsg(ErrMsg, path + ": can't make unique filename"); - - // Save the name - path = FNBuffer; -#else - // Okay, looks like we have to do it all by our lonesome. - static unsigned FCounter = 0; - // Try to initialize with unique value. - if (FCounter == 0) FCounter = ((unsigned)getpid() & 0xFFFF) << 8; - char* pos = strstr(FNBuffer, "XXXXXX"); - do { - if (++FCounter > 0xFFFFFF) { - return MakeErrMsg(ErrMsg, - path + ": can't make unique filename: too many files"); - } - sprintf(pos, "%06X", FCounter); - path = FNBuffer; - } while (exists()); - // POSSIBLE SECURITY BUG: An attacker can easily guess the name and exploit - // LLVM. -#endif - return false; -} - -const char *Path::MapInFilePages(int FD, uint64_t FileSize) { - int Flags = MAP_PRIVATE; -#ifdef MAP_FILE - Flags |= MAP_FILE; -#endif - void *BasePtr = ::mmap(0, FileSize, PROT_READ, Flags, FD, 0); - if (BasePtr == MAP_FAILED) - return 0; - return (const char*)BasePtr; -} - -void Path::UnMapFilePages(const char *BasePtr, uint64_t FileSize) { - ::munmap((void*)BasePtr, FileSize); -} - -} // end llvm namespace Removed: llvm/trunk/lib/System/Unix/Process.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/Process.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Unix/Process.inc (original) +++ llvm/trunk/lib/System/Unix/Process.inc (removed) @@ -1,295 +0,0 @@ -//===- Unix/Process.cpp - Unix Process Implementation --------- -*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file provides the generic Unix implementation of the Process class. -// -//===----------------------------------------------------------------------===// - -#include "Unix.h" -#ifdef HAVE_SYS_TIME_H -#include -#endif -#ifdef HAVE_SYS_RESOURCE_H -#include -#endif -// DragonFly BSD has deprecated for instead, -// Unix.h includes this for us already. -#if defined(HAVE_MALLOC_H) && !defined(__DragonFly__) -#include -#endif -#ifdef HAVE_MALLOC_MALLOC_H -#include -#endif -#ifdef HAVE_SYS_IOCTL_H -# include -#endif -#ifdef HAVE_TERMIOS_H -# include -#endif - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only generic UNIX code that -//=== is guaranteed to work on *all* UNIX variants. -//===----------------------------------------------------------------------===// - -using namespace llvm; -using namespace sys; - -unsigned -Process::GetPageSize() -{ -#if defined(__CYGWIN__) - // On Cygwin, getpagesize() returns 64k but the page size for the purposes of - // memory protection and mmap() is 4k. - // See http://www.cygwin.com/ml/cygwin/2009-01/threads.html#00492 - const int page_size = 0x1000; -#elif defined(HAVE_GETPAGESIZE) - const int page_size = ::getpagesize(); -#elif defined(HAVE_SYSCONF) - long page_size = ::sysconf(_SC_PAGE_SIZE); -#else -#warning Cannot get the page size on this machine -#endif - return static_cast(page_size); -} - -size_t Process::GetMallocUsage() { -#if defined(HAVE_MALLINFO) - struct mallinfo mi; - mi = ::mallinfo(); - return mi.uordblks; -#elif defined(HAVE_MALLOC_ZONE_STATISTICS) && defined(HAVE_MALLOC_MALLOC_H) - malloc_statistics_t Stats; - malloc_zone_statistics(malloc_default_zone(), &Stats); - return Stats.size_in_use; // darwin -#elif defined(HAVE_SBRK) - // Note this is only an approximation and more closely resembles - // the value returned by mallinfo in the arena field. - static char *StartOfMemory = reinterpret_cast(::sbrk(0)); - char *EndOfMemory = (char*)sbrk(0); - if (EndOfMemory != ((char*)-1) && StartOfMemory != ((char*)-1)) - return EndOfMemory - StartOfMemory; - else - return 0; -#else -#warning Cannot get malloc info on this platform - return 0; -#endif -} - -size_t -Process::GetTotalMemoryUsage() -{ -#if defined(HAVE_MALLINFO) - struct mallinfo mi = ::mallinfo(); - return mi.uordblks + mi.hblkhd; -#elif defined(HAVE_MALLOC_ZONE_STATISTICS) && defined(HAVE_MALLOC_MALLOC_H) - malloc_statistics_t Stats; - malloc_zone_statistics(malloc_default_zone(), &Stats); - return Stats.size_allocated; // darwin -#elif defined(HAVE_GETRUSAGE) && !defined(__HAIKU__) - struct rusage usage; - ::getrusage(RUSAGE_SELF, &usage); - return usage.ru_maxrss; -#else -#warning Cannot get total memory size on this platform - return 0; -#endif -} - -void -Process::GetTimeUsage(TimeValue& elapsed, TimeValue& user_time, - TimeValue& sys_time) -{ - elapsed = TimeValue::now(); -#if defined(HAVE_GETRUSAGE) - struct rusage usage; - ::getrusage(RUSAGE_SELF, &usage); - user_time = TimeValue( - static_cast( usage.ru_utime.tv_sec ), - static_cast( usage.ru_utime.tv_usec * - TimeValue::NANOSECONDS_PER_MICROSECOND ) ); - sys_time = TimeValue( - static_cast( usage.ru_stime.tv_sec ), - static_cast( usage.ru_stime.tv_usec * - TimeValue::NANOSECONDS_PER_MICROSECOND ) ); -#else -#warning Cannot get usage times on this platform - user_time.seconds(0); - user_time.microseconds(0); - sys_time.seconds(0); - sys_time.microseconds(0); -#endif -} - -int Process::GetCurrentUserId() { - return getuid(); -} - -int Process::GetCurrentGroupId() { - return getgid(); -} - -#ifdef HAVE_MACH_MACH_H -#include -#endif - -// Some LLVM programs such as bugpoint produce core files as a normal part of -// their operation. To prevent the disk from filling up, this function -// does what's necessary to prevent their generation. -void Process::PreventCoreFiles() { -#if HAVE_SETRLIMIT - struct rlimit rlim; - rlim.rlim_cur = rlim.rlim_max = 0; - setrlimit(RLIMIT_CORE, &rlim); -#endif - -#ifdef HAVE_MACH_MACH_H - // Disable crash reporting on Mac OS X 10.0-10.4 - - // get information about the original set of exception ports for the task - mach_msg_type_number_t Count = 0; - exception_mask_t OriginalMasks[EXC_TYPES_COUNT]; - exception_port_t OriginalPorts[EXC_TYPES_COUNT]; - exception_behavior_t OriginalBehaviors[EXC_TYPES_COUNT]; - thread_state_flavor_t OriginalFlavors[EXC_TYPES_COUNT]; - kern_return_t err = - task_get_exception_ports(mach_task_self(), EXC_MASK_ALL, OriginalMasks, - &Count, OriginalPorts, OriginalBehaviors, - OriginalFlavors); - if (err == KERN_SUCCESS) { - // replace each with MACH_PORT_NULL. - for (unsigned i = 0; i != Count; ++i) - task_set_exception_ports(mach_task_self(), OriginalMasks[i], - MACH_PORT_NULL, OriginalBehaviors[i], - OriginalFlavors[i]); - } - - // Disable crash reporting on Mac OS X 10.5 - signal(SIGABRT, _exit); - signal(SIGILL, _exit); - signal(SIGFPE, _exit); - signal(SIGSEGV, _exit); - signal(SIGBUS, _exit); -#endif -} - -bool Process::StandardInIsUserInput() { - return FileDescriptorIsDisplayed(STDIN_FILENO); -} - -bool Process::StandardOutIsDisplayed() { - return FileDescriptorIsDisplayed(STDOUT_FILENO); -} - -bool Process::StandardErrIsDisplayed() { - return FileDescriptorIsDisplayed(STDERR_FILENO); -} - -bool Process::FileDescriptorIsDisplayed(int fd) { -#if HAVE_ISATTY - return isatty(fd); -#else - // If we don't have isatty, just return false. - return false; -#endif -} - -static unsigned getColumns(int FileID) { - // If COLUMNS is defined in the environment, wrap to that many columns. - if (const char *ColumnsStr = std::getenv("COLUMNS")) { - int Columns = std::atoi(ColumnsStr); - if (Columns > 0) - return Columns; - } - - unsigned Columns = 0; - -#if defined(HAVE_SYS_IOCTL_H) && defined(HAVE_TERMIOS_H) - // Try to determine the width of the terminal. - struct winsize ws; - if (ioctl(FileID, TIOCGWINSZ, &ws) == 0) - Columns = ws.ws_col; -#endif - - return Columns; -} - -unsigned Process::StandardOutColumns() { - if (!StandardOutIsDisplayed()) - return 0; - - return getColumns(1); -} - -unsigned Process::StandardErrColumns() { - if (!StandardErrIsDisplayed()) - return 0; - - return getColumns(2); -} - -static bool terminalHasColors() { - if (const char *term = std::getenv("TERM")) { - // Most modern terminals support ANSI escape sequences for colors. - // We could check terminfo, or have a list of known terms that support - // colors, but that would be overkill. - // The user can always ask for no colors by setting TERM to dumb, or - // using a commandline flag. - return strcmp(term, "dumb") != 0; - } - return false; -} - -bool Process::StandardOutHasColors() { - if (!StandardOutIsDisplayed()) - return false; - return terminalHasColors(); -} - -bool Process::StandardErrHasColors() { - if (!StandardErrIsDisplayed()) - return false; - return terminalHasColors(); -} - -bool Process::ColorNeedsFlush() { - // No, we use ANSI escape sequences. - return false; -} - -#define COLOR(FGBG, CODE, BOLD) "\033[0;" BOLD FGBG CODE "m" - -#define ALLCOLORS(FGBG,BOLD) {\ - COLOR(FGBG, "0", BOLD),\ - COLOR(FGBG, "1", BOLD),\ - COLOR(FGBG, "2", BOLD),\ - COLOR(FGBG, "3", BOLD),\ - COLOR(FGBG, "4", BOLD),\ - COLOR(FGBG, "5", BOLD),\ - COLOR(FGBG, "6", BOLD),\ - COLOR(FGBG, "7", BOLD)\ - } - -static const char colorcodes[2][2][8][10] = { - { ALLCOLORS("3",""), ALLCOLORS("3","1;") }, - { ALLCOLORS("4",""), ALLCOLORS("4","1;") } -}; - -const char *Process::OutputColor(char code, bool bold, bool bg) { - return colorcodes[bg?1:0][bold?1:0][code&7]; -} - -const char *Process::OutputBold(bool bg) { - return "\033[1m"; -} - -const char *Process::ResetColor() { - return "\033[0m"; -} Removed: llvm/trunk/lib/System/Unix/Program.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/Program.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Unix/Program.inc (original) +++ llvm/trunk/lib/System/Unix/Program.inc (removed) @@ -1,422 +0,0 @@ -//===- llvm/System/Unix/Program.cpp -----------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the Unix specific portion of the Program class. -// -//===----------------------------------------------------------------------===// - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only generic UNIX code that -//=== is guaranteed to work on *all* UNIX variants. -//===----------------------------------------------------------------------===// - -#include -#include "Unix.h" -#if HAVE_SYS_STAT_H -#include -#endif -#if HAVE_SYS_RESOURCE_H -#include -#endif -#if HAVE_SIGNAL_H -#include -#endif -#if HAVE_FCNTL_H -#include -#endif -#ifdef HAVE_POSIX_SPAWN -#include -#if !defined(__APPLE__) - extern char **environ; -#else -#include // _NSGetEnviron -#endif -#endif - -namespace llvm { -using namespace sys; - -Program::Program() : Data_(0) {} - -Program::~Program() {} - -unsigned Program::GetPid() const { - uint64_t pid = reinterpret_cast(Data_); - return static_cast(pid); -} - -// This function just uses the PATH environment variable to find the program. -Path -Program::FindProgramByName(const std::string& progName) { - - // Check some degenerate cases - if (progName.length() == 0) // no program - return Path(); - Path temp; - if (!temp.set(progName)) // invalid name - return Path(); - // Use the given path verbatim if it contains any slashes; this matches - // the behavior of sh(1) and friends. - if (progName.find('/') != std::string::npos) - return temp; - - // At this point, the file name is valid and does not contain slashes. Search - // for it through the directories specified in the PATH environment variable. - - // Get the path. If its empty, we can't do anything to find it. - const char *PathStr = getenv("PATH"); - if (PathStr == 0) - return Path(); - - // Now we have a colon separated list of directories to search; try them. - size_t PathLen = strlen(PathStr); - while (PathLen) { - // Find the first colon... - const char *Colon = std::find(PathStr, PathStr+PathLen, ':'); - - // Check to see if this first directory contains the executable... - Path FilePath; - if (FilePath.set(std::string(PathStr,Colon))) { - FilePath.appendComponent(progName); - if (FilePath.canExecute()) - return FilePath; // Found the executable! - } - - // Nope it wasn't in this directory, check the next path in the list! - PathLen -= Colon-PathStr; - PathStr = Colon; - - // Advance past duplicate colons - while (*PathStr == ':') { - PathStr++; - PathLen--; - } - } - return Path(); -} - -static bool RedirectIO(const Path *Path, int FD, std::string* ErrMsg) { - if (Path == 0) // Noop - return false; - const char *File; - if (Path->isEmpty()) - // Redirect empty paths to /dev/null - File = "/dev/null"; - else - File = Path->c_str(); - - // Open the file - int InFD = open(File, FD == 0 ? O_RDONLY : O_WRONLY|O_CREAT, 0666); - if (InFD == -1) { - MakeErrMsg(ErrMsg, "Cannot open file '" + std::string(File) + "' for " - + (FD == 0 ? "input" : "output")); - return true; - } - - // Install it as the requested FD - if (dup2(InFD, FD) == -1) { - MakeErrMsg(ErrMsg, "Cannot dup2"); - close(InFD); - return true; - } - close(InFD); // Close the original FD - return false; -} - -#ifdef HAVE_POSIX_SPAWN -static bool RedirectIO_PS(const Path *Path, int FD, std::string *ErrMsg, - posix_spawn_file_actions_t &FileActions) { - if (Path == 0) // Noop - return false; - const char *File; - if (Path->isEmpty()) - // Redirect empty paths to /dev/null - File = "/dev/null"; - else - File = Path->c_str(); - - if (int Err = posix_spawn_file_actions_addopen(&FileActions, FD, - File, FD == 0 ? O_RDONLY : O_WRONLY|O_CREAT, 0666)) - return MakeErrMsg(ErrMsg, "Cannot dup2", Err); - return false; -} -#endif - -static void TimeOutHandler(int Sig) { -} - -static void SetMemoryLimits (unsigned size) -{ -#if HAVE_SYS_RESOURCE_H && HAVE_GETRLIMIT && HAVE_SETRLIMIT - struct rlimit r; - __typeof__ (r.rlim_cur) limit = (__typeof__ (r.rlim_cur)) (size) * 1048576; - - // Heap size - getrlimit (RLIMIT_DATA, &r); - r.rlim_cur = limit; - setrlimit (RLIMIT_DATA, &r); -#ifdef RLIMIT_RSS - // Resident set size. - getrlimit (RLIMIT_RSS, &r); - r.rlim_cur = limit; - setrlimit (RLIMIT_RSS, &r); -#endif -#ifdef RLIMIT_AS // e.g. NetBSD doesn't have it. - // Virtual memory. - getrlimit (RLIMIT_AS, &r); - r.rlim_cur = limit; - setrlimit (RLIMIT_AS, &r); -#endif -#endif -} - -bool -Program::Execute(const Path &path, const char **args, const char **envp, - const Path **redirects, unsigned memoryLimit, - std::string *ErrMsg) { - // If this OS has posix_spawn and there is no memory limit being implied, use - // posix_spawn. It is more efficient than fork/exec. -#ifdef HAVE_POSIX_SPAWN - if (memoryLimit == 0) { - posix_spawn_file_actions_t FileActions; - posix_spawn_file_actions_init(&FileActions); - - if (redirects) { - // Redirect stdin/stdout. - if (RedirectIO_PS(redirects[0], 0, ErrMsg, FileActions) || - RedirectIO_PS(redirects[1], 1, ErrMsg, FileActions)) - return false; - if (redirects[1] == 0 || redirects[2] == 0 || - *redirects[1] != *redirects[2]) { - // Just redirect stderr - if (RedirectIO_PS(redirects[2], 2, ErrMsg, FileActions)) return false; - } else { - // If stdout and stderr should go to the same place, redirect stderr - // to the FD already open for stdout. - if (int Err = posix_spawn_file_actions_adddup2(&FileActions, 1, 2)) - return !MakeErrMsg(ErrMsg, "Can't redirect stderr to stdout", Err); - } - } - - if (!envp) -#if !defined(__APPLE__) - envp = const_cast(environ); -#else - // environ is missing in dylibs. - envp = const_cast(*_NSGetEnviron()); -#endif - - // Explicitly initialized to prevent what appears to be a valgrind false - // positive. - pid_t PID = 0; - int Err = posix_spawn(&PID, path.c_str(), &FileActions, /*attrp*/0, - const_cast(args), const_cast(envp)); - - posix_spawn_file_actions_destroy(&FileActions); - - if (Err) - return !MakeErrMsg(ErrMsg, "posix_spawn failed", Err); - - Data_ = reinterpret_cast(PID); - return true; - } -#endif - - // Create a child process. - int child = fork(); - switch (child) { - // An error occured: Return to the caller. - case -1: - MakeErrMsg(ErrMsg, "Couldn't fork"); - return false; - - // Child process: Execute the program. - case 0: { - // Redirect file descriptors... - if (redirects) { - // Redirect stdin - if (RedirectIO(redirects[0], 0, ErrMsg)) { return false; } - // Redirect stdout - if (RedirectIO(redirects[1], 1, ErrMsg)) { return false; } - if (redirects[1] && redirects[2] && - *(redirects[1]) == *(redirects[2])) { - // If stdout and stderr should go to the same place, redirect stderr - // to the FD already open for stdout. - if (-1 == dup2(1,2)) { - MakeErrMsg(ErrMsg, "Can't redirect stderr to stdout"); - return false; - } - } else { - // Just redirect stderr - if (RedirectIO(redirects[2], 2, ErrMsg)) { return false; } - } - } - - // Set memory limits - if (memoryLimit!=0) { - SetMemoryLimits(memoryLimit); - } - - // Execute! - if (envp != 0) - execve(path.c_str(), - const_cast(args), - const_cast(envp)); - else - execv(path.c_str(), - const_cast(args)); - // If the execve() failed, we should exit. Follow Unix protocol and - // return 127 if the executable was not found, and 126 otherwise. - // Use _exit rather than exit so that atexit functions and static - // object destructors cloned from the parent process aren't - // redundantly run, and so that any data buffered in stdio buffers - // cloned from the parent aren't redundantly written out. - _exit(errno == ENOENT ? 127 : 126); - } - - // Parent process: Break out of the switch to do our processing. - default: - break; - } - - Data_ = reinterpret_cast(child); - - return true; -} - -int -Program::Wait(const sys::Path &path, - unsigned secondsToWait, - std::string* ErrMsg) -{ -#ifdef HAVE_SYS_WAIT_H - struct sigaction Act, Old; - - if (Data_ == 0) { - MakeErrMsg(ErrMsg, "Process not started!"); - return -1; - } - - // Install a timeout handler. The handler itself does nothing, but the simple - // fact of having a handler at all causes the wait below to return with EINTR, - // unlike if we used SIG_IGN. - if (secondsToWait) { - memset(&Act, 0, sizeof(Act)); - Act.sa_handler = TimeOutHandler; - sigemptyset(&Act.sa_mask); - sigaction(SIGALRM, &Act, &Old); - alarm(secondsToWait); - } - - // Parent process: Wait for the child process to terminate. - int status; - uint64_t pid = reinterpret_cast(Data_); - pid_t child = static_cast(pid); - while (waitpid(pid, &status, 0) != child) - if (secondsToWait && errno == EINTR) { - // Kill the child. - kill(child, SIGKILL); - - // Turn off the alarm and restore the signal handler - alarm(0); - sigaction(SIGALRM, &Old, 0); - - // Wait for child to die - if (wait(&status) != child) - MakeErrMsg(ErrMsg, "Child timed out but wouldn't die"); - else - MakeErrMsg(ErrMsg, "Child timed out", 0); - - return -1; // Timeout detected - } else if (errno != EINTR) { - MakeErrMsg(ErrMsg, "Error waiting for child process"); - return -1; - } - - // We exited normally without timeout, so turn off the timer. - if (secondsToWait) { - alarm(0); - sigaction(SIGALRM, &Old, 0); - } - - // Return the proper exit status. Detect error conditions - // so we can return -1 for them and set ErrMsg informatively. - int result = 0; - if (WIFEXITED(status)) { - result = WEXITSTATUS(status); -#ifdef HAVE_POSIX_SPAWN - // The posix_spawn child process returns 127 on any kind of error. - // Following the POSIX convention for command-line tools (which posix_spawn - // itself apparently does not), check to see if the failure was due to some - // reason other than the file not existing, and return 126 in this case. - if (result == 127 && path.exists()) - result = 126; -#endif - if (result == 127) { - if (ErrMsg) - *ErrMsg = llvm::sys::StrError(ENOENT); - return -1; - } - if (result == 126) { - if (ErrMsg) - *ErrMsg = "Program could not be executed"; - return -1; - } - } else if (WIFSIGNALED(status)) { - if (ErrMsg) { - *ErrMsg = strsignal(WTERMSIG(status)); -#ifdef WCOREDUMP - if (WCOREDUMP(status)) - *ErrMsg += " (core dumped)"; -#endif - } - return -1; - } - return result; -#else - if (ErrMsg) - *ErrMsg = "Program::Wait is not implemented on this platform yet!"; - return -1; -#endif -} - -bool -Program::Kill(std::string* ErrMsg) { - if (Data_ == 0) { - MakeErrMsg(ErrMsg, "Process not started!"); - return true; - } - - uint64_t pid64 = reinterpret_cast(Data_); - pid_t pid = static_cast(pid64); - - if (kill(pid, SIGKILL) != 0) { - MakeErrMsg(ErrMsg, "The process couldn't be killed!"); - return true; - } - - return false; -} - -bool Program::ChangeStdinToBinary(){ - // Do nothing, as Unix doesn't differentiate between text and binary. - return false; -} - -bool Program::ChangeStdoutToBinary(){ - // Do nothing, as Unix doesn't differentiate between text and binary. - return false; -} - -bool Program::ChangeStderrToBinary(){ - // Do nothing, as Unix doesn't differentiate between text and binary. - return false; -} - -} Removed: llvm/trunk/lib/System/Unix/README.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/README.txt?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Unix/README.txt (original) +++ llvm/trunk/lib/System/Unix/README.txt (removed) @@ -1,16 +0,0 @@ -llvm/lib/System/Unix README -=========================== - -This directory provides implementations of the lib/System classes that -are common to two or more variants of UNIX. For example, the directory -structure underneath this directory could look like this: - -Unix - only code that is truly generic to all UNIX platforms - Posix - code that is specific to Posix variants of UNIX - SUS - code that is specific to the Single Unix Specification - SysV - code that is specific to System V variants of UNIX - -As a rule, only those directories actually needing to be created should be -created. Also, further subdirectories could be created to reflect versions of -the various standards. For example, under SUS there could be v1, v2, and v3 -subdirectories to reflect the three major versions of SUS. Removed: llvm/trunk/lib/System/Unix/RWMutex.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/RWMutex.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Unix/RWMutex.inc (original) +++ llvm/trunk/lib/System/Unix/RWMutex.inc (removed) @@ -1,43 +0,0 @@ -//= llvm/System/Unix/RWMutex.inc - Unix Reader/Writer Mutual Exclusion Lock =// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the Unix specific (non-pthread) RWMutex class. -// -//===----------------------------------------------------------------------===// - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only generic UNIX code that -//=== is guaranteed to work on *all* UNIX variants. -//===----------------------------------------------------------------------===// - -namespace llvm { - -using namespace sys; - -RWMutexImpl::RWMutexImpl() { } - -RWMutexImpl::~RWMutexImpl() { } - -bool RWMutexImpl::reader_acquire() { - return true; -} - -bool RWMutexImpl::reader_release() { - return true; -} - -bool RWMutexImpl::writer_acquire() { - return true; -} - -bool RWMutexImpl::writer_release() { - return true; -} - -} Removed: llvm/trunk/lib/System/Unix/Signals.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/Signals.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Unix/Signals.inc (original) +++ llvm/trunk/lib/System/Unix/Signals.inc (removed) @@ -1,303 +0,0 @@ -//===- Signals.cpp - Generic Unix Signals Implementation -----*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file defines some helpful functions for dealing with the possibility of -// Unix signals occuring while your program is running. -// -//===----------------------------------------------------------------------===// - -#include "Unix.h" -#include "llvm/ADT/STLExtras.h" -#include "llvm/System/Mutex.h" -#include -#include -#if HAVE_EXECINFO_H -# include // For backtrace(). -#endif -#if HAVE_SIGNAL_H -#include -#endif -#if HAVE_SYS_STAT_H -#include -#endif -#if HAVE_DLFCN_H && __GNUG__ -#include -#include -#endif -using namespace llvm; - -static RETSIGTYPE SignalHandler(int Sig); // defined below. - -static SmartMutex SignalsMutex; - -/// InterruptFunction - The function to call if ctrl-c is pressed. -static void (*InterruptFunction)() = 0; - -static std::vector FilesToRemove; -static std::vector > CallBacksToRun; - -// IntSigs - Signals that may interrupt the program at any time. -static const int IntSigs[] = { - SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGTERM, SIGUSR1, SIGUSR2 -}; -static const int *const IntSigsEnd = - IntSigs + sizeof(IntSigs) / sizeof(IntSigs[0]); - -// KillSigs - Signals that are synchronous with the program that will cause it -// to die. -static const int KillSigs[] = { - SIGILL, SIGTRAP, SIGABRT, SIGFPE, SIGBUS, SIGSEGV -#ifdef SIGSYS - , SIGSYS -#endif -#ifdef SIGXCPU - , SIGXCPU -#endif -#ifdef SIGXFSZ - , SIGXFSZ -#endif -#ifdef SIGEMT - , SIGEMT -#endif -}; -static const int *const KillSigsEnd = - KillSigs + sizeof(KillSigs) / sizeof(KillSigs[0]); - -static unsigned NumRegisteredSignals = 0; -static struct { - struct sigaction SA; - int SigNo; -} RegisteredSignalInfo[(sizeof(IntSigs)+sizeof(KillSigs))/sizeof(KillSigs[0])]; - - -static void RegisterHandler(int Signal) { - assert(NumRegisteredSignals < - sizeof(RegisteredSignalInfo)/sizeof(RegisteredSignalInfo[0]) && - "Out of space for signal handlers!"); - - struct sigaction NewHandler; - - NewHandler.sa_handler = SignalHandler; - NewHandler.sa_flags = SA_NODEFER|SA_RESETHAND; - sigemptyset(&NewHandler.sa_mask); - - // Install the new handler, save the old one in RegisteredSignalInfo. - sigaction(Signal, &NewHandler, - &RegisteredSignalInfo[NumRegisteredSignals].SA); - RegisteredSignalInfo[NumRegisteredSignals].SigNo = Signal; - ++NumRegisteredSignals; -} - -static void RegisterHandlers() { - // If the handlers are already registered, we're done. - if (NumRegisteredSignals != 0) return; - - std::for_each(IntSigs, IntSigsEnd, RegisterHandler); - std::for_each(KillSigs, KillSigsEnd, RegisterHandler); -} - -static void UnregisterHandlers() { - // Restore all of the signal handlers to how they were before we showed up. - for (unsigned i = 0, e = NumRegisteredSignals; i != e; ++i) - sigaction(RegisteredSignalInfo[i].SigNo, - &RegisteredSignalInfo[i].SA, 0); - NumRegisteredSignals = 0; -} - - -/// RemoveFilesToRemove - Process the FilesToRemove list. This function -/// should be called with the SignalsMutex lock held. -static void RemoveFilesToRemove() { - while (!FilesToRemove.empty()) { - FilesToRemove.back().eraseFromDisk(true); - FilesToRemove.pop_back(); - } -} - -// SignalHandler - The signal handler that runs. -static RETSIGTYPE SignalHandler(int Sig) { - // Restore the signal behavior to default, so that the program actually - // crashes when we return and the signal reissues. This also ensures that if - // we crash in our signal handler that the program will terminate immediately - // instead of recursing in the signal handler. - UnregisterHandlers(); - - // Unmask all potentially blocked kill signals. - sigset_t SigMask; - sigfillset(&SigMask); - sigprocmask(SIG_UNBLOCK, &SigMask, 0); - - SignalsMutex.acquire(); - RemoveFilesToRemove(); - - if (std::find(IntSigs, IntSigsEnd, Sig) != IntSigsEnd) { - if (InterruptFunction) { - void (*IF)() = InterruptFunction; - SignalsMutex.release(); - InterruptFunction = 0; - IF(); // run the interrupt function. - return; - } - - SignalsMutex.release(); - raise(Sig); // Execute the default handler. - return; - } - - SignalsMutex.release(); - - // Otherwise if it is a fault (like SEGV) run any handler. - for (unsigned i = 0, e = CallBacksToRun.size(); i != e; ++i) - CallBacksToRun[i].first(CallBacksToRun[i].second); -} - -void llvm::sys::RunInterruptHandlers() { - SignalsMutex.acquire(); - RemoveFilesToRemove(); - SignalsMutex.release(); -} - -void llvm::sys::SetInterruptFunction(void (*IF)()) { - SignalsMutex.acquire(); - InterruptFunction = IF; - SignalsMutex.release(); - RegisterHandlers(); -} - -// RemoveFileOnSignal - The public API -bool llvm::sys::RemoveFileOnSignal(const sys::Path &Filename, - std::string* ErrMsg) { - SignalsMutex.acquire(); - FilesToRemove.push_back(Filename); - - SignalsMutex.release(); - - RegisterHandlers(); - return false; -} - -// DontRemoveFileOnSignal - The public API -void llvm::sys::DontRemoveFileOnSignal(const sys::Path &Filename) { - SignalsMutex.acquire(); - std::vector::reverse_iterator I = - std::find(FilesToRemove.rbegin(), FilesToRemove.rend(), Filename); - if (I != FilesToRemove.rend()) - FilesToRemove.erase(I.base()-1); - SignalsMutex.release(); -} - -/// AddSignalHandler - Add a function to be called when a signal is delivered -/// to the process. The handler can have a cookie passed to it to identify -/// what instance of the handler it is. -void llvm::sys::AddSignalHandler(void (*FnPtr)(void *), void *Cookie) { - CallBacksToRun.push_back(std::make_pair(FnPtr, Cookie)); - RegisterHandlers(); -} - - -// PrintStackTrace - In the case of a program crash or fault, print out a stack -// trace so that the user has an indication of why and where we died. -// -// On glibc systems we have the 'backtrace' function, which works nicely, but -// doesn't demangle symbols. -static void PrintStackTrace(void *) { -#ifdef HAVE_BACKTRACE - static void* StackTrace[256]; - // Use backtrace() to output a backtrace on Linux systems with glibc. - int depth = backtrace(StackTrace, - static_cast(array_lengthof(StackTrace))); -#if HAVE_DLFCN_H && __GNUG__ - int width = 0; - for (int i = 0; i < depth; ++i) { - Dl_info dlinfo; - dladdr(StackTrace[i], &dlinfo); - const char* name = strrchr(dlinfo.dli_fname, '/'); - - int nwidth; - if (name == NULL) nwidth = strlen(dlinfo.dli_fname); - else nwidth = strlen(name) - 1; - - if (nwidth > width) width = nwidth; - } - - for (int i = 0; i < depth; ++i) { - Dl_info dlinfo; - dladdr(StackTrace[i], &dlinfo); - - fprintf(stderr, "%-2d", i); - - const char* name = strrchr(dlinfo.dli_fname, '/'); - if (name == NULL) fprintf(stderr, " %-*s", width, dlinfo.dli_fname); - else fprintf(stderr, " %-*s", width, name+1); - - fprintf(stderr, " %#0*lx", - (int)(sizeof(void*) * 2) + 2, (unsigned long)StackTrace[i]); - - if (dlinfo.dli_sname != NULL) { - int res; - fputc(' ', stderr); - char* d = abi::__cxa_demangle(dlinfo.dli_sname, NULL, NULL, &res); - if (d == NULL) fputs(dlinfo.dli_sname, stderr); - else fputs(d, stderr); - free(d); - - fprintf(stderr, " + %tu",(char*)StackTrace[i]-(char*)dlinfo.dli_saddr); - } - fputc('\n', stderr); - } -#else - backtrace_symbols_fd(StackTrace, depth, STDERR_FILENO); -#endif -#endif -} - -/// PrintStackTraceOnErrorSignal - When an error signal (such as SIBABRT or -/// SIGSEGV) is delivered to the process, print a stack trace and then exit. -void llvm::sys::PrintStackTraceOnErrorSignal() { - AddSignalHandler(PrintStackTrace, 0); -} - - -/***/ - -// On Darwin, raise sends a signal to the main thread instead of the current -// thread. This has the unfortunate effect that assert() and abort() will end up -// bypassing our crash recovery attempts. We work around this for anything in -// the same linkage unit by just defining our own versions of the assert handler -// and abort. - -#ifdef __APPLE__ - -int raise(int sig) { - return pthread_kill(pthread_self(), sig); -} - -void __assert_rtn(const char *func, - const char *file, - int line, - const char *expr) { - if (func) - fprintf(stderr, "Assertion failed: (%s), function %s, file %s, line %d.\n", - expr, func, file, line); - else - fprintf(stderr, "Assertion failed: (%s), file %s, line %d.\n", - expr, file, line); - abort(); -} - -#include -#include - -void abort() { - raise(SIGABRT); - usleep(1000); - __builtin_trap(); -} - -#endif Removed: llvm/trunk/lib/System/Unix/ThreadLocal.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/ThreadLocal.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Unix/ThreadLocal.inc (original) +++ llvm/trunk/lib/System/Unix/ThreadLocal.inc (removed) @@ -1,26 +0,0 @@ -//=== llvm/System/Unix/ThreadLocal.inc - Unix Thread Local Data -*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the Unix specific (non-pthread) ThreadLocal class. -// -//===----------------------------------------------------------------------===// - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only generic UNIX code that -//=== is guaranteed to work on *all* UNIX variants. -//===----------------------------------------------------------------------===// - -namespace llvm { -using namespace sys; -ThreadLocalImpl::ThreadLocalImpl() { } -ThreadLocalImpl::~ThreadLocalImpl() { } -void ThreadLocalImpl::setInstance(const void* d) { data = const_cast(d);} -const void* ThreadLocalImpl::getInstance() { return data; } -void ThreadLocalImpl::removeInstance() { setInstance(0); } -} Removed: llvm/trunk/lib/System/Unix/TimeValue.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/TimeValue.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Unix/TimeValue.inc (original) +++ llvm/trunk/lib/System/Unix/TimeValue.inc (removed) @@ -1,56 +0,0 @@ -//===- Unix/TimeValue.cpp - Unix TimeValue Implementation -------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the Unix specific portion of the TimeValue class. -// -//===----------------------------------------------------------------------===// - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only generic UNIX code that -//=== is guaranteed to work on *all* UNIX variants. -//===----------------------------------------------------------------------===// - -#include "Unix.h" - -namespace llvm { - using namespace sys; - -std::string TimeValue::str() const { - char buffer[32]; - - time_t ourTime = time_t(this->toEpochTime()); -#ifdef __hpux -// note that the following line needs -D_REENTRANT on HP-UX to be picked up - asctime_r(localtime(&ourTime), buffer); -#else - ::asctime_r(::localtime(&ourTime), buffer); -#endif - - std::string result(buffer); - return result.substr(0,24); -} - -TimeValue TimeValue::now() { - struct timeval the_time; - timerclear(&the_time); - if (0 != ::gettimeofday(&the_time,0)) { - // This is *really* unlikely to occur because the only gettimeofday - // errors concern the timezone parameter which we're passing in as 0. - // In the unlikely case it does happen, just return MinTime, no error - // message needed. - return MinTime; - } - - return TimeValue( - static_cast( the_time.tv_sec + PosixZeroTime.seconds_ ), - static_cast( the_time.tv_usec * - NANOSECONDS_PER_MICROSECOND ) ); -} - -} Removed: llvm/trunk/lib/System/Unix/Unix.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/Unix.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Unix/Unix.h (original) +++ llvm/trunk/lib/System/Unix/Unix.h (removed) @@ -1,87 +0,0 @@ -//===- llvm/System/Unix/Unix.h - Common Unix Include File -------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file defines things specific to Unix implementations. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SYSTEM_UNIX_UNIX_H -#define LLVM_SYSTEM_UNIX_UNIX_H - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only generic UNIX code that -//=== is guaranteed to work on all UNIX variants. -//===----------------------------------------------------------------------===// - -#include "llvm/Config/config.h" // Get autoconf configuration settings -#include "llvm/System/Errno.h" -#include -#include -#include -#include -#include -#include - -#ifdef HAVE_UNISTD_H -#include -#endif - -#ifdef HAVE_SYS_TYPES_H -#include -#endif - -#ifdef HAVE_SYS_PARAM_H -#include -#endif - -#ifdef HAVE_ASSERT_H -#include -#endif - -#ifdef TIME_WITH_SYS_TIME -# include -# include -#else -# ifdef HAVE_SYS_TIME_H -# include -# else -# include -# endif -#endif - -#ifdef HAVE_SYS_WAIT_H -# include -#endif - -#ifndef WEXITSTATUS -# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) -#endif - -#ifndef WIFEXITED -# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) -#endif - -/// This function builds an error message into \p ErrMsg using the \p prefix -/// string and the Unix error number given by \p errnum. If errnum is -1, the -/// default then the value of errno is used. -/// @brief Make an error message -/// -/// If the error number can be converted to a string, it will be -/// separated from prefix by ": ". -static inline bool MakeErrMsg( - std::string* ErrMsg, const std::string& prefix, int errnum = -1) { - if (!ErrMsg) - return true; - if (errnum == -1) - errnum = errno; - *ErrMsg = prefix + ": " + llvm::sys::StrError(errnum); - return true; -} - -#endif Removed: llvm/trunk/lib/System/Unix/system_error.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/system_error.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Unix/system_error.inc (original) +++ llvm/trunk/lib/System/Unix/system_error.inc (removed) @@ -1,34 +0,0 @@ -//===- llvm/System/Unix/system_error.inc - Unix error_code ------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file provides the Unix specific implementation of the error_code -// and error_condition classes. -// -//===----------------------------------------------------------------------===// - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only generic UNIX code that -//=== is guaranteed to work on *all* UNIX variants. -//===----------------------------------------------------------------------===// - -using namespace llvm; - -std::string -_system_error_category::message(int ev) const { - return _do_message::message(ev); -} - -error_condition -_system_error_category::default_error_condition(int ev) const { -#ifdef ELAST - if (ev > ELAST) - return error_condition(ev, system_category()); -#endif // ELAST - return error_condition(ev, generic_category()); -} Removed: llvm/trunk/lib/System/Valgrind.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Valgrind.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Valgrind.cpp (original) +++ llvm/trunk/lib/System/Valgrind.cpp (removed) @@ -1,54 +0,0 @@ -//===-- Valgrind.cpp - Implement Valgrind communication ---------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// Defines Valgrind communication methods, if HAVE_VALGRIND_VALGRIND_H is -// defined. If we have valgrind.h but valgrind isn't running, its macros are -// no-ops. -// -//===----------------------------------------------------------------------===// - -#include "llvm/System/Valgrind.h" -#include "llvm/Config/config.h" - -#if HAVE_VALGRIND_VALGRIND_H -#include - -static bool InitNotUnderValgrind() { - return !RUNNING_ON_VALGRIND; -} - -// This bool is negated from what we'd expect because code may run before it -// gets initialized. If that happens, it will appear to be 0 (false), and we -// want that to cause the rest of the code in this file to run the -// Valgrind-provided macros. -static const bool NotUnderValgrind = InitNotUnderValgrind(); - -bool llvm::sys::RunningOnValgrind() { - if (NotUnderValgrind) - return false; - return RUNNING_ON_VALGRIND; -} - -void llvm::sys::ValgrindDiscardTranslations(const void *Addr, size_t Len) { - if (NotUnderValgrind) - return; - - VALGRIND_DISCARD_TRANSLATIONS(Addr, Len); -} - -#else // !HAVE_VALGRIND_VALGRIND_H - -bool llvm::sys::RunningOnValgrind() { - return false; -} - -void llvm::sys::ValgrindDiscardTranslations(const void *Addr, size_t Len) { -} - -#endif // !HAVE_VALGRIND_VALGRIND_H Removed: llvm/trunk/lib/System/Win32/Alarm.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/Alarm.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Win32/Alarm.inc (original) +++ llvm/trunk/lib/System/Win32/Alarm.inc (removed) @@ -1,43 +0,0 @@ -//===-- Alarm.inc - Implement Win32 Alarm Support ---------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the Win32 Alarm support. -// -//===----------------------------------------------------------------------===// - -#include -using namespace llvm; - -/// NestedSOI - Sanity check. Alarms cannot be nested or run in parallel. -/// This ensures that they never do. -static bool NestedSOI = false; - -void sys::SetupAlarm(unsigned seconds) { - assert(!NestedSOI && "sys::SetupAlarm calls cannot be nested!"); - NestedSOI = true; - // FIXME: Implement for Win32 -} - -void sys::TerminateAlarm() { - assert(NestedSOI && "sys::TerminateAlarm called without sys::SetupAlarm!"); - // FIXME: Implement for Win32 - NestedSOI = false; -} - -int sys::AlarmStatus() { - // FIXME: Implement for Win32 - return 0; -} - -// Don't pull in all of the Windows headers. -extern "C" void __stdcall Sleep(unsigned long); - -void sys::Sleep(unsigned n) { - ::Sleep(n*1000); -} Removed: llvm/trunk/lib/System/Win32/DynamicLibrary.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/DynamicLibrary.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Win32/DynamicLibrary.inc (original) +++ llvm/trunk/lib/System/Win32/DynamicLibrary.inc (removed) @@ -1,200 +0,0 @@ -//===- Win32/DynamicLibrary.cpp - Win32 DL Implementation -------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file provides the Win32 specific implementation of DynamicLibrary. -// -//===----------------------------------------------------------------------===// - -#include "Win32.h" - -#ifdef __MINGW32__ - #include -#else - #include -#endif - -#ifdef _MSC_VER - #include -#endif - -#ifdef __MINGW32__ - #if (HAVE_LIBIMAGEHLP != 1) - #error "libimagehlp.a should be present" - #endif -#else - #pragma comment(lib, "dbghelp.lib") -#endif - -namespace llvm { -using namespace sys; - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only Win32 specific code -//=== and must not be UNIX code. -//===----------------------------------------------------------------------===// - -static std::vector OpenedHandles; - -#ifdef _WIN64 - typedef DWORD64 ModuleBaseType; -#else - typedef ULONG ModuleBaseType; -#endif - -extern "C" { -// Use old callback if: -// - Not using Visual Studio -// - Visual Studio 2005 or earlier but only if we are not using the Windows SDK -// or Windows SDK version is older than 6.0 -// Use new callback if: -// - Newer Visual Studio (comes with newer SDK). -// - Visual Studio 2005 with Windows SDK 6.0+ -#if !defined(_MSC_VER) || _MSC_VER < 1500 && (!defined(VER_PRODUCTBUILD) || VER_PRODUCTBUILD < 6000) - static BOOL CALLBACK ELM_Callback(PSTR ModuleName, - ModuleBaseType ModuleBase, - ULONG ModuleSize, - PVOID UserContext) -#else - static BOOL CALLBACK ELM_Callback(PCSTR ModuleName, - ModuleBaseType ModuleBase, - ULONG ModuleSize, - PVOID UserContext) -#endif - { - // Ignore VC++ runtimes prior to 7.1. Somehow some of them get loaded - // into the process. - if (stricmp(ModuleName, "msvci70") != 0 && - stricmp(ModuleName, "msvcirt") != 0 && - stricmp(ModuleName, "msvcp50") != 0 && - stricmp(ModuleName, "msvcp60") != 0 && - stricmp(ModuleName, "msvcp70") != 0 && - stricmp(ModuleName, "msvcr70") != 0 && -#ifndef __MINGW32__ - // Mingw32 uses msvcrt.dll by default. Don't ignore it. - // Otherwise, user should be aware, what he's doing :) - stricmp(ModuleName, "msvcrt") != 0 && -#endif - stricmp(ModuleName, "msvcrt20") != 0 && - stricmp(ModuleName, "msvcrt40") != 0) { - OpenedHandles.push_back((HMODULE)ModuleBase); - } - return TRUE; - } -} - -bool DynamicLibrary::LoadLibraryPermanently(const char *filename, - std::string *ErrMsg) { - if (filename) { - HMODULE a_handle = LoadLibrary(filename); - - if (a_handle == 0) - return MakeErrMsg(ErrMsg, std::string(filename) + ": Can't open : "); - - OpenedHandles.push_back(a_handle); - } else { - // When no file is specified, enumerate all DLLs and EXEs in the - // process. - EnumerateLoadedModules(GetCurrentProcess(), ELM_Callback, 0); - } - - // Because we don't remember the handle, we will never free it; hence, - // it is loaded permanently. - return false; -} - -// Stack probing routines are in the support library (e.g. libgcc), but we don't -// have dynamic linking on windows. Provide a hook. -#if defined(__MINGW32__) || defined (_MSC_VER) - #define EXPLICIT_SYMBOL(SYM) \ - if (!strcmp(symbolName, #SYM)) return (void*)&SYM - #define EXPLICIT_SYMBOL2(SYMFROM, SYMTO) \ - if (!strcmp(symbolName, #SYMFROM)) return (void*)&SYMTO - #define EXPLICIT_SYMBOL_DEF(SYM) \ - extern "C" { extern void *SYM; } - - #if defined(__MINGW32__) - EXPLICIT_SYMBOL_DEF(_alloca) - EXPLICIT_SYMBOL_DEF(__main) - EXPLICIT_SYMBOL_DEF(__ashldi3) - EXPLICIT_SYMBOL_DEF(__ashrdi3) - EXPLICIT_SYMBOL_DEF(__cmpdi2) - EXPLICIT_SYMBOL_DEF(__divdi3) - EXPLICIT_SYMBOL_DEF(__fixdfdi) - EXPLICIT_SYMBOL_DEF(__fixsfdi) - EXPLICIT_SYMBOL_DEF(__fixunsdfdi) - EXPLICIT_SYMBOL_DEF(__fixunssfdi) - EXPLICIT_SYMBOL_DEF(__floatdidf) - EXPLICIT_SYMBOL_DEF(__floatdisf) - EXPLICIT_SYMBOL_DEF(__lshrdi3) - EXPLICIT_SYMBOL_DEF(__moddi3) - EXPLICIT_SYMBOL_DEF(__udivdi3) - EXPLICIT_SYMBOL_DEF(__umoddi3) - #elif defined(_MSC_VER) - EXPLICIT_SYMBOL_DEF(_alloca_probe) - #endif -#endif - -void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) { - // First check symbols added via AddSymbol(). - if (ExplicitSymbols) { - std::map::iterator I = - ExplicitSymbols->find(symbolName); - std::map::iterator E = ExplicitSymbols->end(); - if (I != E) - return I->second; - } - - // Now search the libraries. - for (std::vector::iterator I = OpenedHandles.begin(), - E = OpenedHandles.end(); I != E; ++I) { - FARPROC ptr = GetProcAddress((HMODULE)*I, symbolName); - if (ptr) { - return (void *) ptr; - } - } - -#if defined(__MINGW32__) - { - EXPLICIT_SYMBOL(_alloca); - EXPLICIT_SYMBOL(__main); - EXPLICIT_SYMBOL(__ashldi3); - EXPLICIT_SYMBOL(__ashrdi3); - EXPLICIT_SYMBOL(__cmpdi2); - EXPLICIT_SYMBOL(__divdi3); - EXPLICIT_SYMBOL(__fixdfdi); - EXPLICIT_SYMBOL(__fixsfdi); - EXPLICIT_SYMBOL(__fixunsdfdi); - EXPLICIT_SYMBOL(__fixunssfdi); - EXPLICIT_SYMBOL(__floatdidf); - EXPLICIT_SYMBOL(__floatdisf); - EXPLICIT_SYMBOL(__lshrdi3); - EXPLICIT_SYMBOL(__moddi3); - EXPLICIT_SYMBOL(__udivdi3); - EXPLICIT_SYMBOL(__umoddi3); - - EXPLICIT_SYMBOL2(alloca, _alloca); -#undef EXPLICIT_SYMBOL -#undef EXPLICIT_SYMBOL2 -#undef EXPLICIT_SYMBOL_DEF - } -#elif defined(_MSC_VER) - { - EXPLICIT_SYMBOL2(alloca, _alloca_probe); - EXPLICIT_SYMBOL2(_alloca, _alloca_probe); -#undef EXPLICIT_SYMBOL -#undef EXPLICIT_SYMBOL2 -#undef EXPLICIT_SYMBOL_DEF - } -#endif - - return 0; -} - -} - Removed: llvm/trunk/lib/System/Win32/Host.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/Host.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Win32/Host.inc (original) +++ llvm/trunk/lib/System/Win32/Host.inc (removed) @@ -1,23 +0,0 @@ -//===- llvm/System/Win32/Host.inc -------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the Win32 Host support. -// -//===----------------------------------------------------------------------===// - -#include "Win32.h" -#include -#include - -using namespace llvm; - -std::string sys::getHostTriple() { - // FIXME: Adapt to running version. - return LLVM_HOSTTRIPLE; -} Removed: llvm/trunk/lib/System/Win32/Memory.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/Memory.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Win32/Memory.inc (original) +++ llvm/trunk/lib/System/Win32/Memory.inc (removed) @@ -1,73 +0,0 @@ -//===- Win32/Memory.cpp - Win32 Memory Implementation -----------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file provides the Win32 specific implementation of various Memory -// management utilities -// -//===----------------------------------------------------------------------===// - -#include "Win32.h" -#include "llvm/System/DataTypes.h" -#include "llvm/System/Process.h" - -namespace llvm { -using namespace sys; - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only Win32 specific code -//=== and must not be UNIX code -//===----------------------------------------------------------------------===// - -MemoryBlock Memory::AllocateRWX(size_t NumBytes, - const MemoryBlock *NearBlock, - std::string *ErrMsg) { - if (NumBytes == 0) return MemoryBlock(); - - static const size_t pageSize = Process::GetPageSize(); - size_t NumPages = (NumBytes+pageSize-1)/pageSize; - - //FIXME: support NearBlock if ever needed on Win64. - - void *pa = VirtualAlloc(NULL, NumPages*pageSize, MEM_COMMIT, - PAGE_EXECUTE_READWRITE); - if (pa == NULL) { - MakeErrMsg(ErrMsg, "Can't allocate RWX Memory: "); - return MemoryBlock(); - } - - MemoryBlock result; - result.Address = pa; - result.Size = NumPages*pageSize; - return result; -} - -bool Memory::ReleaseRWX(MemoryBlock &M, std::string *ErrMsg) { - if (M.Address == 0 || M.Size == 0) return false; - if (!VirtualFree(M.Address, 0, MEM_RELEASE)) - return MakeErrMsg(ErrMsg, "Can't release RWX Memory: "); - return false; -} - -bool Memory::setWritable(MemoryBlock &M, std::string *ErrMsg) { - return true; -} - -bool Memory::setExecutable(MemoryBlock &M, std::string *ErrMsg) { - return false; -} - -bool Memory::setRangeWritable(const void *Addr, size_t Size) { - return true; -} - -bool Memory::setRangeExecutable(const void *Addr, size_t Size) { - return false; -} - -} Removed: llvm/trunk/lib/System/Win32/Mutex.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/Mutex.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Win32/Mutex.inc (original) +++ llvm/trunk/lib/System/Win32/Mutex.inc (removed) @@ -1,58 +0,0 @@ -//===- llvm/System/Win32/Mutex.inc - Win32 Mutex Implementation -*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the Win32 specific (non-pthread) Mutex class. -// -//===----------------------------------------------------------------------===// - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only generic Win32 code that -//=== is guaranteed to work on *all* Win32 variants. -//===----------------------------------------------------------------------===// - -#include "Win32.h" -#include "llvm/System/Mutex.h" - -namespace llvm { -using namespace sys; - -MutexImpl::MutexImpl(bool /*recursive*/) -{ - data_ = new CRITICAL_SECTION; - InitializeCriticalSection((LPCRITICAL_SECTION)data_); -} - -MutexImpl::~MutexImpl() -{ - DeleteCriticalSection((LPCRITICAL_SECTION)data_); - delete (LPCRITICAL_SECTION)data_; - data_ = 0; -} - -bool -MutexImpl::acquire() -{ - EnterCriticalSection((LPCRITICAL_SECTION)data_); - return true; -} - -bool -MutexImpl::release() -{ - LeaveCriticalSection((LPCRITICAL_SECTION)data_); - return true; -} - -bool -MutexImpl::tryacquire() -{ - return TryEnterCriticalSection((LPCRITICAL_SECTION)data_); -} - -} Removed: llvm/trunk/lib/System/Win32/Path.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/Path.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Win32/Path.inc (original) +++ llvm/trunk/lib/System/Win32/Path.inc (removed) @@ -1,918 +0,0 @@ -//===- llvm/System/Win32/Path.cpp - Win32 Path Implementation ---*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file provides the Win32 specific implementation of the Path class. -// -//===----------------------------------------------------------------------===// - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only generic Win32 code that -//=== is guaranteed to work on *all* Win32 variants. -//===----------------------------------------------------------------------===// - -#include "Win32.h" -#include -#include - -// We need to undo a macro defined in Windows.h, otherwise we won't compile: -#undef CopyFile -#undef GetCurrentDirectory - -// Windows happily accepts either forward or backward slashes, though any path -// returned by a Win32 API will have backward slashes. As LLVM code basically -// assumes forward slashes are used, backward slashs are converted where they -// can be introduced into a path. -// -// Another invariant is that a path ends with a slash if and only if the path -// is a root directory. Any other use of a trailing slash is stripped. Unlike -// in Unix, Windows has a rather complicated notion of a root path and this -// invariant helps simply the code. - -static void FlipBackSlashes(std::string& s) { - for (size_t i = 0; i < s.size(); i++) - if (s[i] == '\\') - s[i] = '/'; -} - -namespace llvm { -namespace sys { - -const char PathSeparator = ';'; - -StringRef Path::GetEXESuffix() { - return "exe"; -} - -Path::Path(llvm::StringRef p) - : path(p) { - FlipBackSlashes(path); -} - -Path::Path(const char *StrStart, unsigned StrLen) - : path(StrStart, StrLen) { - FlipBackSlashes(path); -} - -Path& -Path::operator=(StringRef that) { - path.assign(that.data(), that.size()); - FlipBackSlashes(path); - return *this; -} - -// push_back 0 on create, and pop_back on delete. -struct ScopedNullTerminator { - std::string &str; - ScopedNullTerminator(std::string &s) : str(s) { str.push_back(0); } - ~ScopedNullTerminator() { - // str.pop_back(); But wait, C++03 doesn't have this... - assert(!str.empty() && str[str.size() - 1] == 0 - && "Null char not present!"); - str.resize(str.size() - 1); - } -}; - -bool -Path::isValid() const { - if (path.empty()) - return false; - - // If there is a colon, it must be the second character, preceded by a letter - // and followed by something. - size_t len = path.size(); - // This code assumes that path is null terminated, so make sure it is. - ScopedNullTerminator snt(path); - size_t pos = path.rfind(':',len); - size_t rootslash = 0; - if (pos != std::string::npos) { - if (pos != 1 || !isalpha(path[0]) || len < 3) - return false; - rootslash = 2; - } - - // Look for a UNC path, and if found adjust our notion of the root slash. - if (len > 3 && path[0] == '/' && path[1] == '/') { - rootslash = path.find('/', 2); - if (rootslash == std::string::npos) - rootslash = 0; - } - - // Check for illegal characters. - if (path.find_first_of("\\<>\"|\001\002\003\004\005\006\007\010\011\012" - "\013\014\015\016\017\020\021\022\023\024\025\026" - "\027\030\031\032\033\034\035\036\037") - != std::string::npos) - return false; - - // Remove trailing slash, unless it's a root slash. - if (len > rootslash+1 && path[len-1] == '/') - path.erase(--len); - - // Check each component for legality. - for (pos = 0; pos < len; ++pos) { - // A component may not end in a space. - if (path[pos] == ' ') { - if (path[pos+1] == '/' || path[pos+1] == '\0') - return false; - } - - // A component may not end in a period. - if (path[pos] == '.') { - if (path[pos+1] == '/' || path[pos+1] == '\0') { - // Unless it is the pseudo-directory "."... - if (pos == 0 || path[pos-1] == '/' || path[pos-1] == ':') - return true; - // or "..". - if (pos > 0 && path[pos-1] == '.') { - if (pos == 1 || path[pos-2] == '/' || path[pos-2] == ':') - return true; - } - return false; - } - } - } - - return true; -} - -void Path::makeAbsolute() { - TCHAR FullPath[MAX_PATH + 1] = {0}; - LPTSTR FilePart = NULL; - - DWORD RetLength = ::GetFullPathNameA(path.c_str(), - sizeof(FullPath)/sizeof(FullPath[0]), - FullPath, &FilePart); - - if (0 == RetLength) { - // FIXME: Report the error GetLastError() - assert(0 && "Unable to make absolute path!"); - } else if (RetLength > MAX_PATH) { - // FIXME: Report too small buffer (needed RetLength bytes). - assert(0 && "Unable to make absolute path!"); - } else { - path = FullPath; - } -} - -bool -Path::isAbsolute(const char *NameStart, unsigned NameLen) { - assert(NameStart); - // FIXME: This does not handle correctly an absolute path starting from - // a drive letter or in UNC format. - switch (NameLen) { - case 0: - return false; - case 1: - case 2: - return NameStart[0] == '/'; - default: - return - (NameStart[0] == '/' || (NameStart[1] == ':' && NameStart[2] == '/')) || - (NameStart[0] == '\\' || (NameStart[1] == ':' && NameStart[2] == '\\')); - } -} - -bool -Path::isAbsolute() const { - // FIXME: This does not handle correctly an absolute path starting from - // a drive letter or in UNC format. - switch (path.length()) { - case 0: - return false; - case 1: - case 2: - return path[0] == '/'; - default: - return path[0] == '/' || (path[1] == ':' && path[2] == '/'); - } -} - -static Path *TempDirectory; - -Path -Path::GetTemporaryDirectory(std::string* ErrMsg) { - if (TempDirectory) - return *TempDirectory; - - char pathname[MAX_PATH]; - if (!GetTempPath(MAX_PATH, pathname)) { - if (ErrMsg) - *ErrMsg = "Can't determine temporary directory"; - return Path(); - } - - Path result; - result.set(pathname); - - // Append a subdirectory passed on our process id so multiple LLVMs don't - // step on each other's toes. -#ifdef __MINGW32__ - // Mingw's Win32 header files are broken. - sprintf(pathname, "LLVM_%u", unsigned(GetCurrentProcessId())); -#else - sprintf(pathname, "LLVM_%u", GetCurrentProcessId()); -#endif - result.appendComponent(pathname); - - // If there's a directory left over from a previous LLVM execution that - // happened to have the same process id, get rid of it. - result.eraseFromDisk(true); - - // And finally (re-)create the empty directory. - result.createDirectoryOnDisk(false); - TempDirectory = new Path(result); - return *TempDirectory; -} - -// FIXME: the following set of functions don't map to Windows very well. -Path -Path::GetRootDirectory() { - // This is the only notion that that Windows has of a root directory. Nothing - // is here except for drives. - return Path("file:///"); -} - -void -Path::GetSystemLibraryPaths(std::vector& Paths) { - char buff[MAX_PATH]; - // Generic form of C:\Windows\System32 - HRESULT res = SHGetFolderPathA(NULL, - CSIDL_FLAG_CREATE | CSIDL_SYSTEM, - NULL, - SHGFP_TYPE_CURRENT, - buff); - if (res != S_OK) { - assert(0 && "Failed to get system directory"); - return; - } - Paths.push_back(sys::Path(buff)); - - // Reset buff. - buff[0] = 0; - // Generic form of C:\Windows - res = SHGetFolderPathA(NULL, - CSIDL_FLAG_CREATE | CSIDL_WINDOWS, - NULL, - SHGFP_TYPE_CURRENT, - buff); - if (res != S_OK) { - assert(0 && "Failed to get windows directory"); - return; - } - Paths.push_back(sys::Path(buff)); -} - -void -Path::GetBitcodeLibraryPaths(std::vector& Paths) { - char * env_var = getenv("LLVM_LIB_SEARCH_PATH"); - if (env_var != 0) { - getPathList(env_var,Paths); - } -#ifdef LLVM_LIBDIR - { - Path tmpPath; - if (tmpPath.set(LLVM_LIBDIR)) - if (tmpPath.canRead()) - Paths.push_back(tmpPath); - } -#endif - GetSystemLibraryPaths(Paths); -} - -Path -Path::GetLLVMDefaultConfigDir() { - Path ret = GetUserHomeDirectory(); - if (!ret.appendComponent(".llvm")) - assert(0 && "Failed to append .llvm"); - return ret; -} - -Path -Path::GetUserHomeDirectory() { - char buff[MAX_PATH]; - HRESULT res = SHGetFolderPathA(NULL, - CSIDL_FLAG_CREATE | CSIDL_APPDATA, - NULL, - SHGFP_TYPE_CURRENT, - buff); - if (res != S_OK) - assert(0 && "Failed to get user home directory"); - return Path(buff); -} - -Path -Path::GetCurrentDirectory() { - char pathname[MAX_PATH]; - ::GetCurrentDirectoryA(MAX_PATH,pathname); - return Path(pathname); -} - -/// GetMainExecutable - Return the path to the main executable, given the -/// value of argv[0] from program startup. -Path Path::GetMainExecutable(const char *argv0, void *MainAddr) { - char pathname[MAX_PATH]; - DWORD ret = ::GetModuleFileNameA(NULL, pathname, MAX_PATH); - return ret != MAX_PATH ? Path(pathname) : Path(); -} - - -// FIXME: the above set of functions don't map to Windows very well. - - -StringRef Path::getDirname() const { - return getDirnameCharSep(path, "/"); -} - -StringRef -Path::getBasename() const { - // Find the last slash - size_t slash = path.rfind('/'); - if (slash == std::string::npos) - slash = 0; - else - slash++; - - size_t dot = path.rfind('.'); - if (dot == std::string::npos || dot < slash) - return StringRef(path).substr(slash); - else - return StringRef(path).substr(slash, dot - slash); -} - -StringRef -Path::getSuffix() const { - // Find the last slash - size_t slash = path.rfind('/'); - if (slash == std::string::npos) - slash = 0; - else - slash++; - - size_t dot = path.rfind('.'); - if (dot == std::string::npos || dot < slash) - return StringRef(""); - else - return StringRef(path).substr(dot + 1); -} - -bool -Path::exists() const { - DWORD attr = GetFileAttributes(path.c_str()); - return attr != INVALID_FILE_ATTRIBUTES; -} - -bool -Path::isDirectory() const { - DWORD attr = GetFileAttributes(path.c_str()); - return (attr != INVALID_FILE_ATTRIBUTES) && - (attr & FILE_ATTRIBUTE_DIRECTORY); -} - -bool -Path::isSymLink() const { - DWORD attributes = GetFileAttributes(path.c_str()); - - if (attributes == INVALID_FILE_ATTRIBUTES) - // There's no sane way to report this :(. - assert(0 && "GetFileAttributes returned INVALID_FILE_ATTRIBUTES"); - - // This isn't exactly what defines a NTFS symlink, but it is only true for - // paths that act like a symlink. - return attributes & FILE_ATTRIBUTE_REPARSE_POINT; -} - -bool -Path::canRead() const { - // FIXME: take security attributes into account. - DWORD attr = GetFileAttributes(path.c_str()); - return attr != INVALID_FILE_ATTRIBUTES; -} - -bool -Path::canWrite() const { - // FIXME: take security attributes into account. - DWORD attr = GetFileAttributes(path.c_str()); - return (attr != INVALID_FILE_ATTRIBUTES) && !(attr & FILE_ATTRIBUTE_READONLY); -} - -bool -Path::canExecute() const { - // FIXME: take security attributes into account. - DWORD attr = GetFileAttributes(path.c_str()); - return attr != INVALID_FILE_ATTRIBUTES; -} - -bool -Path::isRegularFile() const { - if (isDirectory()) - return false; - return true; -} - -StringRef -Path::getLast() const { - // Find the last slash - size_t pos = path.rfind('/'); - - // Handle the corner cases - if (pos == std::string::npos) - return path; - - // If the last character is a slash, we have a root directory - if (pos == path.length()-1) - return path; - - // Return everything after the last slash - return StringRef(path).substr(pos+1); -} - -const FileStatus * -PathWithStatus::getFileStatus(bool update, std::string *ErrStr) const { - if (!fsIsValid || update) { - WIN32_FILE_ATTRIBUTE_DATA fi; - if (!GetFileAttributesEx(path.c_str(), GetFileExInfoStandard, &fi)) { - MakeErrMsg(ErrStr, "getStatusInfo():" + std::string(path) + - ": Can't get status: "); - return 0; - } - - status.fileSize = fi.nFileSizeHigh; - status.fileSize <<= sizeof(fi.nFileSizeHigh)*8; - status.fileSize += fi.nFileSizeLow; - - status.mode = fi.dwFileAttributes & FILE_ATTRIBUTE_READONLY ? 0555 : 0777; - status.user = 9999; // Not applicable to Windows, so... - status.group = 9999; // Not applicable to Windows, so... - - // FIXME: this is only unique if the file is accessed by the same file path. - // How do we do this for C:\dir\file and ..\dir\file ? Unix has inode - // numbers, but the concept doesn't exist in Windows. - status.uniqueID = 0; - for (unsigned i = 0; i < path.length(); ++i) - status.uniqueID += path[i]; - - ULARGE_INTEGER ui; - ui.LowPart = fi.ftLastWriteTime.dwLowDateTime; - ui.HighPart = fi.ftLastWriteTime.dwHighDateTime; - status.modTime.fromWin32Time(ui.QuadPart); - - status.isDir = fi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY; - fsIsValid = true; - } - return &status; -} - -bool Path::makeReadableOnDisk(std::string* ErrMsg) { - // All files are readable on Windows (ignoring security attributes). - return false; -} - -bool Path::makeWriteableOnDisk(std::string* ErrMsg) { - DWORD attr = GetFileAttributes(path.c_str()); - - // If it doesn't exist, we're done. - if (attr == INVALID_FILE_ATTRIBUTES) - return false; - - if (attr & FILE_ATTRIBUTE_READONLY) { - if (!SetFileAttributes(path.c_str(), attr & ~FILE_ATTRIBUTE_READONLY)) { - MakeErrMsg(ErrMsg, std::string(path) + ": Can't make file writable: "); - return true; - } - } - return false; -} - -bool Path::makeExecutableOnDisk(std::string* ErrMsg) { - // All files are executable on Windows (ignoring security attributes). - return false; -} - -bool -Path::getDirectoryContents(std::set& result, std::string* ErrMsg) const { - WIN32_FILE_ATTRIBUTE_DATA fi; - if (!GetFileAttributesEx(path.c_str(), GetFileExInfoStandard, &fi)) { - MakeErrMsg(ErrMsg, path + ": can't get status of file"); - return true; - } - - if (!(fi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { - if (ErrMsg) - *ErrMsg = path + ": not a directory"; - return true; - } - - result.clear(); - WIN32_FIND_DATA fd; - std::string searchpath = path; - if (path.size() == 0 || searchpath[path.size()-1] == '/') - searchpath += "*"; - else - searchpath += "/*"; - - HANDLE h = FindFirstFile(searchpath.c_str(), &fd); - if (h == INVALID_HANDLE_VALUE) { - if (GetLastError() == ERROR_FILE_NOT_FOUND) - return true; // not really an error, now is it? - MakeErrMsg(ErrMsg, path + ": Can't read directory: "); - return true; - } - - do { - if (fd.cFileName[0] == '.') - continue; - Path aPath(path); - aPath.appendComponent(&fd.cFileName[0]); - result.insert(aPath); - } while (FindNextFile(h, &fd)); - - DWORD err = GetLastError(); - FindClose(h); - if (err != ERROR_NO_MORE_FILES) { - SetLastError(err); - MakeErrMsg(ErrMsg, path + ": Can't read directory: "); - return true; - } - return false; -} - -bool -Path::set(StringRef a_path) { - if (a_path.empty()) - return false; - std::string save(path); - path = a_path; - FlipBackSlashes(path); - if (!isValid()) { - path = save; - return false; - } - return true; -} - -bool -Path::appendComponent(StringRef name) { - if (name.empty()) - return false; - std::string save(path); - if (!path.empty()) { - size_t last = path.size() - 1; - if (path[last] != '/') - path += '/'; - } - path += name; - if (!isValid()) { - path = save; - return false; - } - return true; -} - -bool -Path::eraseComponent() { - size_t slashpos = path.rfind('/',path.size()); - if (slashpos == path.size() - 1 || slashpos == std::string::npos) - return false; - std::string save(path); - path.erase(slashpos); - if (!isValid()) { - path = save; - return false; - } - return true; -} - -bool -Path::eraseSuffix() { - size_t dotpos = path.rfind('.',path.size()); - size_t slashpos = path.rfind('/',path.size()); - if (dotpos != std::string::npos) { - if (slashpos == std::string::npos || dotpos > slashpos+1) { - std::string save(path); - path.erase(dotpos, path.size()-dotpos); - if (!isValid()) { - path = save; - return false; - } - return true; - } - } - return false; -} - -inline bool PathMsg(std::string* ErrMsg, const char* pathname, const char*msg) { - if (ErrMsg) - *ErrMsg = std::string(pathname) + ": " + std::string(msg); - return true; -} - -bool -Path::createDirectoryOnDisk(bool create_parents, std::string* ErrMsg) { - // Get a writeable copy of the path name - size_t len = path.length(); - char *pathname = reinterpret_cast(_alloca(len+2)); - path.copy(pathname, len); - pathname[len] = 0; - - // Make sure it ends with a slash. - if (len == 0 || pathname[len - 1] != '/') { - pathname[len] = '/'; - pathname[++len] = 0; - } - - // Determine starting point for initial / search. - char *next = pathname; - if (pathname[0] == '/' && pathname[1] == '/') { - // Skip host name. - next = strchr(pathname+2, '/'); - if (next == NULL) - return PathMsg(ErrMsg, pathname, "badly formed remote directory"); - - // Skip share name. - next = strchr(next+1, '/'); - if (next == NULL) - return PathMsg(ErrMsg, pathname,"badly formed remote directory"); - - next++; - if (*next == 0) - return PathMsg(ErrMsg, pathname, "badly formed remote directory"); - - } else { - if (pathname[1] == ':') - next += 2; // skip drive letter - if (*next == '/') - next++; // skip root directory - } - - // If we're supposed to create intermediate directories - if (create_parents) { - // Loop through the directory components until we're done - while (*next) { - next = strchr(next, '/'); - *next = 0; - if (!CreateDirectory(pathname, NULL) && - GetLastError() != ERROR_ALREADY_EXISTS) - return MakeErrMsg(ErrMsg, - std::string(pathname) + ": Can't create directory: "); - *next++ = '/'; - } - } else { - // Drop trailing slash. - pathname[len-1] = 0; - if (!CreateDirectory(pathname, NULL) && - GetLastError() != ERROR_ALREADY_EXISTS) { - return MakeErrMsg(ErrMsg, std::string(pathname) + - ": Can't create directory: "); - } - } - return false; -} - -bool -Path::createFileOnDisk(std::string* ErrMsg) { - // Create the file - HANDLE h = CreateFile(path.c_str(), GENERIC_WRITE, 0, NULL, CREATE_NEW, - FILE_ATTRIBUTE_NORMAL, NULL); - if (h == INVALID_HANDLE_VALUE) - return MakeErrMsg(ErrMsg, path + ": Can't create file: "); - - CloseHandle(h); - return false; -} - -bool -Path::eraseFromDisk(bool remove_contents, std::string *ErrStr) const { - WIN32_FILE_ATTRIBUTE_DATA fi; - if (!GetFileAttributesEx(path.c_str(), GetFileExInfoStandard, &fi)) - return true; - - if (fi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { - // If it doesn't exist, we're done. - if (!exists()) - return false; - - char *pathname = reinterpret_cast(_alloca(path.length()+3)); - int lastchar = path.length() - 1 ; - path.copy(pathname, lastchar+1); - - // Make path end with '/*'. - if (pathname[lastchar] != '/') - pathname[++lastchar] = '/'; - pathname[lastchar+1] = '*'; - pathname[lastchar+2] = 0; - - if (remove_contents) { - WIN32_FIND_DATA fd; - HANDLE h = FindFirstFile(pathname, &fd); - - // It's a bad idea to alter the contents of a directory while enumerating - // its contents. So build a list of its contents first, then destroy them. - - if (h != INVALID_HANDLE_VALUE) { - std::vector list; - - do { - if (strcmp(fd.cFileName, ".") == 0) - continue; - if (strcmp(fd.cFileName, "..") == 0) - continue; - - Path aPath(path); - aPath.appendComponent(&fd.cFileName[0]); - list.push_back(aPath); - } while (FindNextFile(h, &fd)); - - DWORD err = GetLastError(); - FindClose(h); - if (err != ERROR_NO_MORE_FILES) { - SetLastError(err); - return MakeErrMsg(ErrStr, path + ": Can't read directory: "); - } - - for (std::vector::iterator I = list.begin(); I != list.end(); - ++I) { - Path &aPath = *I; - aPath.eraseFromDisk(true); - } - } else { - if (GetLastError() != ERROR_FILE_NOT_FOUND) - return MakeErrMsg(ErrStr, path + ": Can't read directory: "); - } - } - - pathname[lastchar] = 0; - if (!RemoveDirectory(pathname)) - return MakeErrMsg(ErrStr, - std::string(pathname) + ": Can't destroy directory: "); - return false; - } else { - // Read-only files cannot be deleted on Windows. Must remove the read-only - // attribute first. - if (fi.dwFileAttributes & FILE_ATTRIBUTE_READONLY) { - if (!SetFileAttributes(path.c_str(), - fi.dwFileAttributes & ~FILE_ATTRIBUTE_READONLY)) - return MakeErrMsg(ErrStr, path + ": Can't destroy file: "); - } - - if (!DeleteFile(path.c_str())) - return MakeErrMsg(ErrStr, path + ": Can't destroy file: "); - return false; - } -} - -bool Path::getMagicNumber(std::string& Magic, unsigned len) const { - assert(len < 1024 && "Request for magic string too long"); - char* buf = reinterpret_cast(alloca(len)); - - HANDLE h = CreateFile(path.c_str(), - GENERIC_READ, - FILE_SHARE_READ, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - if (h == INVALID_HANDLE_VALUE) - return false; - - DWORD nRead = 0; - BOOL ret = ReadFile(h, buf, len, &nRead, NULL); - CloseHandle(h); - - if (!ret || nRead != len) - return false; - - Magic = std::string(buf, len); - return true; -} - -bool -Path::renamePathOnDisk(const Path& newName, std::string* ErrMsg) { - if (!MoveFileEx(path.c_str(), newName.c_str(), MOVEFILE_REPLACE_EXISTING)) - return MakeErrMsg(ErrMsg, "Can't move '" + path + "' to '" + newName.path - + "': "); - return false; -} - -bool -Path::setStatusInfoOnDisk(const FileStatus &si, std::string *ErrMsg) const { - // FIXME: should work on directories also. - if (!si.isFile) { - return true; - } - - HANDLE h = CreateFile(path.c_str(), - FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - if (h == INVALID_HANDLE_VALUE) - return true; - - BY_HANDLE_FILE_INFORMATION bhfi; - if (!GetFileInformationByHandle(h, &bhfi)) { - DWORD err = GetLastError(); - CloseHandle(h); - SetLastError(err); - return MakeErrMsg(ErrMsg, path + ": GetFileInformationByHandle: "); - } - - ULARGE_INTEGER ui; - ui.QuadPart = si.modTime.toWin32Time(); - FILETIME ft; - ft.dwLowDateTime = ui.LowPart; - ft.dwHighDateTime = ui.HighPart; - BOOL ret = SetFileTime(h, NULL, &ft, &ft); - DWORD err = GetLastError(); - CloseHandle(h); - if (!ret) { - SetLastError(err); - return MakeErrMsg(ErrMsg, path + ": SetFileTime: "); - } - - // Best we can do with Unix permission bits is to interpret the owner - // writable bit. - if (si.mode & 0200) { - if (bhfi.dwFileAttributes & FILE_ATTRIBUTE_READONLY) { - if (!SetFileAttributes(path.c_str(), - bhfi.dwFileAttributes & ~FILE_ATTRIBUTE_READONLY)) - return MakeErrMsg(ErrMsg, path + ": SetFileAttributes: "); - } - } else { - if (!(bhfi.dwFileAttributes & FILE_ATTRIBUTE_READONLY)) { - if (!SetFileAttributes(path.c_str(), - bhfi.dwFileAttributes | FILE_ATTRIBUTE_READONLY)) - return MakeErrMsg(ErrMsg, path + ": SetFileAttributes: "); - } - } - - return false; -} - -bool -CopyFile(const sys::Path &Dest, const sys::Path &Src, std::string* ErrMsg) { - // Can't use CopyFile macro defined in Windows.h because it would mess up the - // above line. We use the expansion it would have in a non-UNICODE build. - if (!::CopyFileA(Src.c_str(), Dest.c_str(), false)) - return MakeErrMsg(ErrMsg, "Can't copy '" + Src.str() + - "' to '" + Dest.str() + "': "); - return false; -} - -bool -Path::makeUnique(bool reuse_current, std::string* ErrMsg) { - if (reuse_current && !exists()) - return false; // File doesn't exist already, just use it! - - // Reserve space for -XXXXXX at the end. - char *FNBuffer = (char*) alloca(path.size()+8); - unsigned offset = path.size(); - path.copy(FNBuffer, offset); - - // Find a numeric suffix that isn't used by an existing file. Assume there - // won't be more than 1 million files with the same prefix. Probably a safe - // bet. - static unsigned FCounter = 0; - do { - sprintf(FNBuffer+offset, "-%06u", FCounter); - if (++FCounter > 999999) - FCounter = 0; - path = FNBuffer; - } while (exists()); - return false; -} - -bool -Path::createTemporaryFileOnDisk(bool reuse_current, std::string* ErrMsg) { - // Make this into a unique file name - makeUnique(reuse_current, ErrMsg); - - // Now go and create it - HANDLE h = CreateFile(path.c_str(), GENERIC_WRITE, 0, NULL, CREATE_NEW, - FILE_ATTRIBUTE_NORMAL, NULL); - if (h == INVALID_HANDLE_VALUE) - return MakeErrMsg(ErrMsg, path + ": can't create file"); - - CloseHandle(h); - return false; -} - -/// MapInFilePages - Not yet implemented on win32. -const char *Path::MapInFilePages(int FD, uint64_t FileSize) { - return 0; -} - -/// MapInFilePages - Not yet implemented on win32. -void Path::UnMapFilePages(const char *Base, uint64_t FileSize) { - assert(0 && "NOT IMPLEMENTED"); -} - -} -} Removed: llvm/trunk/lib/System/Win32/Process.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/Process.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Win32/Process.inc (original) +++ llvm/trunk/lib/System/Win32/Process.inc (removed) @@ -1,222 +0,0 @@ -//===- Win32/Process.cpp - Win32 Process Implementation ------- -*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file provides the Win32 specific implementation of the Process class. -// -//===----------------------------------------------------------------------===// - -#include "Win32.h" -#include -#include -#include - -#ifdef __MINGW32__ - #if (HAVE_LIBPSAPI != 1) - #error "libpsapi.a should be present" - #endif -#else - #pragma comment(lib, "psapi.lib") -#endif - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only Win32 specific code -//=== and must not be UNIX code -//===----------------------------------------------------------------------===// - -#ifdef __MINGW32__ -// This ban should be lifted when MinGW 1.0+ has defined this value. -# define _HEAPOK (-2) -#endif - -namespace llvm { -using namespace sys; - -// This function retrieves the page size using GetSystemInfo and is present -// solely so it can be called once in Process::GetPageSize to initialize the -// static variable PageSize. -inline unsigned GetPageSizeOnce() { - // NOTE: A 32-bit application running under WOW64 is supposed to use - // GetNativeSystemInfo. However, this interface is not present prior - // to Windows XP so to use it requires dynamic linking. It is not clear - // how this affects the reported page size, if at all. One could argue - // that LLVM ought to run as 64-bits on a 64-bit system, anyway. - SYSTEM_INFO info; - GetSystemInfo(&info); - return static_cast(info.dwPageSize); -} - -unsigned -Process::GetPageSize() { - static const unsigned PageSize = GetPageSizeOnce(); - return PageSize; -} - -size_t -Process::GetMallocUsage() -{ - _HEAPINFO hinfo; - hinfo._pentry = NULL; - - size_t size = 0; - - while (_heapwalk(&hinfo) == _HEAPOK) - size += hinfo._size; - - return size; -} - -size_t -Process::GetTotalMemoryUsage() -{ - PROCESS_MEMORY_COUNTERS pmc; - GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc)); - return pmc.PagefileUsage; -} - -void -Process::GetTimeUsage( - TimeValue& elapsed, TimeValue& user_time, TimeValue& sys_time) -{ - elapsed = TimeValue::now(); - - uint64_t ProcCreate, ProcExit, KernelTime, UserTime; - GetProcessTimes(GetCurrentProcess(), (FILETIME*)&ProcCreate, - (FILETIME*)&ProcExit, (FILETIME*)&KernelTime, - (FILETIME*)&UserTime); - - // FILETIME's are # of 100 nanosecond ticks (1/10th of a microsecond) - user_time.seconds( UserTime / 10000000 ); - user_time.nanoseconds( unsigned(UserTime % 10000000) * 100 ); - sys_time.seconds( KernelTime / 10000000 ); - sys_time.nanoseconds( unsigned(KernelTime % 10000000) * 100 ); -} - -int Process::GetCurrentUserId() -{ - return 65536; -} - -int Process::GetCurrentGroupId() -{ - return 65536; -} - -// Some LLVM programs such as bugpoint produce core files as a normal part of -// their operation. To prevent the disk from filling up, this configuration item -// does what's necessary to prevent their generation. -void Process::PreventCoreFiles() { - // Windows doesn't do core files, but it does do modal pop-up message - // boxes. As this method is used by bugpoint, preventing these pop-ups - // is the moral equivalent of suppressing core files. - SetErrorMode(SEM_FAILCRITICALERRORS | - SEM_NOGPFAULTERRORBOX | - SEM_NOOPENFILEERRORBOX); -} - -bool Process::StandardInIsUserInput() { - return FileDescriptorIsDisplayed(0); -} - -bool Process::StandardOutIsDisplayed() { - return FileDescriptorIsDisplayed(1); -} - -bool Process::StandardErrIsDisplayed() { - return FileDescriptorIsDisplayed(2); -} - -bool Process::FileDescriptorIsDisplayed(int fd) { - DWORD Mode; // Unused - return (GetConsoleMode((HANDLE)_get_osfhandle(fd), &Mode) != 0); -} - -unsigned Process::StandardOutColumns() { - unsigned Columns = 0; - CONSOLE_SCREEN_BUFFER_INFO csbi; - if (GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi)) - Columns = csbi.dwSize.X; - return Columns; -} - -unsigned Process::StandardErrColumns() { - unsigned Columns = 0; - CONSOLE_SCREEN_BUFFER_INFO csbi; - if (GetConsoleScreenBufferInfo(GetStdHandle(STD_ERROR_HANDLE), &csbi)) - Columns = csbi.dwSize.X; - return Columns; -} - -// It always has colors. -bool Process::StandardErrHasColors() { - return StandardErrIsDisplayed(); -} - -bool Process::StandardOutHasColors() { - return StandardOutIsDisplayed(); -} - -namespace { -class DefaultColors -{ - private: - WORD defaultColor; - public: - DefaultColors() - :defaultColor(GetCurrentColor()) {} - static unsigned GetCurrentColor() { - CONSOLE_SCREEN_BUFFER_INFO csbi; - if (GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi)) - return csbi.wAttributes; - return 0; - } - WORD operator()() const { return defaultColor; } -}; - -DefaultColors defaultColors; -} - -bool Process::ColorNeedsFlush() { - return true; -} - -const char *Process::OutputBold(bool bg) { - WORD colors = DefaultColors::GetCurrentColor(); - if (bg) - colors |= BACKGROUND_INTENSITY; - else - colors |= FOREGROUND_INTENSITY; - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), colors); - return 0; -} - -const char *Process::OutputColor(char code, bool bold, bool bg) { - WORD colors; - if (bg) { - colors = ((code&1) ? BACKGROUND_RED : 0) | - ((code&2) ? BACKGROUND_GREEN : 0 ) | - ((code&4) ? BACKGROUND_BLUE : 0); - if (bold) - colors |= BACKGROUND_INTENSITY; - } else { - colors = ((code&1) ? FOREGROUND_RED : 0) | - ((code&2) ? FOREGROUND_GREEN : 0 ) | - ((code&4) ? FOREGROUND_BLUE : 0); - if (bold) - colors |= FOREGROUND_INTENSITY; - } - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), colors); - return 0; -} - -const char *Process::ResetColor() { - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), defaultColors()); - return 0; -} - -} Removed: llvm/trunk/lib/System/Win32/Program.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/Program.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Win32/Program.inc (original) +++ llvm/trunk/lib/System/Win32/Program.inc (removed) @@ -1,412 +0,0 @@ -//===- Win32/Program.cpp - Win32 Program Implementation ------- -*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file provides the Win32 specific implementation of the Program class. -// -//===----------------------------------------------------------------------===// - -#include "Win32.h" -#include -#include -#include -#include - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only Win32 specific code -//=== and must not be UNIX code -//===----------------------------------------------------------------------===// - -#ifdef __MINGW32__ -// Ancient mingw32's w32api might not have this declaration. -extern "C" -BOOL WINAPI SetInformationJobObject(HANDLE hJob, - JOBOBJECTINFOCLASS JobObjectInfoClass, - LPVOID lpJobObjectInfo, - DWORD cbJobObjectInfoLength); -#endif - -namespace { - struct Win32ProcessInfo { - HANDLE hProcess; - DWORD dwProcessId; - }; -} - -namespace llvm { -using namespace sys; - -Program::Program() : Data_(0) {} - -Program::~Program() { - if (Data_) { - Win32ProcessInfo* wpi = reinterpret_cast(Data_); - CloseHandle(wpi->hProcess); - delete wpi; - Data_ = 0; - } -} - -unsigned Program::GetPid() const { - Win32ProcessInfo* wpi = reinterpret_cast(Data_); - return wpi->dwProcessId; -} - -// This function just uses the PATH environment variable to find the program. -Path -Program::FindProgramByName(const std::string& progName) { - - // Check some degenerate cases - if (progName.length() == 0) // no program - return Path(); - Path temp; - if (!temp.set(progName)) // invalid name - return Path(); - // Return paths with slashes verbatim. - if (progName.find('\\') != std::string::npos || - progName.find('/') != std::string::npos) - return temp; - - // At this point, the file name is valid and does not contain slashes. - // Let Windows search for it. - char buffer[MAX_PATH]; - char *dummy = NULL; - DWORD len = SearchPath(NULL, progName.c_str(), ".exe", MAX_PATH, - buffer, &dummy); - - // See if it wasn't found. - if (len == 0) - return Path(); - - // See if we got the entire path. - if (len < MAX_PATH) - return Path(buffer); - - // Buffer was too small; grow and retry. - while (true) { - char *b = reinterpret_cast(_alloca(len+1)); - DWORD len2 = SearchPath(NULL, progName.c_str(), ".exe", len+1, b, &dummy); - - // It is unlikely the search failed, but it's always possible some file - // was added or removed since the last search, so be paranoid... - if (len2 == 0) - return Path(); - else if (len2 <= len) - return Path(b); - - len = len2; - } -} - -static HANDLE RedirectIO(const Path *path, int fd, std::string* ErrMsg) { - HANDLE h; - if (path == 0) { - DuplicateHandle(GetCurrentProcess(), (HANDLE)_get_osfhandle(fd), - GetCurrentProcess(), &h, - 0, TRUE, DUPLICATE_SAME_ACCESS); - return h; - } - - const char *fname; - if (path->isEmpty()) - fname = "NUL"; - else - fname = path->c_str(); - - SECURITY_ATTRIBUTES sa; - sa.nLength = sizeof(sa); - sa.lpSecurityDescriptor = 0; - sa.bInheritHandle = TRUE; - - h = CreateFile(fname, fd ? GENERIC_WRITE : GENERIC_READ, FILE_SHARE_READ, - &sa, fd == 0 ? OPEN_EXISTING : CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, NULL); - if (h == INVALID_HANDLE_VALUE) { - MakeErrMsg(ErrMsg, std::string(fname) + ": Can't open file for " + - (fd ? "input: " : "output: ")); - } - - return h; -} - -/// ArgNeedsQuotes - Check whether argument needs to be quoted when calling -/// CreateProcess. -static bool ArgNeedsQuotes(const char *Str) { - return Str[0] == '\0' || strchr(Str, ' ') != 0; -} - - -/// ArgLenWithQuotes - Check whether argument needs to be quoted when calling -/// CreateProcess and returns length of quoted arg with escaped quotes -static unsigned int ArgLenWithQuotes(const char *Str) { - unsigned int len = ArgNeedsQuotes(Str) ? 2 : 0; - - while (*Str != '\0') { - if (*Str == '\"') - ++len; - - ++len; - ++Str; - } - - return len; -} - - -bool -Program::Execute(const Path& path, - const char** args, - const char** envp, - const Path** redirects, - unsigned memoryLimit, - std::string* ErrMsg) { - if (Data_) { - Win32ProcessInfo* wpi = reinterpret_cast(Data_); - CloseHandle(wpi->hProcess); - delete wpi; - Data_ = 0; - } - - if (!path.canExecute()) { - if (ErrMsg) - *ErrMsg = "program not executable"; - return false; - } - - // Windows wants a command line, not an array of args, to pass to the new - // process. We have to concatenate them all, while quoting the args that - // have embedded spaces (or are empty). - - // First, determine the length of the command line. - unsigned len = 0; - for (unsigned i = 0; args[i]; i++) { - len += ArgLenWithQuotes(args[i]) + 1; - } - - // Now build the command line. - char *command = reinterpret_cast(_alloca(len+1)); - char *p = command; - - for (unsigned i = 0; args[i]; i++) { - const char *arg = args[i]; - - bool needsQuoting = ArgNeedsQuotes(arg); - if (needsQuoting) - *p++ = '"'; - - while (*arg != '\0') { - if (*arg == '\"') - *p++ = '\\'; - - *p++ = *arg++; - } - - if (needsQuoting) - *p++ = '"'; - *p++ = ' '; - } - - *p = 0; - - // The pointer to the environment block for the new process. - char *envblock = 0; - - if (envp) { - // An environment block consists of a null-terminated block of - // null-terminated strings. Convert the array of environment variables to - // an environment block by concatenating them. - - // First, determine the length of the environment block. - len = 0; - for (unsigned i = 0; envp[i]; i++) - len += strlen(envp[i]) + 1; - - // Now build the environment block. - envblock = reinterpret_cast(_alloca(len+1)); - p = envblock; - - for (unsigned i = 0; envp[i]; i++) { - const char *ev = envp[i]; - size_t len = strlen(ev) + 1; - memcpy(p, ev, len); - p += len; - } - - *p = 0; - } - - // Create a child process. - STARTUPINFO si; - memset(&si, 0, sizeof(si)); - si.cb = sizeof(si); - si.hStdInput = INVALID_HANDLE_VALUE; - si.hStdOutput = INVALID_HANDLE_VALUE; - si.hStdError = INVALID_HANDLE_VALUE; - - if (redirects) { - si.dwFlags = STARTF_USESTDHANDLES; - - si.hStdInput = RedirectIO(redirects[0], 0, ErrMsg); - if (si.hStdInput == INVALID_HANDLE_VALUE) { - MakeErrMsg(ErrMsg, "can't redirect stdin"); - return false; - } - si.hStdOutput = RedirectIO(redirects[1], 1, ErrMsg); - if (si.hStdOutput == INVALID_HANDLE_VALUE) { - CloseHandle(si.hStdInput); - MakeErrMsg(ErrMsg, "can't redirect stdout"); - return false; - } - if (redirects[1] && redirects[2] && *(redirects[1]) == *(redirects[2])) { - // If stdout and stderr should go to the same place, redirect stderr - // to the handle already open for stdout. - DuplicateHandle(GetCurrentProcess(), si.hStdOutput, - GetCurrentProcess(), &si.hStdError, - 0, TRUE, DUPLICATE_SAME_ACCESS); - } else { - // Just redirect stderr - si.hStdError = RedirectIO(redirects[2], 2, ErrMsg); - if (si.hStdError == INVALID_HANDLE_VALUE) { - CloseHandle(si.hStdInput); - CloseHandle(si.hStdOutput); - MakeErrMsg(ErrMsg, "can't redirect stderr"); - return false; - } - } - } - - PROCESS_INFORMATION pi; - memset(&pi, 0, sizeof(pi)); - - fflush(stdout); - fflush(stderr); - BOOL rc = CreateProcess(path.c_str(), command, NULL, NULL, TRUE, 0, - envblock, NULL, &si, &pi); - DWORD err = GetLastError(); - - // Regardless of whether the process got created or not, we are done with - // the handles we created for it to inherit. - CloseHandle(si.hStdInput); - CloseHandle(si.hStdOutput); - CloseHandle(si.hStdError); - - // Now return an error if the process didn't get created. - if (!rc) { - SetLastError(err); - MakeErrMsg(ErrMsg, std::string("Couldn't execute program '") + - path.str() + "'"); - return false; - } - Win32ProcessInfo* wpi = new Win32ProcessInfo; - wpi->hProcess = pi.hProcess; - wpi->dwProcessId = pi.dwProcessId; - Data_ = wpi; - - // Make sure these get closed no matter what. - AutoHandle hThread(pi.hThread); - - // Assign the process to a job if a memory limit is defined. - AutoHandle hJob(0); - if (memoryLimit != 0) { - hJob = CreateJobObject(0, 0); - bool success = false; - if (hJob != 0) { - JOBOBJECT_EXTENDED_LIMIT_INFORMATION jeli; - memset(&jeli, 0, sizeof(jeli)); - jeli.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_PROCESS_MEMORY; - jeli.ProcessMemoryLimit = uintptr_t(memoryLimit) * 1048576; - if (SetInformationJobObject(hJob, JobObjectExtendedLimitInformation, - &jeli, sizeof(jeli))) { - if (AssignProcessToJobObject(hJob, pi.hProcess)) - success = true; - } - } - if (!success) { - SetLastError(GetLastError()); - MakeErrMsg(ErrMsg, std::string("Unable to set memory limit")); - TerminateProcess(pi.hProcess, 1); - WaitForSingleObject(pi.hProcess, INFINITE); - return false; - } - } - - return true; -} - -int -Program::Wait(const Path &path, - unsigned secondsToWait, - std::string* ErrMsg) { - if (Data_ == 0) { - MakeErrMsg(ErrMsg, "Process not started!"); - return -1; - } - - Win32ProcessInfo* wpi = reinterpret_cast(Data_); - HANDLE hProcess = wpi->hProcess; - - // Wait for the process to terminate. - DWORD millisecondsToWait = INFINITE; - if (secondsToWait > 0) - millisecondsToWait = secondsToWait * 1000; - - if (WaitForSingleObject(hProcess, millisecondsToWait) == WAIT_TIMEOUT) { - if (!TerminateProcess(hProcess, 1)) { - MakeErrMsg(ErrMsg, "Failed to terminate timed-out program."); - return -1; - } - WaitForSingleObject(hProcess, INFINITE); - } - - // Get its exit status. - DWORD status; - BOOL rc = GetExitCodeProcess(hProcess, &status); - DWORD err = GetLastError(); - - if (!rc) { - SetLastError(err); - MakeErrMsg(ErrMsg, "Failed getting status for program."); - return -1; - } - - return status; -} - -bool -Program::Kill(std::string* ErrMsg) { - if (Data_ == 0) { - MakeErrMsg(ErrMsg, "Process not started!"); - return true; - } - - Win32ProcessInfo* wpi = reinterpret_cast(Data_); - HANDLE hProcess = wpi->hProcess; - if (TerminateProcess(hProcess, 1) == 0) { - MakeErrMsg(ErrMsg, "The process couldn't be killed!"); - return true; - } - - return false; -} - -bool Program::ChangeStdinToBinary(){ - int result = _setmode( _fileno(stdin), _O_BINARY ); - return result == -1; -} - -bool Program::ChangeStdoutToBinary(){ - int result = _setmode( _fileno(stdout), _O_BINARY ); - return result == -1; -} - -bool Program::ChangeStderrToBinary(){ - int result = _setmode( _fileno(stderr), _O_BINARY ); - return result == -1; -} - -} Removed: llvm/trunk/lib/System/Win32/RWMutex.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/RWMutex.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Win32/RWMutex.inc (original) +++ llvm/trunk/lib/System/Win32/RWMutex.inc (removed) @@ -1,58 +0,0 @@ -//= llvm/System/Win32/Mutex.inc - Win32 Reader/Writer Mutual Exclusion Lock =// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the Win32 specific (non-pthread) RWMutex class. -// -//===----------------------------------------------------------------------===// - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only generic Win32 code that -//=== is guaranteed to work on *all* Win32 variants. -//===----------------------------------------------------------------------===// - -#include "Win32.h" - -// FIXME: Windows does not have reader-writer locks pre-Vista. If you want -// real reader-writer locks, you a pthreads implementation for Windows. - -namespace llvm { -using namespace sys; - -RWMutexImpl::RWMutexImpl() { - data_ = calloc(1, sizeof(CRITICAL_SECTION)); - InitializeCriticalSection(static_cast(data_)); -} - -RWMutexImpl::~RWMutexImpl() { - DeleteCriticalSection(static_cast(data_)); - free(data_); -} - -bool RWMutexImpl::reader_acquire() { - EnterCriticalSection(static_cast(data_)); - return true; -} - -bool RWMutexImpl::reader_release() { - LeaveCriticalSection(static_cast(data_)); - return true; -} - -bool RWMutexImpl::writer_acquire() { - EnterCriticalSection(static_cast(data_)); - return true; -} - -bool RWMutexImpl::writer_release() { - LeaveCriticalSection(static_cast(data_)); - return true; -} - - -} Removed: llvm/trunk/lib/System/Win32/Signals.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/Signals.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Win32/Signals.inc (original) +++ llvm/trunk/lib/System/Win32/Signals.inc (removed) @@ -1,326 +0,0 @@ -//===- Win32/Signals.cpp - Win32 Signals Implementation ---------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file provides the Win32 specific implementation of the Signals class. -// -//===----------------------------------------------------------------------===// - -#include "Win32.h" -#include -#include -#include - -#ifdef __MINGW32__ - #include -#else - #include -#endif -#include - -#ifdef __MINGW32__ - #if ((HAVE_LIBIMAGEHLP != 1) || (HAVE_LIBPSAPI != 1)) - #error "libimagehlp.a & libpsapi.a should be present" - #endif -#else - #pragma comment(lib, "psapi.lib") - #pragma comment(lib, "dbghelp.lib") -#endif - -// Forward declare. -static LONG WINAPI LLVMUnhandledExceptionFilter(LPEXCEPTION_POINTERS ep); -static BOOL WINAPI LLVMConsoleCtrlHandler(DWORD dwCtrlType); - -// InterruptFunction - The function to call if ctrl-c is pressed. -static void (*InterruptFunction)() = 0; - -static std::vector *FilesToRemove = NULL; -static std::vector > *CallBacksToRun = 0; -static bool RegisteredUnhandledExceptionFilter = false; -static bool CleanupExecuted = false; -static bool ExitOnUnhandledExceptions = false; -static PTOP_LEVEL_EXCEPTION_FILTER OldFilter = NULL; - -// Windows creates a new thread to execute the console handler when an event -// (such as CTRL/C) occurs. This causes concurrency issues with the above -// globals which this critical section addresses. -static CRITICAL_SECTION CriticalSection; - -namespace llvm { - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only Win32 specific code -//=== and must not be UNIX code -//===----------------------------------------------------------------------===// - -#ifdef _MSC_VER -/// CRTReportHook - Function called on a CRT debugging event. -static int CRTReportHook(int ReportType, char *Message, int *Return) { - // Don't cause a DebugBreak() on return. - if (Return) - *Return = 0; - - switch (ReportType) { - default: - case _CRT_ASSERT: - fprintf(stderr, "CRT assert: %s\n", Message); - // FIXME: Is there a way to just crash? Perhaps throw to the unhandled - // exception code? Perhaps SetErrorMode() handles this. - _exit(3); - break; - case _CRT_ERROR: - fprintf(stderr, "CRT error: %s\n", Message); - // FIXME: Is there a way to just crash? Perhaps throw to the unhandled - // exception code? Perhaps SetErrorMode() handles this. - _exit(3); - break; - case _CRT_WARN: - fprintf(stderr, "CRT warn: %s\n", Message); - break; - } - - // Don't call _CrtDbgReport. - return TRUE; -} -#endif - -static void RegisterHandler() { - if (RegisteredUnhandledExceptionFilter) { - EnterCriticalSection(&CriticalSection); - return; - } - - // Now's the time to create the critical section. This is the first time - // through here, and there's only one thread. - InitializeCriticalSection(&CriticalSection); - - // Enter it immediately. Now if someone hits CTRL/C, the console handler - // can't proceed until the globals are updated. - EnterCriticalSection(&CriticalSection); - - RegisteredUnhandledExceptionFilter = true; - OldFilter = SetUnhandledExceptionFilter(LLVMUnhandledExceptionFilter); - SetConsoleCtrlHandler(LLVMConsoleCtrlHandler, TRUE); - - // Environment variable to disable any kind of crash dialog. - if (getenv("LLVM_DISABLE_CRT_DEBUG")) { -#ifdef _MSC_VER - _CrtSetReportHook(CRTReportHook); -#endif - ExitOnUnhandledExceptions = true; - } - - // IMPORTANT NOTE: Caller must call LeaveCriticalSection(&CriticalSection) or - // else multi-threading problems will ensue. -} - -// RemoveFileOnSignal - The public API -bool sys::RemoveFileOnSignal(const sys::Path &Filename, std::string* ErrMsg) { - RegisterHandler(); - - if (CleanupExecuted) { - if (ErrMsg) - *ErrMsg = "Process terminating -- cannot register for removal"; - return true; - } - - if (FilesToRemove == NULL) - FilesToRemove = new std::vector; - - FilesToRemove->push_back(Filename); - - LeaveCriticalSection(&CriticalSection); - return false; -} - -// DontRemoveFileOnSignal - The public API -void sys::DontRemoveFileOnSignal(const sys::Path &Filename) { - if (FilesToRemove == NULL) - return; - - RegisterHandler(); - - FilesToRemove->push_back(Filename); - std::vector::reverse_iterator I = - std::find(FilesToRemove->rbegin(), FilesToRemove->rend(), Filename); - if (I != FilesToRemove->rend()) - FilesToRemove->erase(I.base()-1); - - LeaveCriticalSection(&CriticalSection); -} - -/// PrintStackTraceOnErrorSignal - When an error signal (such as SIBABRT or -/// SIGSEGV) is delivered to the process, print a stack trace and then exit. -void sys::PrintStackTraceOnErrorSignal() { - RegisterHandler(); - LeaveCriticalSection(&CriticalSection); -} - - -void sys::SetInterruptFunction(void (*IF)()) { - RegisterHandler(); - InterruptFunction = IF; - LeaveCriticalSection(&CriticalSection); -} - - -/// AddSignalHandler - Add a function to be called when a signal is delivered -/// to the process. The handler can have a cookie passed to it to identify -/// what instance of the handler it is. -void sys::AddSignalHandler(void (*FnPtr)(void *), void *Cookie) { - if (CallBacksToRun == 0) - CallBacksToRun = new std::vector >(); - CallBacksToRun->push_back(std::make_pair(FnPtr, Cookie)); - RegisterHandler(); - LeaveCriticalSection(&CriticalSection); -} -} - -static void Cleanup() { - EnterCriticalSection(&CriticalSection); - - // Prevent other thread from registering new files and directories for - // removal, should we be executing because of the console handler callback. - CleanupExecuted = true; - - // FIXME: open files cannot be deleted. - - if (FilesToRemove != NULL) - while (!FilesToRemove->empty()) { - FilesToRemove->back().eraseFromDisk(); - FilesToRemove->pop_back(); - } - - if (CallBacksToRun) - for (unsigned i = 0, e = CallBacksToRun->size(); i != e; ++i) - (*CallBacksToRun)[i].first((*CallBacksToRun)[i].second); - - LeaveCriticalSection(&CriticalSection); -} - -void llvm::sys::RunInterruptHandlers() { - Cleanup(); -} - -static LONG WINAPI LLVMUnhandledExceptionFilter(LPEXCEPTION_POINTERS ep) { - Cleanup(); - -#ifdef _WIN64 - // TODO: provide a x64 friendly version of the following -#else - - // Initialize the STACKFRAME structure. - STACKFRAME StackFrame; - memset(&StackFrame, 0, sizeof(StackFrame)); - - StackFrame.AddrPC.Offset = ep->ContextRecord->Eip; - StackFrame.AddrPC.Mode = AddrModeFlat; - StackFrame.AddrStack.Offset = ep->ContextRecord->Esp; - StackFrame.AddrStack.Mode = AddrModeFlat; - StackFrame.AddrFrame.Offset = ep->ContextRecord->Ebp; - StackFrame.AddrFrame.Mode = AddrModeFlat; - - HANDLE hProcess = GetCurrentProcess(); - HANDLE hThread = GetCurrentThread(); - - // Initialize the symbol handler. - SymSetOptions(SYMOPT_DEFERRED_LOADS|SYMOPT_LOAD_LINES); - SymInitialize(hProcess, NULL, TRUE); - - while (true) { - if (!StackWalk(IMAGE_FILE_MACHINE_I386, hProcess, hThread, &StackFrame, - ep->ContextRecord, NULL, SymFunctionTableAccess, - SymGetModuleBase, NULL)) { - break; - } - - if (StackFrame.AddrFrame.Offset == 0) - break; - - // Print the PC in hexadecimal. - DWORD PC = StackFrame.AddrPC.Offset; - fprintf(stderr, "%08lX", PC); - - // Print the parameters. Assume there are four. - fprintf(stderr, " (0x%08lX 0x%08lX 0x%08lX 0x%08lX)", - StackFrame.Params[0], - StackFrame.Params[1], StackFrame.Params[2], StackFrame.Params[3]); - - // Verify the PC belongs to a module in this process. - if (!SymGetModuleBase(hProcess, PC)) { - fputs(" \n", stderr); - continue; - } - - // Print the symbol name. - char buffer[512]; - IMAGEHLP_SYMBOL *symbol = reinterpret_cast(buffer); - memset(symbol, 0, sizeof(IMAGEHLP_SYMBOL)); - symbol->SizeOfStruct = sizeof(IMAGEHLP_SYMBOL); - symbol->MaxNameLength = 512 - sizeof(IMAGEHLP_SYMBOL); - - DWORD dwDisp; - if (!SymGetSymFromAddr(hProcess, PC, &dwDisp, symbol)) { - fputc('\n', stderr); - continue; - } - - buffer[511] = 0; - if (dwDisp > 0) - fprintf(stderr, ", %s()+%04lu bytes(s)", symbol->Name, dwDisp); - else - fprintf(stderr, ", %s", symbol->Name); - - // Print the source file and line number information. - IMAGEHLP_LINE line; - memset(&line, 0, sizeof(line)); - line.SizeOfStruct = sizeof(line); - if (SymGetLineFromAddr(hProcess, PC, &dwDisp, &line)) { - fprintf(stderr, ", %s, line %lu", line.FileName, line.LineNumber); - if (dwDisp > 0) - fprintf(stderr, "+%04lu byte(s)", dwDisp); - } - - fputc('\n', stderr); - } - -#endif - - if (ExitOnUnhandledExceptions) - _exit(-3); - - // Allow dialog box to pop up allowing choice to start debugger. - if (OldFilter) - return (*OldFilter)(ep); - else - return EXCEPTION_CONTINUE_SEARCH; -} - -static BOOL WINAPI LLVMConsoleCtrlHandler(DWORD dwCtrlType) { - // We are running in our very own thread, courtesy of Windows. - EnterCriticalSection(&CriticalSection); - Cleanup(); - - // If an interrupt function has been set, go and run one it; otherwise, - // the process dies. - void (*IF)() = InterruptFunction; - InterruptFunction = 0; // Don't run it on another CTRL-C. - - if (IF) { - // Note: if the interrupt function throws an exception, there is nothing - // to catch it in this thread so it will kill the process. - IF(); // Run it now. - LeaveCriticalSection(&CriticalSection); - return TRUE; // Don't kill the process. - } - - // Allow normal processing to take place; i.e., the process dies. - LeaveCriticalSection(&CriticalSection); - return FALSE; -} - Removed: llvm/trunk/lib/System/Win32/ThreadLocal.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/ThreadLocal.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Win32/ThreadLocal.inc (original) +++ llvm/trunk/lib/System/Win32/ThreadLocal.inc (removed) @@ -1,54 +0,0 @@ -//= llvm/System/Win32/ThreadLocal.inc - Win32 Thread Local Data -*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the Win32 specific (non-pthread) ThreadLocal class. -// -//===----------------------------------------------------------------------===// - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only generic Win32 code that -//=== is guaranteed to work on *all* Win32 variants. -//===----------------------------------------------------------------------===// - -#include "Win32.h" -#include "llvm/System/ThreadLocal.h" - -namespace llvm { -using namespace sys; - -ThreadLocalImpl::ThreadLocalImpl() { - DWORD* tls = new DWORD; - *tls = TlsAlloc(); - assert(*tls != TLS_OUT_OF_INDEXES); - data = tls; -} - -ThreadLocalImpl::~ThreadLocalImpl() { - DWORD* tls = static_cast(data); - TlsFree(*tls); - delete tls; -} - -const void* ThreadLocalImpl::getInstance() { - DWORD* tls = static_cast(data); - return TlsGetValue(*tls); -} - -void ThreadLocalImpl::setInstance(const void* d){ - DWORD* tls = static_cast(data); - int errorcode = TlsSetValue(*tls, const_cast(d)); - assert(errorcode != 0); - (void)errorcode; -} - -void ThreadLocalImpl::removeInstance() { - setInstance(0); -} - -} Removed: llvm/trunk/lib/System/Win32/TimeValue.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/TimeValue.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Win32/TimeValue.inc (original) +++ llvm/trunk/lib/System/Win32/TimeValue.inc (removed) @@ -1,51 +0,0 @@ -//===- Win32/TimeValue.cpp - Win32 TimeValue Implementation -----*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file provides the Win32 implementation of the TimeValue class. -// -//===----------------------------------------------------------------------===// - -#include "Win32.h" -#include - -namespace llvm { -using namespace sys; - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only Win32 specific code. -//===----------------------------------------------------------------------===// - -TimeValue TimeValue::now() { - uint64_t ft; - GetSystemTimeAsFileTime(reinterpret_cast(&ft)); - - TimeValue t(0, 0); - t.fromWin32Time(ft); - return t; -} - -std::string TimeValue::str() const { -#ifdef __MINGW32__ - // This ban may be lifted by either: - // (i) a future MinGW version other than 1.0 inherents the __time64_t type, or - // (ii) configure tests for either the time_t or __time64_t type. - time_t ourTime = time_t(this->toEpochTime()); - struct tm *lt = ::localtime(&ourTime); -#else - __time64_t ourTime = this->toEpochTime(); - struct tm *lt = ::_localtime64(&ourTime); -#endif - - char buffer[25]; - strftime(buffer, 25, "%a %b %d %H:%M:%S %Y", lt); - return std::string(buffer); -} - - -} Removed: llvm/trunk/lib/System/Win32/Win32.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/Win32.h?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Win32/Win32.h (original) +++ llvm/trunk/lib/System/Win32/Win32.h (removed) @@ -1,60 +0,0 @@ -//===- Win32/Win32.h - Common Win32 Include File ----------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file defines things specific to Win32 implementations. -// -//===----------------------------------------------------------------------===// - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only generic Win32 code that -//=== is guaranteed to work on *all* Win32 variants. -//===----------------------------------------------------------------------===// - -// Require at least Windows 2000 API. -#define _WIN32_WINNT 0x0500 -#define _WIN32_IE 0x0500 // MinGW at it again. -#define WIN32_LEAN_AND_MEAN - -#include "llvm/Config/config.h" // Get build system configuration settings -#include -#include -#include -#include - -inline bool MakeErrMsg(std::string* ErrMsg, const std::string& prefix) { - if (!ErrMsg) - return true; - char *buffer = NULL; - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, - NULL, GetLastError(), 0, (LPSTR)&buffer, 1, NULL); - *ErrMsg = prefix + buffer; - LocalFree(buffer); - return true; -} - -class AutoHandle { - HANDLE handle; - -public: - AutoHandle(HANDLE h) : handle(h) {} - - ~AutoHandle() { - if (handle) - CloseHandle(handle); - } - - operator HANDLE() { - return handle; - } - - AutoHandle &operator=(HANDLE h) { - handle = h; - return *this; - } -}; Removed: llvm/trunk/lib/System/Win32/system_error.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/system_error.inc?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/Win32/system_error.inc (original) +++ llvm/trunk/lib/System/Win32/system_error.inc (removed) @@ -1,140 +0,0 @@ -//===- llvm/System/Win32/system_error.inc - Windows error_code --*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file provides the Windows specific implementation of the error_code -// and error_condition classes. -// -//===----------------------------------------------------------------------===// - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only generic Windows code that -//=== is guaranteed to work on *all* Windows variants. -//===----------------------------------------------------------------------===// - -#include -#include - -using namespace llvm; - -std::string -_system_error_category::message(int ev) const { - LPVOID lpMsgBuf = 0; - DWORD retval = ::FormatMessageA( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - ev, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - (LPSTR) &lpMsgBuf, - 0, - NULL); - if (retval == 0) { - ::LocalFree(lpMsgBuf); - return std::string("Unknown error"); - } - - std::string str( static_cast(lpMsgBuf) ); - ::LocalFree(lpMsgBuf); - - while (str.size() - && (str[str.size()-1] == '\n' || str[str.size()-1] == '\r')) - str.erase( str.size()-1 ); - if (str.size() && str[str.size()-1] == '.') - str.erase( str.size()-1 ); - return str; -} - -// I'd rather not double the line count of the following. -#define MAP_ERR_TO_COND(x, y) case x: return make_error_condition(errc::y) - -error_condition -_system_error_category::default_error_condition(int ev) const { - switch (ev) { - MAP_ERR_TO_COND(0, success); - // Windows system -> posix_errno decode table ---------------------------// - // see WinError.h comments for descriptions of errors - MAP_ERR_TO_COND(ERROR_ACCESS_DENIED, permission_denied); - MAP_ERR_TO_COND(ERROR_ALREADY_EXISTS, file_exists); - MAP_ERR_TO_COND(ERROR_BAD_UNIT, no_such_device); - MAP_ERR_TO_COND(ERROR_BUFFER_OVERFLOW, filename_too_long); - MAP_ERR_TO_COND(ERROR_BUSY, device_or_resource_busy); - MAP_ERR_TO_COND(ERROR_BUSY_DRIVE, device_or_resource_busy); - MAP_ERR_TO_COND(ERROR_CANNOT_MAKE, permission_denied); - MAP_ERR_TO_COND(ERROR_CANTOPEN, io_error); - MAP_ERR_TO_COND(ERROR_CANTREAD, io_error); - MAP_ERR_TO_COND(ERROR_CANTWRITE, io_error); - MAP_ERR_TO_COND(ERROR_CURRENT_DIRECTORY, permission_denied); - MAP_ERR_TO_COND(ERROR_DEV_NOT_EXIST, no_such_device); - MAP_ERR_TO_COND(ERROR_DEVICE_IN_USE, device_or_resource_busy); - MAP_ERR_TO_COND(ERROR_DIR_NOT_EMPTY, directory_not_empty); - MAP_ERR_TO_COND(ERROR_DIRECTORY, invalid_argument); - MAP_ERR_TO_COND(ERROR_DISK_FULL, no_space_on_device); - MAP_ERR_TO_COND(ERROR_FILE_EXISTS, file_exists); - MAP_ERR_TO_COND(ERROR_FILE_NOT_FOUND, no_such_file_or_directory); - MAP_ERR_TO_COND(ERROR_HANDLE_DISK_FULL, no_space_on_device); - MAP_ERR_TO_COND(ERROR_INVALID_ACCESS, permission_denied); - MAP_ERR_TO_COND(ERROR_INVALID_DRIVE, no_such_device); - MAP_ERR_TO_COND(ERROR_INVALID_FUNCTION, function_not_supported); - MAP_ERR_TO_COND(ERROR_INVALID_HANDLE, invalid_argument); - MAP_ERR_TO_COND(ERROR_INVALID_NAME, invalid_argument); - MAP_ERR_TO_COND(ERROR_LOCK_VIOLATION, no_lock_available); - MAP_ERR_TO_COND(ERROR_LOCKED, no_lock_available); - MAP_ERR_TO_COND(ERROR_NEGATIVE_SEEK, invalid_argument); - MAP_ERR_TO_COND(ERROR_NOACCESS, permission_denied); - MAP_ERR_TO_COND(ERROR_NOT_ENOUGH_MEMORY, not_enough_memory); - MAP_ERR_TO_COND(ERROR_NOT_READY, resource_unavailable_try_again); - MAP_ERR_TO_COND(ERROR_NOT_SAME_DEVICE, cross_device_link); - MAP_ERR_TO_COND(ERROR_OPEN_FAILED, io_error); - MAP_ERR_TO_COND(ERROR_OPEN_FILES, device_or_resource_busy); - MAP_ERR_TO_COND(ERROR_OPERATION_ABORTED, operation_canceled); - MAP_ERR_TO_COND(ERROR_OUTOFMEMORY, not_enough_memory); - MAP_ERR_TO_COND(ERROR_PATH_NOT_FOUND, no_such_file_or_directory); - MAP_ERR_TO_COND(ERROR_READ_FAULT, io_error); - MAP_ERR_TO_COND(ERROR_RETRY, resource_unavailable_try_again); - MAP_ERR_TO_COND(ERROR_SEEK, io_error); - MAP_ERR_TO_COND(ERROR_SHARING_VIOLATION, permission_denied); - MAP_ERR_TO_COND(ERROR_TOO_MANY_OPEN_FILES, too_many_files_open); - MAP_ERR_TO_COND(ERROR_WRITE_FAULT, io_error); - MAP_ERR_TO_COND(ERROR_WRITE_PROTECT, permission_denied); - MAP_ERR_TO_COND(ERROR_SEM_TIMEOUT, timed_out); - MAP_ERR_TO_COND(WSAEACCES, permission_denied); - MAP_ERR_TO_COND(WSAEADDRINUSE, address_in_use); - MAP_ERR_TO_COND(WSAEADDRNOTAVAIL, address_not_available); - MAP_ERR_TO_COND(WSAEAFNOSUPPORT, address_family_not_supported); - MAP_ERR_TO_COND(WSAEALREADY, connection_already_in_progress); - MAP_ERR_TO_COND(WSAEBADF, bad_file_descriptor); - MAP_ERR_TO_COND(WSAECONNABORTED, connection_aborted); - MAP_ERR_TO_COND(WSAECONNREFUSED, connection_refused); - MAP_ERR_TO_COND(WSAECONNRESET, connection_reset); - MAP_ERR_TO_COND(WSAEDESTADDRREQ, destination_address_required); - MAP_ERR_TO_COND(WSAEFAULT, bad_address); - MAP_ERR_TO_COND(WSAEHOSTUNREACH, host_unreachable); - MAP_ERR_TO_COND(WSAEINPROGRESS, operation_in_progress); - MAP_ERR_TO_COND(WSAEINTR, interrupted); - MAP_ERR_TO_COND(WSAEINVAL, invalid_argument); - MAP_ERR_TO_COND(WSAEISCONN, already_connected); - MAP_ERR_TO_COND(WSAEMFILE, too_many_files_open); - MAP_ERR_TO_COND(WSAEMSGSIZE, message_size); - MAP_ERR_TO_COND(WSAENAMETOOLONG, filename_too_long); - MAP_ERR_TO_COND(WSAENETDOWN, network_down); - MAP_ERR_TO_COND(WSAENETRESET, network_reset); - MAP_ERR_TO_COND(WSAENETUNREACH, network_unreachable); - MAP_ERR_TO_COND(WSAENOBUFS, no_buffer_space); - MAP_ERR_TO_COND(WSAENOPROTOOPT, no_protocol_option); - MAP_ERR_TO_COND(WSAENOTCONN, not_connected); - MAP_ERR_TO_COND(WSAENOTSOCK, not_a_socket); - MAP_ERR_TO_COND(WSAEOPNOTSUPP, operation_not_supported); - MAP_ERR_TO_COND(WSAEPROTONOSUPPORT, protocol_not_supported); - MAP_ERR_TO_COND(WSAEPROTOTYPE, wrong_protocol_type); - MAP_ERR_TO_COND(WSAETIMEDOUT, timed_out); - MAP_ERR_TO_COND(WSAEWOULDBLOCK, operation_would_block); - default: return error_condition(ev, system_category()); - } -} Removed: llvm/trunk/lib/System/system_error.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/system_error.cpp?rev=120297&view=auto ============================================================================== --- llvm/trunk/lib/System/system_error.cpp (original) +++ llvm/trunk/lib/System/system_error.cpp (removed) @@ -1,121 +0,0 @@ -//===---------------------- system_error.cpp ------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This was lifted from libc++ and modified for C++03. -// -//===----------------------------------------------------------------------===// - -#include "llvm/System/system_error.h" -#include "llvm/System/Errno.h" -#include -#include - -namespace llvm { - -// class error_category - -error_category::error_category() { -} - -error_category::~error_category() { -} - -error_condition -error_category::default_error_condition(int ev) const { - return error_condition(ev, *this); -} - -bool -error_category::equivalent(int code, const error_condition& condition) const { - return default_error_condition(code) == condition; -} - -bool -error_category::equivalent(const error_code& code, int condition) const { - return *this == code.category() && code.value() == condition; -} - -std::string -_do_message::message(int ev) const { - return std::string(sys::StrError(ev)); -} - -class _generic_error_category : public _do_message { -public: - virtual const char* name() const; - virtual std::string message(int ev) const; -}; - -const char* -_generic_error_category::name() const { - return "generic"; -} - -std::string -_generic_error_category::message(int ev) const { -#ifdef ELAST - if (ev > ELAST) - return std::string("unspecified generic_category error"); -#endif // ELAST - return _do_message::message(ev); -} - -const error_category& -generic_category() { - static _generic_error_category s; - return s; -} - -class _system_error_category : public _do_message { -public: - virtual const char* name() const; - virtual std::string message(int ev) const; - virtual error_condition default_error_condition(int ev) const; -}; - -const char* -_system_error_category::name() const { - return "system"; -} - -// std::string _system_error_category::message(int ev) const { -// Is in Platform/system_error.inc - -// error_condition _system_error_category::default_error_condition(int ev) const -// Is in Platform/system_error.inc - -const error_category& -system_category() { - static _system_error_category s; - return s; -} - -// error_condition - -std::string -error_condition::message() const { - return _cat_->message(_val_); -} - -// error_code - -std::string -error_code::message() const { - return _cat_->message(_val_); -} - -} // end namespace llvm - -// Include the truly platform-specific parts of this class. -#if defined(LLVM_ON_UNIX) -#include "Unix/system_error.inc" -#endif -#if defined(LLVM_ON_WIN32) -#include "Win32/system_error.inc" -#endif Modified: llvm/trunk/lib/Target/TargetData.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetData.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Target/TargetData.cpp (original) +++ llvm/trunk/lib/Target/TargetData.cpp Mon Nov 29 12:16:10 2010 @@ -25,7 +25,7 @@ #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Mutex.h" +#include "llvm/Support/Mutex.h" #include "llvm/ADT/DenseMap.h" #include #include Modified: llvm/trunk/lib/Target/X86/Disassembler/X86DisassemblerDecoderCommon.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/Disassembler/X86DisassemblerDecoderCommon.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/Disassembler/X86DisassemblerDecoderCommon.h (original) +++ llvm/trunk/lib/Target/X86/Disassembler/X86DisassemblerDecoderCommon.h Mon Nov 29 12:16:10 2010 @@ -22,7 +22,7 @@ #ifndef X86DISASSEMBLERDECODERCOMMON_H #define X86DISASSEMBLERDECODERCOMMON_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #define INSTRUCTIONS_SYM x86DisassemblerInstrSpecifiers #define CONTEXTS_SYM x86DisassemblerContexts Modified: llvm/trunk/lib/Target/X86/X86JITInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86JITInfo.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86JITInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86JITInfo.cpp Mon Nov 29 12:16:10 2010 @@ -19,7 +19,7 @@ #include "llvm/Function.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/ErrorHandling.h" -#include "llvm/System/Valgrind.h" +#include "llvm/Support/Valgrind.h" #include #include using namespace llvm; Modified: llvm/trunk/lib/Target/X86/X86Subtarget.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86Subtarget.cpp (original) +++ llvm/trunk/lib/Target/X86/X86Subtarget.cpp Mon Nov 29 12:16:10 2010 @@ -18,7 +18,7 @@ #include "llvm/GlobalValue.h" #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Host.h" +#include "llvm/Support/Host.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetOptions.h" #include "llvm/ADT/SmallVector.h" Modified: llvm/trunk/lib/VMCore/Attributes.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Attributes.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Attributes.cpp (original) +++ llvm/trunk/lib/VMCore/Attributes.cpp Mon Nov 29 12:16:10 2010 @@ -15,8 +15,8 @@ #include "llvm/Type.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/FoldingSet.h" -#include "llvm/System/Atomic.h" -#include "llvm/System/Mutex.h" +#include "llvm/Support/Atomic.h" +#include "llvm/Support/Mutex.h" #include "llvm/Support/Debug.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/raw_ostream.h" Modified: llvm/trunk/lib/VMCore/Function.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Function.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Function.cpp (original) +++ llvm/trunk/lib/VMCore/Function.cpp Mon Nov 29 12:16:10 2010 @@ -20,8 +20,8 @@ #include "llvm/Support/LeakDetector.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/StringPool.h" -#include "llvm/System/RWMutex.h" -#include "llvm/System/Threading.h" +#include "llvm/Support/RWMutex.h" +#include "llvm/Support/Threading.h" #include "SymbolTableListTraitsImpl.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/StringExtras.h" Modified: llvm/trunk/lib/VMCore/LeakDetector.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/LeakDetector.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/LeakDetector.cpp (original) +++ llvm/trunk/lib/VMCore/LeakDetector.cpp Mon Nov 29 12:16:10 2010 @@ -16,8 +16,8 @@ #include "llvm/ADT/SmallPtrSet.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/ManagedStatic.h" -#include "llvm/System/Mutex.h" -#include "llvm/System/Threading.h" +#include "llvm/Support/Mutex.h" +#include "llvm/Support/Threading.h" #include "llvm/Value.h" using namespace llvm; Modified: llvm/trunk/lib/VMCore/PassManager.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/PassManager.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/PassManager.cpp (original) +++ llvm/trunk/lib/VMCore/PassManager.cpp Mon Nov 29 12:16:10 2010 @@ -24,7 +24,7 @@ #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/PassNameParser.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Mutex.h" +#include "llvm/Support/Mutex.h" #include #include #include Modified: llvm/trunk/lib/VMCore/PassRegistry.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/PassRegistry.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/PassRegistry.cpp (original) +++ llvm/trunk/lib/VMCore/PassRegistry.cpp Mon Nov 29 12:16:10 2010 @@ -16,7 +16,7 @@ #include "llvm/PassSupport.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/ManagedStatic.h" -#include "llvm/System/Mutex.h" +#include "llvm/Support/Mutex.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/StringMap.h" Modified: llvm/trunk/lib/VMCore/Type.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Type.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Type.cpp (original) +++ llvm/trunk/lib/VMCore/Type.cpp Mon Nov 29 12:16:10 2010 @@ -27,7 +27,7 @@ #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Threading.h" +#include "llvm/Support/Threading.h" #include #include using namespace llvm; Modified: llvm/trunk/tools/bugpoint/BugDriver.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/bugpoint/BugDriver.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/bugpoint/BugDriver.cpp (original) +++ llvm/trunk/tools/bugpoint/BugDriver.cpp Mon Nov 29 12:16:10 2010 @@ -23,7 +23,7 @@ #include "llvm/Support/FileUtilities.h" #include "llvm/Support/SourceMgr.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Host.h" +#include "llvm/Support/Host.h" #include using namespace llvm; Modified: llvm/trunk/tools/bugpoint/ExtractFunction.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/bugpoint/ExtractFunction.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/bugpoint/ExtractFunction.cpp (original) +++ llvm/trunk/tools/bugpoint/ExtractFunction.cpp Mon Nov 29 12:16:10 2010 @@ -30,8 +30,8 @@ #include "llvm/Support/Debug.h" #include "llvm/Support/FileUtilities.h" #include "llvm/Support/ToolOutputFile.h" -#include "llvm/System/Path.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/Signals.h" #include using namespace llvm; Modified: llvm/trunk/tools/bugpoint/OptimizerDriver.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/bugpoint/OptimizerDriver.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/bugpoint/OptimizerDriver.cpp (original) +++ llvm/trunk/tools/bugpoint/OptimizerDriver.cpp Mon Nov 29 12:16:10 2010 @@ -26,8 +26,8 @@ #include "llvm/Support/SystemUtils.h" #include "llvm/Support/Debug.h" #include "llvm/Support/ToolOutputFile.h" -#include "llvm/System/Path.h" -#include "llvm/System/Program.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/Program.h" #define DONT_GET_PLUGIN_LOADER_OPTION #include "llvm/Support/PluginLoader.h" Modified: llvm/trunk/tools/bugpoint/ToolRunner.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/bugpoint/ToolRunner.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/bugpoint/ToolRunner.cpp (original) +++ llvm/trunk/tools/bugpoint/ToolRunner.cpp Mon Nov 29 12:16:10 2010 @@ -13,7 +13,7 @@ #define DEBUG_TYPE "toolrunner" #include "ToolRunner.h" -#include "llvm/System/Program.h" +#include "llvm/Support/Program.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" #include "llvm/Support/FileUtilities.h" Modified: llvm/trunk/tools/bugpoint/ToolRunner.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/bugpoint/ToolRunner.h?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/bugpoint/ToolRunner.h (original) +++ llvm/trunk/tools/bugpoint/ToolRunner.h Mon Nov 29 12:16:10 2010 @@ -21,7 +21,7 @@ #include "llvm/Support/CommandLine.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/SystemUtils.h" -#include "llvm/System/Path.h" +#include "llvm/Support/Path.h" #include #include Modified: llvm/trunk/tools/bugpoint/bugpoint.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/bugpoint/bugpoint.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/bugpoint/bugpoint.cpp (original) +++ llvm/trunk/tools/bugpoint/bugpoint.cpp Mon Nov 29 12:16:10 2010 @@ -23,9 +23,9 @@ #include "llvm/Support/PluginLoader.h" #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/StandardPasses.h" -#include "llvm/System/Process.h" -#include "llvm/System/Signals.h" -#include "llvm/System/Valgrind.h" +#include "llvm/Support/Process.h" +#include "llvm/Support/Signals.h" +#include "llvm/Support/Valgrind.h" #include "llvm/LinkAllVMCore.h" using namespace llvm; Modified: llvm/trunk/tools/llc/llc.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llc/llc.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/llc/llc.cpp (original) +++ llvm/trunk/tools/llc/llc.cpp Mon Nov 29 12:16:10 2010 @@ -29,8 +29,8 @@ #include "llvm/Support/PluginLoader.h" #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/ToolOutputFile.h" -#include "llvm/System/Host.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Host.h" +#include "llvm/Support/Signals.h" #include "llvm/Target/SubtargetFeature.h" #include "llvm/Target/TargetData.h" #include "llvm/Target/TargetMachine.h" Modified: llvm/trunk/tools/lli/lli.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lli/lli.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/lli/lli.cpp (original) +++ llvm/trunk/tools/lli/lli.cpp Mon Nov 29 12:16:10 2010 @@ -31,8 +31,8 @@ #include "llvm/Support/PluginLoader.h" #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Process.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Process.h" +#include "llvm/Support/Signals.h" #include "llvm/Target/TargetSelect.h" #include Modified: llvm/trunk/tools/llvm-ar/llvm-ar.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-ar/llvm-ar.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/llvm-ar/llvm-ar.cpp (original) +++ llvm/trunk/tools/llvm-ar/llvm-ar.cpp Mon Nov 29 12:16:10 2010 @@ -19,7 +19,7 @@ #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Signals.h" #include #include #include Modified: llvm/trunk/tools/llvm-as/llvm-as.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-as/llvm-as.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/llvm-as/llvm-as.cpp (original) +++ llvm/trunk/tools/llvm-as/llvm-as.cpp Mon Nov 29 12:16:10 2010 @@ -26,7 +26,7 @@ #include "llvm/Support/SourceMgr.h" #include "llvm/Support/SystemUtils.h" #include "llvm/Support/ToolOutputFile.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Signals.h" #include using namespace llvm; Modified: llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp (original) +++ llvm/trunk/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp Mon Nov 29 12:16:10 2010 @@ -37,7 +37,7 @@ #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Signals.h" #include #include #include Modified: llvm/trunk/tools/llvm-dis/llvm-dis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-dis/llvm-dis.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/llvm-dis/llvm-dis.cpp (original) +++ llvm/trunk/tools/llvm-dis/llvm-dis.cpp Mon Nov 29 12:16:10 2010 @@ -27,7 +27,7 @@ #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/ToolOutputFile.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Signals.h" using namespace llvm; static cl::opt Modified: llvm/trunk/tools/llvm-extract/llvm-extract.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-extract/llvm-extract.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/llvm-extract/llvm-extract.cpp (original) +++ llvm/trunk/tools/llvm-extract/llvm-extract.cpp Mon Nov 29 12:16:10 2010 @@ -25,7 +25,7 @@ #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/ToolOutputFile.h" #include "llvm/Support/SystemUtils.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Signals.h" #include "llvm/ADT/SmallPtrSet.h" #include using namespace llvm; Modified: llvm/trunk/tools/llvm-ld/Optimize.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-ld/Optimize.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/llvm-ld/Optimize.cpp (original) +++ llvm/trunk/tools/llvm-ld/Optimize.cpp Mon Nov 29 12:16:10 2010 @@ -16,7 +16,7 @@ #include "llvm/Support/CommandLine.h" #include "llvm/Support/StandardPasses.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/DynamicLibrary.h" +#include "llvm/Support/DynamicLibrary.h" #include "llvm/Target/TargetData.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Support/PassNameParser.h" Modified: llvm/trunk/tools/llvm-ld/llvm-ld.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-ld/llvm-ld.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/llvm-ld/llvm-ld.cpp (original) +++ llvm/trunk/tools/llvm-ld/llvm-ld.cpp Mon Nov 29 12:16:10 2010 @@ -23,7 +23,7 @@ #include "llvm/LinkAllVMCore.h" #include "llvm/Linker.h" #include "llvm/LLVMContext.h" -#include "llvm/System/Program.h" +#include "llvm/Support/Program.h" #include "llvm/Module.h" #include "llvm/PassManager.h" #include "llvm/Bitcode/ReaderWriter.h" @@ -36,7 +36,7 @@ #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/SystemUtils.h" #include "llvm/Support/ToolOutputFile.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Signals.h" #include "llvm/Config/config.h" #include #include Modified: llvm/trunk/tools/llvm-link/llvm-link.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-link/llvm-link.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/llvm-link/llvm-link.cpp (original) +++ llvm/trunk/tools/llvm-link/llvm-link.cpp Mon Nov 29 12:16:10 2010 @@ -23,8 +23,8 @@ #include "llvm/Support/ToolOutputFile.h" #include "llvm/Support/SystemUtils.h" #include "llvm/Support/IRReader.h" -#include "llvm/System/Signals.h" -#include "llvm/System/Path.h" +#include "llvm/Support/Signals.h" +#include "llvm/Support/Path.h" #include using namespace llvm; Modified: llvm/trunk/tools/llvm-mc/llvm-mc.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mc/llvm-mc.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/llvm-mc/llvm-mc.cpp (original) +++ llvm/trunk/tools/llvm-mc/llvm-mc.cpp Mon Nov 29 12:16:10 2010 @@ -35,8 +35,8 @@ #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/SourceMgr.h" #include "llvm/Support/ToolOutputFile.h" -#include "llvm/System/Host.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Host.h" +#include "llvm/Support/Signals.h" #include "Disassembler.h" using namespace llvm; Modified: llvm/trunk/tools/llvm-nm/llvm-nm.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-nm/llvm-nm.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/llvm-nm/llvm-nm.cpp (original) +++ llvm/trunk/tools/llvm-nm/llvm-nm.cpp Mon Nov 29 12:16:10 2010 @@ -25,7 +25,7 @@ #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Signals.h" #include #include #include Modified: llvm/trunk/tools/llvm-prof/llvm-prof.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-prof/llvm-prof.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/llvm-prof/llvm-prof.cpp (original) +++ llvm/trunk/tools/llvm-prof/llvm-prof.cpp Mon Nov 29 12:16:10 2010 @@ -29,7 +29,7 @@ #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Support/Format.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Signals.h" #include #include #include Modified: llvm/trunk/tools/llvm-ranlib/llvm-ranlib.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-ranlib/llvm-ranlib.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/llvm-ranlib/llvm-ranlib.cpp (original) +++ llvm/trunk/tools/llvm-ranlib/llvm-ranlib.cpp Mon Nov 29 12:16:10 2010 @@ -18,7 +18,7 @@ #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Signals.h" #include #include #include Modified: llvm/trunk/tools/opt/opt.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/opt/opt.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/tools/opt/opt.cpp (original) +++ llvm/trunk/tools/opt/opt.cpp Mon Nov 29 12:16:10 2010 @@ -25,7 +25,7 @@ #include "llvm/Target/TargetData.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Support/PassNameParser.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Signals.h" #include "llvm/Support/Debug.h" #include "llvm/Support/IRReader.h" #include "llvm/Support/ManagedStatic.h" Modified: llvm/trunk/unittests/ADT/StringMapTest.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/StringMapTest.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/unittests/ADT/StringMapTest.cpp (original) +++ llvm/trunk/unittests/ADT/StringMapTest.cpp Mon Nov 29 12:16:10 2010 @@ -9,7 +9,7 @@ #include "gtest/gtest.h" #include "llvm/ADT/StringMap.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" using namespace llvm; namespace { Modified: llvm/trunk/unittests/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/CMakeLists.txt?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/unittests/CMakeLists.txt (original) +++ llvm/trunk/unittests/CMakeLists.txt Mon Nov 29 12:16:10 2010 @@ -29,7 +29,6 @@ BitReader AsmParser Core - System Support ) @@ -109,7 +108,6 @@ add_llvm_unittest(VMCore ${VMCoreSources}) set(LLVM_LINK_COMPONENTS - System Support Core ) @@ -130,7 +128,7 @@ ) set(LLVM_LINK_COMPONENTS - System + Support ) add_llvm_unittest(System Modified: llvm/trunk/unittests/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Makefile?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/unittests/Makefile (original) +++ llvm/trunk/unittests/Makefile Mon Nov 29 12:16:10 2010 @@ -9,7 +9,7 @@ LEVEL = .. -PARALLEL_DIRS = ADT ExecutionEngine Support System Transforms VMCore Analysis +PARALLEL_DIRS = ADT ExecutionEngine Support Transforms VMCore Analysis include $(LEVEL)/Makefile.common Modified: llvm/trunk/unittests/Support/EndianTest.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/EndianTest.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/unittests/Support/EndianTest.cpp (original) +++ llvm/trunk/unittests/Support/EndianTest.cpp Mon Nov 29 12:16:10 2010 @@ -9,7 +9,7 @@ #include "gtest/gtest.h" #include "llvm/Support/Endian.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include #include using namespace llvm; Modified: llvm/trunk/unittests/Support/SwapByteOrderTest.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/SwapByteOrderTest.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/unittests/Support/SwapByteOrderTest.cpp (original) +++ llvm/trunk/unittests/Support/SwapByteOrderTest.cpp Mon Nov 29 12:16:10 2010 @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// #include "gtest/gtest.h" -#include "llvm/System/SwapByteOrder.h" +#include "llvm/Support/SwapByteOrder.h" #include #include using namespace llvm; Modified: llvm/trunk/unittests/System/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/System/Makefile?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/unittests/System/Makefile (original) +++ llvm/trunk/unittests/System/Makefile Mon Nov 29 12:16:10 2010 @@ -9,7 +9,7 @@ LEVEL = ../.. TESTNAME = System -LINK_COMPONENTS := system support +LINK_COMPONENTS := support include $(LEVEL)/Makefile.config include $(LLVM_SRC_ROOT)/unittests/Makefile.unittest Modified: llvm/trunk/unittests/System/Path.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/System/Path.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/unittests/System/Path.cpp (original) +++ llvm/trunk/unittests/System/Path.cpp Mon Nov 29 12:16:10 2010 @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// // For now, just test that the header file parses. -#include "llvm/System/PathV2.h" +#include "llvm/Support/PathV2.h" #include "gtest/gtest.h" Modified: llvm/trunk/unittests/System/TimeValue.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/System/TimeValue.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/unittests/System/TimeValue.cpp (original) +++ llvm/trunk/unittests/System/TimeValue.cpp Mon Nov 29 12:16:10 2010 @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// #include "gtest/gtest.h" -#include "llvm/System/TimeValue.h" +#include "llvm/Support/TimeValue.h" #include using namespace llvm; Modified: llvm/trunk/utils/FileCheck/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/FileCheck/CMakeLists.txt?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/utils/FileCheck/CMakeLists.txt (original) +++ llvm/trunk/utils/FileCheck/CMakeLists.txt Mon Nov 29 12:16:10 2010 @@ -2,7 +2,7 @@ FileCheck.cpp ) -target_link_libraries(FileCheck LLVMSupport LLVMSystem) +target_link_libraries(FileCheck LLVMSupport) if( MINGW ) target_link_libraries(FileCheck imagehlp psapi) endif( MINGW ) Modified: llvm/trunk/utils/FileCheck/FileCheck.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/FileCheck/FileCheck.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/utils/FileCheck/FileCheck.cpp (original) +++ llvm/trunk/utils/FileCheck/FileCheck.cpp Mon Nov 29 12:16:10 2010 @@ -22,7 +22,7 @@ #include "llvm/Support/Regex.h" #include "llvm/Support/SourceMgr.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Signals.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringMap.h" #include Modified: llvm/trunk/utils/FileCheck/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/FileCheck/Makefile?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/utils/FileCheck/Makefile (original) +++ llvm/trunk/utils/FileCheck/Makefile Mon Nov 29 12:16:10 2010 @@ -1,15 +1,15 @@ ##===- utils/FileCheck/Makefile ----------------------------*- Makefile -*-===## -# +# # The LLVM Compiler Infrastructure # # This file is distributed under the University of Illinois Open Source # License. See LICENSE.TXT for details. -# +# ##===----------------------------------------------------------------------===## LEVEL = ../.. TOOLNAME = FileCheck -USEDLIBS = LLVMSupport.a LLVMSystem.a +USEDLIBS = LLVMSupport.a # This tool has no plugins, optimize startup time. TOOL_NO_EXPORTS = 1 Modified: llvm/trunk/utils/FileUpdate/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/FileUpdate/CMakeLists.txt?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/utils/FileUpdate/CMakeLists.txt (original) +++ llvm/trunk/utils/FileUpdate/CMakeLists.txt Mon Nov 29 12:16:10 2010 @@ -2,7 +2,7 @@ FileUpdate.cpp ) -target_link_libraries(FileUpdate LLVMSupport LLVMSystem) +target_link_libraries(FileUpdate LLVMSupport) if( MINGW ) target_link_libraries(FileUpdate imagehlp psapi) endif( MINGW ) Modified: llvm/trunk/utils/FileUpdate/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/FileUpdate/Makefile?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/utils/FileUpdate/Makefile (original) +++ llvm/trunk/utils/FileUpdate/Makefile Mon Nov 29 12:16:10 2010 @@ -1,15 +1,15 @@ ##===- utils/FileUpdate/Makefile ---------------------------*- Makefile -*-===## -# +# # The LLVM Compiler Infrastructure # # This file is distributed under the University of Illinois Open Source # License. See LICENSE.TXT for details. -# +# ##===----------------------------------------------------------------------===## LEVEL = ../.. TOOLNAME = FileUpdate -USEDLIBS = LLVMSupport.a LLVMSystem.a +USEDLIBS = LLVMSupport.a # This tool has no plugins, optimize startup time. TOOL_NO_EXPORTS = 1 Modified: llvm/trunk/utils/KillTheDoctor/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/KillTheDoctor/CMakeLists.txt?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/utils/KillTheDoctor/CMakeLists.txt (original) +++ llvm/trunk/utils/KillTheDoctor/CMakeLists.txt Mon Nov 29 12:16:10 2010 @@ -2,4 +2,4 @@ KillTheDoctor.cpp ) -target_link_libraries(KillTheDoctor LLVMSupport LLVMSystem) +target_link_libraries(KillTheDoctor LLVMSupport) Modified: llvm/trunk/utils/KillTheDoctor/KillTheDoctor.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/KillTheDoctor/KillTheDoctor.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/utils/KillTheDoctor/KillTheDoctor.cpp (original) +++ llvm/trunk/utils/KillTheDoctor/KillTheDoctor.cpp Mon Nov 29 12:16:10 2010 @@ -41,8 +41,8 @@ #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Support/type_traits.h" -#include "llvm/System/Signals.h" -#include "llvm/System/system_error.h" +#include "llvm/Support/Signals.h" +#include "llvm/Support/system_error.h" #include #include #include Modified: llvm/trunk/utils/TableGen/ARMDecoderEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/ARMDecoderEmitter.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/ARMDecoderEmitter.cpp (original) +++ llvm/trunk/utils/TableGen/ARMDecoderEmitter.cpp Mon Nov 29 12:16:10 2010 @@ -1826,7 +1826,7 @@ assert(0 && "Unreachable code!"); } - o << "#include \"llvm/System/DataTypes.h\"\n"; + o << "#include \"llvm/Support/DataTypes.h\"\n"; o << "#include \n"; o << '\n'; o << "namespace llvm {\n\n"; Modified: llvm/trunk/utils/TableGen/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CMakeLists.txt?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/CMakeLists.txt (original) +++ llvm/trunk/utils/TableGen/CMakeLists.txt Mon Nov 29 12:16:10 2010 @@ -41,7 +41,7 @@ X86RecognizableInstr.cpp ) -target_link_libraries(tblgen LLVMSupport LLVMSystem) +target_link_libraries(tblgen LLVMSupport) if( MINGW ) target_link_libraries(tblgen imagehlp psapi) endif( MINGW ) Modified: llvm/trunk/utils/TableGen/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/Makefile?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/Makefile (original) +++ llvm/trunk/utils/TableGen/Makefile Mon Nov 29 12:16:10 2010 @@ -9,7 +9,7 @@ LEVEL = ../.. TOOLNAME = tblgen -USEDLIBS = LLVMSupport.a LLVMSystem.a +USEDLIBS = LLVMSupport.a REQUIRES_EH := 1 REQUIRES_RTTI := 1 Modified: llvm/trunk/utils/TableGen/Record.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/Record.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/Record.cpp (original) +++ llvm/trunk/utils/TableGen/Record.cpp Mon Nov 29 12:16:10 2010 @@ -12,7 +12,7 @@ //===----------------------------------------------------------------------===// #include "Record.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/Support/Format.h" #include "llvm/ADT/StringExtras.h" Modified: llvm/trunk/utils/TableGen/TableGen.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/TableGen.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/TableGen.cpp (original) +++ llvm/trunk/utils/TableGen/TableGen.cpp Mon Nov 29 12:16:10 2010 @@ -41,7 +41,7 @@ #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/ToolOutputFile.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Signals.h" #include #include using namespace llvm; Modified: llvm/trunk/utils/fpcmp/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/fpcmp/Makefile?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/utils/fpcmp/Makefile (original) +++ llvm/trunk/utils/fpcmp/Makefile Mon Nov 29 12:16:10 2010 @@ -1,15 +1,15 @@ ##===- utils/fpcmp/Makefile --------------------------------*- Makefile -*-===## -# +# # The LLVM Compiler Infrastructure # # This file is distributed under the University of Illinois Open Source # License. See LICENSE.TXT for details. -# +# ##===----------------------------------------------------------------------===## LEVEL = ../.. TOOLNAME = fpcmp -USEDLIBS = LLVMSupport.a LLVMSystem.a +USEDLIBS = LLVMSupport.a NO_INSTALL = 1 include $(LEVEL)/Makefile.common Modified: llvm/trunk/utils/not/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/not/CMakeLists.txt?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/utils/not/CMakeLists.txt (original) +++ llvm/trunk/utils/not/CMakeLists.txt Mon Nov 29 12:16:10 2010 @@ -2,7 +2,7 @@ not.cpp ) -target_link_libraries(not LLVMSupport LLVMSystem) +target_link_libraries(not LLVMSupport) if( MINGW ) target_link_libraries(not imagehlp psapi) endif( MINGW ) Modified: llvm/trunk/utils/not/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/not/Makefile?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/utils/not/Makefile (original) +++ llvm/trunk/utils/not/Makefile Mon Nov 29 12:16:10 2010 @@ -1,15 +1,15 @@ ##===- utils/not/Makefile ----------------------------------*- Makefile -*-===## -# +# # The LLVM Compiler Infrastructure # # This file is distributed under the University of Illinois Open Source # License. See LICENSE.TXT for details. -# +# ##===----------------------------------------------------------------------===## LEVEL = ../.. TOOLNAME = not -USEDLIBS = LLVMSupport.a LLVMSystem.a +USEDLIBS = LLVMSupport.a # This tool has no plugins, optimize startup time. TOOL_NO_EXPORTS = 1 Modified: llvm/trunk/utils/not/not.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/not/not.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/utils/not/not.cpp (original) +++ llvm/trunk/utils/not/not.cpp Mon Nov 29 12:16:10 2010 @@ -7,8 +7,8 @@ // //===----------------------------------------------------------------------===// -#include "llvm/System/Path.h" -#include "llvm/System/Program.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/Program.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; Modified: llvm/trunk/utils/unittest/UnitTestMain/TestMain.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/unittest/UnitTestMain/TestMain.cpp?rev=120298&r1=120297&r2=120298&view=diff ============================================================================== --- llvm/trunk/utils/unittest/UnitTestMain/TestMain.cpp (original) +++ llvm/trunk/utils/unittest/UnitTestMain/TestMain.cpp Mon Nov 29 12:16:10 2010 @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Config/config.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Signals.h" #include "gtest/gtest.h" From sabre at nondot.org Mon Nov 29 12:28:05 2010 From: sabre at nondot.org (Chris Lattner) Date: Mon, 29 Nov 2010 18:28:05 -0000 Subject: [llvm-commits] [www] r120300 - in /www/trunk/devmtg/2010-11: Dunbar-MC.pdf Gregor-libclang.pdf Hinnant-libcxx.pdf index.html Message-ID: <20101129182807.0684F2A6C12D@llvm.org> Author: lattner Date: Mon Nov 29 12:28:05 2010 New Revision: 120300 URL: http://llvm.org/viewvc/llvm-project?rev=120300&view=rev Log: add some slides. Added: www/trunk/devmtg/2010-11/Dunbar-MC.pdf www/trunk/devmtg/2010-11/Gregor-libclang.pdf (with props) www/trunk/devmtg/2010-11/Hinnant-libcxx.pdf Modified: www/trunk/devmtg/2010-11/index.html Added: www/trunk/devmtg/2010-11/Dunbar-MC.pdf URL: http://llvm.org/viewvc/llvm-project/www/trunk/devmtg/2010-11/Dunbar-MC.pdf?rev=120300&view=auto ============================================================================== Binary files www/trunk/devmtg/2010-11/Dunbar-MC.pdf (added) and www/trunk/devmtg/2010-11/Dunbar-MC.pdf Mon Nov 29 12:28:05 2010 differ Added: www/trunk/devmtg/2010-11/Gregor-libclang.pdf URL: http://llvm.org/viewvc/llvm-project/www/trunk/devmtg/2010-11/Gregor-libclang.pdf?rev=120300&view=auto ============================================================================== Binary file - no diff available. Propchange: www/trunk/devmtg/2010-11/Gregor-libclang.pdf ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: www/trunk/devmtg/2010-11/Hinnant-libcxx.pdf URL: http://llvm.org/viewvc/llvm-project/www/trunk/devmtg/2010-11/Hinnant-libcxx.pdf?rev=120300&view=auto ============================================================================== Binary files www/trunk/devmtg/2010-11/Hinnant-libcxx.pdf (added) and www/trunk/devmtg/2010-11/Hinnant-libcxx.pdf Mon Nov 29 12:28:05 2010 differ Modified: www/trunk/devmtg/2010-11/index.html URL: http://llvm.org/viewvc/llvm-project/www/trunk/devmtg/2010-11/index.html?rev=120300&r1=120299&r2=120300&view=diff ============================================================================== --- www/trunk/devmtg/2010-11/index.html (original) +++ www/trunk/devmtg/2010-11/index.html Mon Nov 29 12:28:05 2010 @@ -67,7 +67,7 @@ -[Slides] +[Slides]

[Video] (Computer)
[Videos] (Mobile)

libclang: Thinking Beyond the Compiler
Doug Gregor, Apple Inc. @@ -79,7 +79,7 @@ Polly - Polyhedral optimizations in LLVM
Tobias Grosser , University of Passau -[Slides] +[Slides]

[Video] (Computer)
[Videos] (Mobile)

libc++: A Standard Library for C++0x
Howard Hinnant, Apple Inc. @@ -90,7 +90,7 @@ Symbolic Crosschecking of Floating-Point and SIMD Code
Peter Collingbourne, Imperial College London -[Slides] +[Slides]

[Video] (Computer)
[Video] (Mobile)

The LLVM Assembler & Machine Code Infrastructure
Daniel Dunbar, Apple Inc. From bigcheesegs at gmail.com Mon Nov 29 12:29:56 2010 From: bigcheesegs at gmail.com (Michael J. Spencer) Date: Mon, 29 Nov 2010 18:29:56 -0000 Subject: [llvm-commits] [llvm] r120301 - /llvm/trunk/lib/Support/Unix/Unix.h Message-ID: <20101129182956.155C22A6C12D@llvm.org> Author: mspencer Date: Mon Nov 29 12:29:55 2010 New Revision: 120301 URL: http://llvm.org/viewvc/llvm-project?rev=120301&view=rev Log: Missed a spot. Modified: llvm/trunk/lib/Support/Unix/Unix.h Modified: llvm/trunk/lib/Support/Unix/Unix.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Unix.h?rev=120301&r1=120300&r2=120301&view=diff ============================================================================== --- llvm/trunk/lib/Support/Unix/Unix.h (original) +++ llvm/trunk/lib/Support/Unix/Unix.h Mon Nov 29 12:29:55 2010 @@ -20,7 +20,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Config/config.h" // Get autoconf configuration settings -#include "llvm/System/Errno.h" +#include "llvm/Support/Errno.h" #include #include #include From bigcheesegs at gmail.com Mon Nov 29 12:33:09 2010 From: bigcheesegs at gmail.com (Michael J. Spencer) Date: Mon, 29 Nov 2010 18:33:09 -0000 Subject: [llvm-commits] [llvm] r120302 - /llvm/trunk/utils/FileUpdate/FileUpdate.cpp Message-ID: <20101129183309.1AA7A2A6C12D@llvm.org> Author: mspencer Date: Mon Nov 29 12:33:08 2010 New Revision: 120302 URL: http://llvm.org/viewvc/llvm-project?rev=120302&view=rev Log: Missed another one. Modified: llvm/trunk/utils/FileUpdate/FileUpdate.cpp Modified: llvm/trunk/utils/FileUpdate/FileUpdate.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/FileUpdate/FileUpdate.cpp?rev=120302&r1=120301&r2=120302&view=diff ============================================================================== --- llvm/trunk/utils/FileUpdate/FileUpdate.cpp (original) +++ llvm/trunk/utils/FileUpdate/FileUpdate.cpp Mon Nov 29 12:33:08 2010 @@ -17,7 +17,7 @@ #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/ToolOutputFile.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Signals.h" using namespace llvm; static cl::opt From clattner at apple.com Mon Nov 29 12:37:52 2010 From: clattner at apple.com (Chris Lattner) Date: Mon, 29 Nov 2010 10:37:52 -0800 Subject: [llvm-commits] [PATCH] Merge System into Support In-Reply-To: References: Message-ID: <70EDF92A-F167-4905-AFB2-27C767EEBE51@apple.com> On Nov 29, 2010, at 10:13 AM, Anton Korobeynikov wrote: >> This is going to be a major change for almost every project that uses >> LLVM. Should we keep headers in System that forward to Support for a >> little bit? > This sounds like a sane idea at least for 2.9 Why? I don't think we should waste time on this. -Chris From grosbach at apple.com Mon Nov 29 12:37:44 2010 From: grosbach at apple.com (Jim Grosbach) Date: Mon, 29 Nov 2010 18:37:44 -0000 Subject: [llvm-commits] [llvm] r120303 - in /llvm/trunk/lib/Target/ARM: ARMAsmPrinter.cpp ARMInstrFormats.td ARMInstrInfo.td Message-ID: <20101129183745.106E62A6C12D@llvm.org> Author: grosbach Date: Mon Nov 29 12:37:44 2010 New Revision: 120303 URL: http://llvm.org/viewvc/llvm-project?rev=120303&view=rev Log: Switch ARM BR_JTm and BR_JTr instructions to be MC-expanded pseudos. Modified: llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp llvm/trunk/lib/Target/ARM/ARMInstrFormats.td llvm/trunk/lib/Target/ARM/ARMInstrInfo.td Modified: llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp?rev=120303&r1=120302&r2=120303&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp Mon Nov 29 12:37:44 2010 @@ -936,32 +936,74 @@ EmitJump2Table(MI); return; } - case ARM::tBR_JTr: - case ARM::BR_JTr: - case ARM::BR_JTm: { + case ARM::tBR_JTr: { // Lower and emit the instruction itself, then the jump table following it. MCInst TmpInst; // FIXME: The branch instruction is really a pseudo. We should xform it // explicitly. LowerARMMachineInstrToMCInst(MI, TmpInst, *this); OutStreamer.EmitInstruction(TmpInst); + + // Output the data for the jump table itself + EmitJumpTable(MI); + return; + } + case ARM::BR_JTr: { + // Lower and emit the instruction itself, then the jump table following it. + // mov pc, target + MCInst TmpInst; + TmpInst.setOpcode(ARM::MOVr); + TmpInst.addOperand(MCOperand::CreateReg(ARM::PC)); + TmpInst.addOperand(MCOperand::CreateReg(MI->getOperand(0).getReg())); + // Add predicate operands. + TmpInst.addOperand(MCOperand::CreateImm(ARMCC::AL)); + TmpInst.addOperand(MCOperand::CreateReg(0)); + OutStreamer.EmitInstruction(TmpInst); + + // Output the data for the jump table itself + EmitJumpTable(MI); + return; + } + case ARM::BR_JTm: { + // Lower and emit the instruction itself, then the jump table following it. + // ldr pc, target + MCInst TmpInst; + if (MI->getOperand(1).getReg() == 0) { + // literal offset + TmpInst.setOpcode(ARM::LDRi12); + TmpInst.addOperand(MCOperand::CreateReg(ARM::PC)); + TmpInst.addOperand(MCOperand::CreateReg(MI->getOperand(0).getReg())); + TmpInst.addOperand(MCOperand::CreateImm(MI->getOperand(2).getImm())); + } else { + TmpInst.setOpcode(ARM::LDRrs); + TmpInst.addOperand(MCOperand::CreateReg(ARM::PC)); + TmpInst.addOperand(MCOperand::CreateReg(MI->getOperand(0).getReg())); + TmpInst.addOperand(MCOperand::CreateReg(MI->getOperand(1).getReg())); + TmpInst.addOperand(MCOperand::CreateImm(0)); + } + // Add predicate operands. + TmpInst.addOperand(MCOperand::CreateImm(ARMCC::AL)); + TmpInst.addOperand(MCOperand::CreateReg(0)); + OutStreamer.EmitInstruction(TmpInst); + + // Output the data for the jump table itself EmitJumpTable(MI); return; } case ARM::BR_JTadd: { // Lower and emit the instruction itself, then the jump table following it. // add pc, target, idx - MCInst AddInst; - AddInst.setOpcode(ARM::ADDrr); - AddInst.addOperand(MCOperand::CreateReg(ARM::PC)); - AddInst.addOperand(MCOperand::CreateReg(MI->getOperand(0).getReg())); - AddInst.addOperand(MCOperand::CreateReg(MI->getOperand(1).getReg())); + MCInst TmpInst; + TmpInst.setOpcode(ARM::ADDrr); + TmpInst.addOperand(MCOperand::CreateReg(ARM::PC)); + TmpInst.addOperand(MCOperand::CreateReg(MI->getOperand(0).getReg())); + TmpInst.addOperand(MCOperand::CreateReg(MI->getOperand(1).getReg())); // Add predicate operands. - AddInst.addOperand(MCOperand::CreateImm(ARMCC::AL)); - AddInst.addOperand(MCOperand::CreateReg(0)); + TmpInst.addOperand(MCOperand::CreateImm(ARMCC::AL)); + TmpInst.addOperand(MCOperand::CreateReg(0)); // Add 's' bit operand (always reg0 for this) - AddInst.addOperand(MCOperand::CreateReg(0)); - OutStreamer.EmitInstruction(AddInst); + TmpInst.addOperand(MCOperand::CreateReg(0)); + OutStreamer.EmitInstruction(TmpInst); // Output the data for the jump table itself EmitJumpTable(MI); Modified: llvm/trunk/lib/Target/ARM/ARMInstrFormats.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrFormats.td?rev=120303&r1=120302&r2=120303&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrFormats.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrFormats.td Mon Nov 29 12:37:44 2010 @@ -508,6 +508,24 @@ let Inst{15-12} = Rt; // Rt let Inst{7-4} = op; } +class AI3stridx op, bit isByte, bit isPre, dag oops, dag iops, + IndexMode im, Format f, InstrItinClass itin, string opc, + string asm, string cstr, list pattern> + : AI2ldstidx<0, isByte, isPre, oops, iops, im, f, itin, opc, asm, cstr, + pattern> { + // AM3 store w/ two operands: (GPR, am3offset) + bits<14> offset; + bits<4> Rt; + bits<4> Rn; + let Inst{27-25} = 0b000; + let Inst{23} = offset{8}; + let Inst{22} = offset{9}; + let Inst{19-16} = Rn; + let Inst{15-12} = Rt; // Rt + let Inst{11-8} = offset{7-4}; // imm7_4/zero + let Inst{7-4} = op; + let Inst{3-0} = offset{3-0}; // imm3_0/Rm +} // stores class AI3str op, dag oops, dag iops, Format f, InstrItinClass itin, Modified: llvm/trunk/lib/Target/ARM/ARMInstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrInfo.td?rev=120303&r1=120302&r2=120303&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrInfo.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrInfo.td Mon Nov 29 12:37:44 2010 @@ -1427,29 +1427,21 @@ let Inst{23-0} = target; } - let isNotDuplicable = 1, isIndirectBranch = 1, - // FIXME: $imm field is not specified by asm string. Mark as cgonly. - isCodeGenOnly = 1 in { - def BR_JTr : JTI<(outs), (ins GPR:$target, jtblock_operand:$jt, i32imm:$id), - IIC_Br, "mov\tpc, $target$jt", + let isNotDuplicable = 1, isIndirectBranch = 1 in { + def BR_JTr : ARMPseudoInst<(outs), + (ins GPR:$target, jtblock_operand:$jt, i32imm:$id), + IIC_Br,// "mov\tpc, $target$jt", [(ARMbrjt GPR:$target, tjumptable:$jt, imm:$id)]> { - let Inst{11-4} = 0b00000000; - let Inst{15-12} = 0b1111; - let Inst{20} = 0; // S Bit - let Inst{24-21} = 0b1101; - let Inst{27-25} = 0b000; + let SZ = SizeSpecial; } - def BR_JTm : JTI<(outs), + // FIXME: This shouldn't use the generic "addrmode2," but rather be split + // into i12 and rs suffixed versions. + def BR_JTm : ARMPseudoInst<(outs), (ins addrmode2:$target, jtblock_operand:$jt, i32imm:$id), - IIC_Br, "ldr\tpc, $target$jt", + IIC_Br, [(ARMbrjt (i32 (load addrmode2:$target)), tjumptable:$jt, imm:$id)]> { - let Inst{15-12} = 0b1111; - let Inst{20} = 1; // L bit - let Inst{21} = 0; // W bit - let Inst{22} = 0; // B bit - let Inst{24} = 1; // P bit - let Inst{27-25} = 0b011; + let SZ = SizeSpecial; } def BR_JTadd : ARMPseudoInst<(outs), (ins GPR:$target, GPR:$idx, jtblock_operand:$jt, i32imm:$id), @@ -1730,19 +1722,19 @@ [(set GPR:$Rn_wb, (post_truncsti8 GPR:$Rt, GPR:$Rn, am2offset:$offset))]>; -def STRH_PRE : AI3sthpr<(outs GPR:$base_wb), - (ins GPR:$src, GPR:$base,am3offset:$offset), - StMiscFrm, IIC_iStore_ru, - "strh", "\t$src, [$base, $offset]!", "$base = $base_wb", - [(set GPR:$base_wb, - (pre_truncsti16 GPR:$src, GPR:$base,am3offset:$offset))]>; - -def STRH_POST: AI3sthpo<(outs GPR:$base_wb), - (ins GPR:$src, GPR:$base,am3offset:$offset), - StMiscFrm, IIC_iStore_bh_ru, - "strh", "\t$src, [$base], $offset", "$base = $base_wb", - [(set GPR:$base_wb, (post_truncsti16 GPR:$src, - GPR:$base, am3offset:$offset))]>; +def STRH_PRE : AI3stridx<0b1011, 0, 1, (outs GPR:$Rn_wb), + (ins GPR:$Rt, GPR:$Rn, am3offset:$offset), + IndexModePre, StMiscFrm, IIC_iStore_ru, + "strh", "\t$Rt, [$Rn, $offset]!", "$Rn = $Rn_wb", + [(set GPR:$Rn_wb, + (pre_truncsti16 GPR:$Rt, GPR:$Rn, am3offset:$offset))]>; + +def STRH_POST: AI3stridx<0b1011, 0, 0, (outs GPR:$Rn_wb), + (ins GPR:$Rt, GPR:$Rn, am3offset:$offset), + IndexModePost, StMiscFrm, IIC_iStore_bh_ru, + "strh", "\t$Rt, [$Rn], $offset", "$Rn = $Rn_wb", + [(set GPR:$Rn_wb, (post_truncsti16 GPR:$Rt, + GPR:$Rn, am3offset:$offset))]>; // For disassembly only def STRD_PRE : AI3stdpr<(outs GPR:$base_wb), From anton at korobeynikov.info Mon Nov 29 12:45:24 2010 From: anton at korobeynikov.info (Anton Korobeynikov) Date: Mon, 29 Nov 2010 21:45:24 +0300 Subject: [llvm-commits] [PATCH] Merge System into Support In-Reply-To: <70EDF92A-F167-4905-AFB2-27C767EEBE51@apple.com> References: <70EDF92A-F167-4905-AFB2-27C767EEBE51@apple.com> Message-ID: > Why? ?I don't think we should waste time on this. Well... at least time was wasted before on iterator / hash_map, etc. Anything changed since that time? -- With best regards, Anton Korobeynikov Faculty of Mathematics and Mechanics, Saint Petersburg State University From bigcheesegs at gmail.com Mon Nov 29 12:47:54 2010 From: bigcheesegs at gmail.com (Michael J. Spencer) Date: Mon, 29 Nov 2010 18:47:54 -0000 Subject: [llvm-commits] [llvm] r120304 - in /llvm/trunk: include/llvm-c/ include/llvm/Support/ lib/CompilerDriver/ lib/Target/ARM/ lib/Target/CBackend/ lib/Target/PowerPC/ projects/sample/lib/sample/ tools/gold/ tools/llvmc/examples/mcc16/ tools/lto/ utils/TableGen/ Message-ID: <20101129184754.B81F22A6C12D@llvm.org> Author: mspencer Date: Mon Nov 29 12:47:54 2010 New Revision: 120304 URL: http://llvm.org/viewvc/llvm-project?rev=120304&view=rev Log: I swear I did a make clean and make before committing all this... Modified: llvm/trunk/include/llvm-c/Core.h llvm/trunk/include/llvm-c/lto.h llvm/trunk/include/llvm/Support/DataTypes.h.in llvm/trunk/lib/CompilerDriver/Action.cpp llvm/trunk/lib/CompilerDriver/Main.cpp llvm/trunk/lib/CompilerDriver/Tool.cpp llvm/trunk/lib/Target/ARM/ARMJITInfo.cpp llvm/trunk/lib/Target/CBackend/CBackend.cpp llvm/trunk/lib/Target/PowerPC/PPCJITInfo.cpp llvm/trunk/projects/sample/lib/sample/sample.c llvm/trunk/tools/gold/gold-plugin.cpp llvm/trunk/tools/llvmc/examples/mcc16/Hooks.cpp llvm/trunk/tools/llvmc/examples/mcc16/Main.cpp llvm/trunk/tools/lto/LTOCodeGenerator.cpp llvm/trunk/tools/lto/LTOModule.cpp llvm/trunk/utils/TableGen/ARMDecoderEmitter.h llvm/trunk/utils/TableGen/Record.h llvm/trunk/utils/TableGen/TGLexer.h llvm/trunk/utils/TableGen/X86ModRMFilters.h llvm/trunk/utils/TableGen/X86RecognizableInstr.h Modified: llvm/trunk/include/llvm-c/Core.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/Core.h?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/include/llvm-c/Core.h (original) +++ llvm/trunk/include/llvm-c/Core.h Mon Nov 29 12:47:54 2010 @@ -33,7 +33,7 @@ #ifndef LLVM_C_CORE_H #define LLVM_C_CORE_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #ifdef __cplusplus Modified: llvm/trunk/include/llvm-c/lto.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/lto.h?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/include/llvm-c/lto.h (original) +++ llvm/trunk/include/llvm-c/lto.h Mon Nov 29 12:47:54 2010 @@ -18,7 +18,7 @@ #include #include -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #define LTO_API_VERSION 4 Modified: llvm/trunk/include/llvm/Support/DataTypes.h.in URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/DataTypes.h.in?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/DataTypes.h.in (original) +++ llvm/trunk/include/llvm/Support/DataTypes.h.in Mon Nov 29 12:47:54 2010 @@ -63,7 +63,7 @@ #endif #ifdef _AIX -#include "llvm/System/AIXDataTypesFix.h" +#include "llvm/Support/AIXDataTypesFix.h" #endif /* Handle incorrect definition of uint64_t as u_int64_t */ Modified: llvm/trunk/lib/CompilerDriver/Action.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CompilerDriver/Action.cpp?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/lib/CompilerDriver/Action.cpp (original) +++ llvm/trunk/lib/CompilerDriver/Action.cpp Mon Nov 29 12:47:54 2010 @@ -18,8 +18,8 @@ #include "llvm/Support/raw_ostream.h" #include "llvm/Support/SystemUtils.h" -#include "llvm/System/Program.h" -#include "llvm/System/TimeValue.h" +#include "llvm/Support/Program.h" +#include "llvm/Support/TimeValue.h" #include #include Modified: llvm/trunk/lib/CompilerDriver/Main.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CompilerDriver/Main.cpp?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/lib/CompilerDriver/Main.cpp (original) +++ llvm/trunk/lib/CompilerDriver/Main.cpp Mon Nov 29 12:47:54 2010 @@ -17,7 +17,7 @@ #include "llvm/CompilerDriver/Error.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Path.h" +#include "llvm/Support/Path.h" #include #include Modified: llvm/trunk/lib/CompilerDriver/Tool.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CompilerDriver/Tool.cpp?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/lib/CompilerDriver/Tool.cpp (original) +++ llvm/trunk/lib/CompilerDriver/Tool.cpp Mon Nov 29 12:47:54 2010 @@ -15,7 +15,7 @@ #include "llvm/CompilerDriver/Tool.h" #include "llvm/ADT/StringExtras.h" -#include "llvm/System/Path.h" +#include "llvm/Support/Path.h" #include Modified: llvm/trunk/lib/Target/ARM/ARMJITInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMJITInfo.cpp?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMJITInfo.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMJITInfo.cpp Mon Nov 29 12:47:54 2010 @@ -22,7 +22,7 @@ #include "llvm/Support/Debug.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/System/Memory.h" +#include "llvm/Support/Memory.h" #include using namespace llvm; Modified: llvm/trunk/lib/Target/CBackend/CBackend.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CBackend/CBackend.cpp?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/lib/Target/CBackend/CBackend.cpp (original) +++ llvm/trunk/lib/Target/CBackend/CBackend.cpp Mon Nov 29 12:47:54 2010 @@ -47,7 +47,7 @@ #include "llvm/Support/GetElementPtrTypeIterator.h" #include "llvm/Support/InstVisitor.h" #include "llvm/Support/MathExtras.h" -#include "llvm/System/Host.h" +#include "llvm/Support/Host.h" #include "llvm/Config/config.h" #include // Some ms header decided to define setjmp as _setjmp, undo this for this file. Modified: llvm/trunk/lib/Target/PowerPC/PPCJITInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCJITInfo.cpp?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/lib/Target/PowerPC/PPCJITInfo.cpp (original) +++ llvm/trunk/lib/Target/PowerPC/PPCJITInfo.cpp Mon Nov 29 12:47:54 2010 @@ -16,7 +16,7 @@ #include "PPCRelocations.h" #include "PPCTargetMachine.h" #include "llvm/Function.h" -#include "llvm/System/Memory.h" +#include "llvm/Support/Memory.h" #include "llvm/Support/Debug.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/raw_ostream.h" Modified: llvm/trunk/projects/sample/lib/sample/sample.c URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/projects/sample/lib/sample/sample.c?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/projects/sample/lib/sample/sample.c (original) +++ llvm/trunk/projects/sample/lib/sample/sample.c Mon Nov 29 12:47:54 2010 @@ -11,7 +11,7 @@ #include /* LLVM Header File -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" */ /* Header file global to this project */ Modified: llvm/trunk/tools/gold/gold-plugin.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/gold/gold-plugin.cpp?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/tools/gold/gold-plugin.cpp (original) +++ llvm/trunk/tools/gold/gold-plugin.cpp Mon Nov 29 12:47:54 2010 @@ -18,9 +18,9 @@ #include "llvm-c/lto.h" #include "llvm/Support/ToolOutputFile.h" -#include "llvm/System/Errno.h" -#include "llvm/System/Path.h" -#include "llvm/System/Program.h" +#include "llvm/Support/Errno.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/Program.h" #include #include Modified: llvm/trunk/tools/llvmc/examples/mcc16/Hooks.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/examples/mcc16/Hooks.cpp?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/tools/llvmc/examples/mcc16/Hooks.cpp (original) +++ llvm/trunk/tools/llvmc/examples/mcc16/Hooks.cpp Mon Nov 29 12:47:54 2010 @@ -1,4 +1,4 @@ -#include "llvm/System/Path.h" +#include "llvm/Support/Path.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/raw_ostream.h" Modified: llvm/trunk/tools/llvmc/examples/mcc16/Main.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/examples/mcc16/Main.cpp?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/tools/llvmc/examples/mcc16/Main.cpp (original) +++ llvm/trunk/tools/llvmc/examples/mcc16/Main.cpp Mon Nov 29 12:47:54 2010 @@ -16,7 +16,7 @@ #include "llvm/CompilerDriver/BuiltinOptions.h" #include "llvm/CompilerDriver/Main.h" -#include "llvm/System/Path.h" +#include "llvm/Support/Path.h" #include "llvm/Config/config.h" #include Modified: llvm/trunk/tools/lto/LTOCodeGenerator.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/LTOCodeGenerator.cpp?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/tools/lto/LTOCodeGenerator.cpp (original) +++ llvm/trunk/tools/lto/LTOCodeGenerator.cpp Mon Nov 29 12:47:54 2010 @@ -40,9 +40,9 @@ #include "llvm/Support/StandardPasses.h" #include "llvm/Support/SystemUtils.h" #include "llvm/Support/ToolOutputFile.h" -#include "llvm/System/Host.h" -#include "llvm/System/Program.h" -#include "llvm/System/Signals.h" +#include "llvm/Support/Host.h" +#include "llvm/Support/Program.h" +#include "llvm/Support/Signals.h" #include "llvm/Config/config.h" #include #include Modified: llvm/trunk/tools/lto/LTOModule.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/LTOModule.cpp?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/tools/lto/LTOModule.cpp (original) +++ llvm/trunk/tools/lto/LTOModule.cpp Mon Nov 29 12:47:54 2010 @@ -23,9 +23,9 @@ #include "llvm/Support/SystemUtils.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/MathExtras.h" -#include "llvm/System/Host.h" -#include "llvm/System/Path.h" -#include "llvm/System/Process.h" +#include "llvm/Support/Host.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/Process.h" #include "llvm/Target/Mangler.h" #include "llvm/Target/SubtargetFeature.h" #include "llvm/MC/MCAsmInfo.h" Modified: llvm/trunk/utils/TableGen/ARMDecoderEmitter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/ARMDecoderEmitter.h?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/ARMDecoderEmitter.h (original) +++ llvm/trunk/utils/TableGen/ARMDecoderEmitter.h Mon Nov 29 12:47:54 2010 @@ -17,7 +17,7 @@ #include "TableGenBackend.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { Modified: llvm/trunk/utils/TableGen/Record.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/Record.h?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/Record.h (original) +++ llvm/trunk/utils/TableGen/Record.h Mon Nov 29 12:47:54 2010 @@ -16,7 +16,7 @@ #define RECORD_H #include "llvm/Support/SourceMgr.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/Support/raw_ostream.h" #include Modified: llvm/trunk/utils/TableGen/TGLexer.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/TGLexer.h?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/TGLexer.h (original) +++ llvm/trunk/utils/TableGen/TGLexer.h Mon Nov 29 12:47:54 2010 @@ -14,7 +14,7 @@ #ifndef TGLEXER_H #define TGLEXER_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include #include #include Modified: llvm/trunk/utils/TableGen/X86ModRMFilters.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/X86ModRMFilters.h?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/X86ModRMFilters.h (original) +++ llvm/trunk/utils/TableGen/X86ModRMFilters.h Mon Nov 29 12:47:54 2010 @@ -18,7 +18,7 @@ #ifndef X86MODRMFILTERS_H #define X86MODRMFILTERS_H -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" namespace llvm { Modified: llvm/trunk/utils/TableGen/X86RecognizableInstr.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/X86RecognizableInstr.h?rev=120304&r1=120303&r2=120304&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/X86RecognizableInstr.h (original) +++ llvm/trunk/utils/TableGen/X86RecognizableInstr.h Mon Nov 29 12:47:54 2010 @@ -22,7 +22,7 @@ #include "CodeGenTarget.h" #include "Record.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/ADT/SmallVector.h" namespace llvm { From grosbach at apple.com Mon Nov 29 12:53:24 2010 From: grosbach at apple.com (Jim Grosbach) Date: Mon, 29 Nov 2010 18:53:24 -0000 Subject: [llvm-commits] [llvm] r120305 - /llvm/trunk/lib/Target/ARM/ARMInstrInfo.td Message-ID: <20101129185324.9DFBF2A6C12D@llvm.org> Author: grosbach Date: Mon Nov 29 12:53:24 2010 New Revision: 120305 URL: http://llvm.org/viewvc/llvm-project?rev=120305&view=rev Log: The ARM BR_JT* pseudos don't need to use the printer jtblock_operand node to get the pretty-printer. That's handled explicityly by the MC lowering now. Modified: llvm/trunk/lib/Target/ARM/ARMInstrInfo.td Modified: llvm/trunk/lib/Target/ARM/ARMInstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrInfo.td?rev=120305&r1=120304&r2=120305&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrInfo.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrInfo.td Mon Nov 29 12:53:24 2010 @@ -1429,22 +1429,22 @@ let isNotDuplicable = 1, isIndirectBranch = 1 in { def BR_JTr : ARMPseudoInst<(outs), - (ins GPR:$target, jtblock_operand:$jt, i32imm:$id), - IIC_Br,// "mov\tpc, $target$jt", + (ins GPR:$target, i32imm:$jt, i32imm:$id), + IIC_Br, [(ARMbrjt GPR:$target, tjumptable:$jt, imm:$id)]> { let SZ = SizeSpecial; } // FIXME: This shouldn't use the generic "addrmode2," but rather be split // into i12 and rs suffixed versions. def BR_JTm : ARMPseudoInst<(outs), - (ins addrmode2:$target, jtblock_operand:$jt, i32imm:$id), + (ins addrmode2:$target, i32imm:$jt, i32imm:$id), IIC_Br, [(ARMbrjt (i32 (load addrmode2:$target)), tjumptable:$jt, imm:$id)]> { let SZ = SizeSpecial; } def BR_JTadd : ARMPseudoInst<(outs), - (ins GPR:$target, GPR:$idx, jtblock_operand:$jt, i32imm:$id), + (ins GPR:$target, GPR:$idx, i32imm:$jt, i32imm:$id), IIC_Br, [(ARMbrjt (add GPR:$target, GPR:$idx), tjumptable:$jt, imm:$id)]> { From resistor at mac.com Mon Nov 29 12:54:38 2010 From: resistor at mac.com (Owen Anderson) Date: Mon, 29 Nov 2010 18:54:38 -0000 Subject: [llvm-commits] [llvm] r120306 - /llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Message-ID: <20101129185438.731D12A6C12D@llvm.org> Author: resistor Date: Mon Nov 29 12:54:38 2010 New Revision: 120306 URL: http://llvm.org/viewvc/llvm-project?rev=120306&view=rev Log: Thumb2 encodings for branches and IT blocks. Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td?rev=120306&r1=120305&r2=120306&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Mon Nov 29 12:54:38 2010 @@ -2921,6 +2921,13 @@ let Inst{31-27} = 0b11110; let Inst{15-14} = 0b10; let Inst{12} = 1; + + bits<20> target; + let Inst{26} = target{19}; + let Inst{11} = target{18}; + let Inst{13} = target{17}; + let Inst{21-16} = target{16-11}; + let Inst{10-0} = target{10-0}; } let isNotDuplicable = 1, isIndirectBranch = 1, @@ -3004,6 +3011,11 @@ // 16-bit instruction. let Inst{31-16} = 0x0000; let Inst{15-8} = 0b10111111; + + bits<4> cc; + bits<4> mask; + let Inst{7-4} = cc{3-0}; + let Inst{3-0} = mask{3-0}; } // Branch and Exchange Jazelle -- for disassembly only @@ -3015,6 +3027,9 @@ let Inst{25-20} = 0b111100; let Inst{15-14} = 0b10; let Inst{12} = 0; + + bits<4> func; + let Inst{19-16} = func{3-0}; } // Change Processor State is a system instruction -- for disassembly only. From clattner at apple.com Mon Nov 29 13:04:43 2010 From: clattner at apple.com (Chris Lattner) Date: Mon, 29 Nov 2010 11:04:43 -0800 Subject: [llvm-commits] [PATCH] Merge System into Support In-Reply-To: References: <70EDF92A-F167-4905-AFB2-27C767EEBE51@apple.com> Message-ID: <9EC7F938-3EF3-46F5-9E03-6C9D8F384148@apple.com> On Nov 29, 2010, at 10:45 AM, Anton Korobeynikov wrote: >> Why? I don't think we should waste time on this. > Well... at least time was wasted before on iterator / hash_map, etc. > Anything changed since that time? This would require a lot more work than those, and even they weren't really that important. We don't provide api compatibility across releases, sorry. -Chris From gohman at apple.com Mon Nov 29 13:20:14 2010 From: gohman at apple.com (Dan Gohman) Date: Mon, 29 Nov 2010 11:20:14 -0800 Subject: [llvm-commits] Fix output stream opened in text instead of binary mode on MinGW In-Reply-To: <6AE1604EE3EC5F4296C096518C6B77EE1705A19A78@mail.accesssoftek.com> References: <6AE1604EE3EC5F4296C096518C6B77EE1705A19A78@mail.accesssoftek.com> Message-ID: <4931539F-BC52-4235-B421-C9140759527B@apple.com> On Nov 24, 2010, at 9:07 AM, Danil Malyshev wrote: > Hello everyone, > > Please find attached a patch to review. > > This patch > > 1. Adds support for setw() method to the llvm::raw_ostream. An alternative to unpopular iostream-style manipulators is llvm/Support/Format.h. Dan From gohman at apple.com Mon Nov 29 13:20:21 2010 From: gohman at apple.com (Dan Gohman) Date: Mon, 29 Nov 2010 11:20:21 -0800 Subject: [llvm-commits] [Review request] Instcombine: extractvalue from load --> load from gep In-Reply-To: References: Message-ID: <272A49D7-AFC1-4830-A1EB-CA05EB773B03@apple.com> On Nov 28, 2010, at 2:43 AM, Frits van Bommel wrote: > On Sun, Nov 28, 2010 at 3:52 AM, Frits van Bommel wrote: >> No, definitely not okay. It inserts the new load at the location of >> the extractvalue instead of the location of the old load. Fixed >> version attached. I'll provide an extra test case once I've had some >> sleep... > > So apparently 4 AM is not the best time to try to fix bugs. Who knew? > I forgot to even run the testcase. > That version is even more broken than the one it replaced; it asserts > every time it fires. > > Here's the real fix, as well as the promised adjusted testcase that > checks for the original problem. > <006-instcombine-extractvalue-load-v3.patch><007-instcombine-extractvalue-load-test-v2.patch>_______________________________________________ Why is this needed? Front-ends should emit gep+load instead of load+extractvalue. Dan From gohman at apple.com Mon Nov 29 13:20:55 2010 From: gohman at apple.com (Dan Gohman) Date: Mon, 29 Nov 2010 11:20:55 -0800 Subject: [llvm-commits] [PATCH] Fix llvm.invariant support In-Reply-To: References: Message-ID: <0C0069DC-258D-45D1-877E-3921693D2221@apple.com> On Nov 22, 2010, at 7:14 PM, Kenneth Uildriks wrote: > Ping. > > On Sat, Nov 13, 2010 at 7:00 PM, Kenneth Uildriks wrote: >> A less drastic attempt to fix issues with support for >> llvm.invariant.start and llvm.invariant.end. It involves adding >> invariant tracking by block to MemoryDependenceAnalysis. When a load >> is analyzed, the invariant information for that block and its >> predecessors is lazily computed and consulted. If the load's target >> is not invariant anywhere in the block, there is no need to look for >> invariant markers during the scan. If it is invariant throughout the >> block, no def or clobber can be in that block, so we can skip >> backwards to the block(s) that began the invariance. If it is >> invariant through part of the block, we need to continue scanning >> backwards past clobbers until we find the def or an invariant marker - >> we can't assume that the scan starts after the invariant end, but >> instead assume that we *might* have started scanning in the middle of >> an invariant region until we can prove otherwise. How do @llvm.invariant.start and @llvm.invariant.end work? There are at least two interesting situations. First, is this valid? define void @callee(i8* %p) { call void @llvm.invariant.end(i8* %p) ret void } If so, then any call can call @llvm.invariant.end on any pointer it has access to, which substantially weakens what MemDep can do. If not, then it seems to violate high-level IR design principles -- it should always be valid to out-line code regions. Next, what about this? %a = alloca i32 %b = bitcast i32* %a to i8* %c = call {}* @llvm.invariant.begin(i8* %b) %d = bitcast {}* %c to i8* call void @llvm.invariant.end(i8* %d) If I read your patch correctly, it won't notice that the invariant region for %b is ended here, because it's ended with a different pointer. The results for subsequent getPointerDependencyFrom queries will depend on which pointer happens to land first in the std::map. Or did I miss something? Here are a few specific comments on the patch: > + struct InvariantInfo { > + unsigned Size; AliasAnalysis uses uint64_t for sizes now. > + else if (F->getName() == "llvm.invariant.start" > + else if (F->getName() == "llvm.invariant.end" These should use F->getIntrinsicID(). > @@ -321,8 +367,11 @@ > > if (R == AliasAnalysis::NoAlias) > continue; > - if (R == AliasAnalysis::MayAlias) > - return MemDepResult::getClobber(Inst); > + if (R == AliasAnalysis::MayAlias) { > + if (!InvariantInside) > + return MemDepResult::getClobber(Inst); > + MayBeClobbered = true; > + } > return MemDepResult::getDef(Inst); > } It's not obvious what's happening here. If the pointer is invariant inside the block, why is it marked MayBeClobbered? And, a testcase demonstrating the basic functionality would be helpful. Dan From resistor at mac.com Mon Nov 29 13:22:08 2010 From: resistor at mac.com (Owen Anderson) Date: Mon, 29 Nov 2010 19:22:08 -0000 Subject: [llvm-commits] [llvm] r120307 - /llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Message-ID: <20101129192208.524192A6C12D@llvm.org> Author: resistor Date: Mon Nov 29 13:22:08 2010 New Revision: 120307 URL: http://llvm.org/viewvc/llvm-project?rev=120307&view=rev Log: Thumb2 encodings for system instructions. Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td?rev=120307&r1=120306&r2=120307&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Mon Nov 29 13:22:08 2010 @@ -3045,6 +3045,26 @@ let Inst{25-20} = 0b111010; let Inst{15-14} = 0b10; let Inst{12} = 0; + + bits<11> opt; + + // mode number + let Inst{4-0} = opt{4-0}; + + // M flag + let Inst{8} = opt{5}; + + // F flag + let Inst{5} = opt{6}; + + // I flag + let Inst{6} = opt{7}; + + // A flag + let Inst{7} = opt{8}; + + // imod flag + let Inst{10-9} = opt{10-9}; } // A6.3.4 Branches and miscellaneous control @@ -3082,53 +3102,75 @@ let Inst{31-27} = 0b11110; let Inst{26-20} = 0b1111111; let Inst{15-12} = 0b1000; + + bits<4> opt; + let Inst{19-16} = opt{3-0}; +} + +class T2SRS pattern> + : T2I { + bits<5> mode; + let Inst{4-0} = mode{4-0}; } // Store Return State is a system instruction -- for disassembly only -def t2SRSDBW : T2I<(outs),(ins i32imm:$mode),NoItinerary,"srsdb","\tsp!, $mode", +def t2SRSDBW : T2SRS< + (outs),(ins i32imm:$mode),NoItinerary,"srsdb","\tsp!, $mode", [/* For disassembly only; pattern left blank */]> { let Inst{31-27} = 0b11101; let Inst{26-20} = 0b0000010; // W = 1 } -def t2SRSDB : T2I<(outs),(ins i32imm:$mode),NoItinerary,"srsdb","\tsp, $mode", +def t2SRSDB : T2SRS< + (outs),(ins i32imm:$mode),NoItinerary,"srsdb","\tsp, $mode", [/* For disassembly only; pattern left blank */]> { let Inst{31-27} = 0b11101; let Inst{26-20} = 0b0000000; // W = 0 } -def t2SRSIAW : T2I<(outs),(ins i32imm:$mode),NoItinerary,"srsia","\tsp!, $mode", +def t2SRSIAW : T2SRS< + (outs),(ins i32imm:$mode),NoItinerary,"srsia","\tsp!, $mode", [/* For disassembly only; pattern left blank */]> { let Inst{31-27} = 0b11101; let Inst{26-20} = 0b0011010; // W = 1 } -def t2SRSIA : T2I<(outs), (ins i32imm:$mode),NoItinerary,"srsia","\tsp, $mode", +def t2SRSIA : T2SRS< + (outs), (ins i32imm:$mode),NoItinerary,"srsia","\tsp, $mode", [/* For disassembly only; pattern left blank */]> { let Inst{31-27} = 0b11101; let Inst{26-20} = 0b0011000; // W = 0 } // Return From Exception is a system instruction -- for disassembly only -def t2RFEDBW : T2I<(outs), (ins rGPR:$base), NoItinerary, "rfedb", "\t$base!", + +class T2RFE pattern> + : T2I { + bits<4> Rn; + let Inst{19-16} = Rn{3-0}; +} + +def t2RFEDBW : T2RFE<(outs), (ins rGPR:$Rn), NoItinerary, "rfedb", "\t$Rn!", [/* For disassembly only; pattern left blank */]> { let Inst{31-27} = 0b11101; let Inst{26-20} = 0b0000011; // W = 1 } -def t2RFEDB : T2I<(outs), (ins rGPR:$base), NoItinerary, "rfeab", "\t$base", +def t2RFEDB : T2RFE<(outs), (ins rGPR:$Rn), NoItinerary, "rfeab", "\t$Rn", [/* For disassembly only; pattern left blank */]> { let Inst{31-27} = 0b11101; let Inst{26-20} = 0b0000001; // W = 0 } -def t2RFEIAW : T2I<(outs), (ins rGPR:$base), NoItinerary, "rfeia", "\t$base!", +def t2RFEIAW : T2RFE<(outs), (ins rGPR:$Rn), NoItinerary, "rfeia", "\t$Rn!", [/* For disassembly only; pattern left blank */]> { let Inst{31-27} = 0b11101; let Inst{26-20} = 0b0011011; // W = 1 } -def t2RFEIA : T2I<(outs), (ins rGPR:$base), NoItinerary, "rfeia", "\t$base", +def t2RFEIA : T2RFE<(outs), (ins rGPR:$Rn), NoItinerary, "rfeia", "\t$Rn", [/* For disassembly only; pattern left blank */]> { let Inst{31-27} = 0b11101; let Inst{26-20} = 0b0011001; // W = 0 From clattner at apple.com Mon Nov 29 13:26:48 2010 From: clattner at apple.com (Chris Lattner) Date: Mon, 29 Nov 2010 11:26:48 -0800 Subject: [llvm-commits] [llvm] r120307 - /llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td In-Reply-To: <20101129192208.524192A6C12D@llvm.org> References: <20101129192208.524192A6C12D@llvm.org> Message-ID: <979FC999-FA41-4FFE-8D1E-449F5F067904@apple.com> On Nov 29, 2010, at 11:22 AM, Owen Anderson wrote: > Author: resistor > Date: Mon Nov 29 13:22:08 2010 > New Revision: 120307 > > URL: http://llvm.org/viewvc/llvm-project?rev=120307&view=rev > Log: > Thumb2 encodings for system instructions. Hi Owen, Following my harassment of Bill yesterday, why not add arguments to T2SRS that take the bit values instead of assigning them with 'let' statements? -Chris > > Modified: > llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td > > Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td?rev=120307&r1=120306&r2=120307&view=diff > ============================================================================== > --- llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td (original) > +++ llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Mon Nov 29 13:22:08 2010 > @@ -3045,6 +3045,26 @@ > let Inst{25-20} = 0b111010; > let Inst{15-14} = 0b10; > let Inst{12} = 0; > + > + bits<11> opt; > + > + // mode number > + let Inst{4-0} = opt{4-0}; > + > + // M flag > + let Inst{8} = opt{5}; > + > + // F flag > + let Inst{5} = opt{6}; > + > + // I flag > + let Inst{6} = opt{7}; > + > + // A flag > + let Inst{7} = opt{8}; > + > + // imod flag > + let Inst{10-9} = opt{10-9}; > } > > // A6.3.4 Branches and miscellaneous control > @@ -3082,53 +3102,75 @@ > let Inst{31-27} = 0b11110; > let Inst{26-20} = 0b1111111; > let Inst{15-12} = 0b1000; > + > + bits<4> opt; > + let Inst{19-16} = opt{3-0}; > +} > + > +class T2SRS + string opc, string asm, list pattern> > + : T2I { > + bits<5> mode; > + let Inst{4-0} = mode{4-0}; > } > > // Store Return State is a system instruction -- for disassembly only > -def t2SRSDBW : T2I<(outs),(ins i32imm:$mode),NoItinerary,"srsdb","\tsp!, $mode", > +def t2SRSDBW : T2SRS< > + (outs),(ins i32imm:$mode),NoItinerary,"srsdb","\tsp!, $mode", > [/* For disassembly only; pattern left blank */]> { > let Inst{31-27} = 0b11101; > let Inst{26-20} = 0b0000010; // W = 1 > } > > -def t2SRSDB : T2I<(outs),(ins i32imm:$mode),NoItinerary,"srsdb","\tsp, $mode", > +def t2SRSDB : T2SRS< > + (outs),(ins i32imm:$mode),NoItinerary,"srsdb","\tsp, $mode", > [/* For disassembly only; pattern left blank */]> { > let Inst{31-27} = 0b11101; > let Inst{26-20} = 0b0000000; // W = 0 > } > > -def t2SRSIAW : T2I<(outs),(ins i32imm:$mode),NoItinerary,"srsia","\tsp!, $mode", > +def t2SRSIAW : T2SRS< > + (outs),(ins i32imm:$mode),NoItinerary,"srsia","\tsp!, $mode", > [/* For disassembly only; pattern left blank */]> { > let Inst{31-27} = 0b11101; > let Inst{26-20} = 0b0011010; // W = 1 > } > > -def t2SRSIA : T2I<(outs), (ins i32imm:$mode),NoItinerary,"srsia","\tsp, $mode", > +def t2SRSIA : T2SRS< > + (outs), (ins i32imm:$mode),NoItinerary,"srsia","\tsp, $mode", > [/* For disassembly only; pattern left blank */]> { > let Inst{31-27} = 0b11101; > let Inst{26-20} = 0b0011000; // W = 0 > } > > // Return From Exception is a system instruction -- for disassembly only > -def t2RFEDBW : T2I<(outs), (ins rGPR:$base), NoItinerary, "rfedb", "\t$base!", > + > +class T2RFE + string opc, string asm, list pattern> > + : T2I { > + bits<4> Rn; > + let Inst{19-16} = Rn{3-0}; > +} > + > +def t2RFEDBW : T2RFE<(outs), (ins rGPR:$Rn), NoItinerary, "rfedb", "\t$Rn!", > [/* For disassembly only; pattern left blank */]> { > let Inst{31-27} = 0b11101; > let Inst{26-20} = 0b0000011; // W = 1 > } > > -def t2RFEDB : T2I<(outs), (ins rGPR:$base), NoItinerary, "rfeab", "\t$base", > +def t2RFEDB : T2RFE<(outs), (ins rGPR:$Rn), NoItinerary, "rfeab", "\t$Rn", > [/* For disassembly only; pattern left blank */]> { > let Inst{31-27} = 0b11101; > let Inst{26-20} = 0b0000001; // W = 0 > } > > -def t2RFEIAW : T2I<(outs), (ins rGPR:$base), NoItinerary, "rfeia", "\t$base!", > +def t2RFEIAW : T2RFE<(outs), (ins rGPR:$Rn), NoItinerary, "rfeia", "\t$Rn!", > [/* For disassembly only; pattern left blank */]> { > let Inst{31-27} = 0b11101; > let Inst{26-20} = 0b0011011; // W = 1 > } > > -def t2RFEIA : T2I<(outs), (ins rGPR:$base), NoItinerary, "rfeia", "\t$base", > +def t2RFEIA : T2RFE<(outs), (ins rGPR:$Rn), NoItinerary, "rfeia", "\t$Rn", > [/* For disassembly only; pattern left blank */]> { > let Inst{31-27} = 0b11101; > let Inst{26-20} = 0b0011001; // W = 0 > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From clattner at apple.com Mon Nov 29 13:28:20 2010 From: clattner at apple.com (Chris Lattner) Date: Mon, 29 Nov 2010 11:28:20 -0800 Subject: [llvm-commits] [Review request] Constant folding insertvalue instructions. In-Reply-To: References: Message-ID: Looks great! Please commit, -Chris On Nov 27, 2010, at 2:05 PM, Frits van Bommel wrote: > Okay, so this is a bit embarrassing. I somehow completely missed > ConstantExpr::get{Insert,Extract}Value() methods. Instead of > reinventing the wheel, here's a much simpler patch that uses those > methods to add both insertvalue and extractvalue folding to > ConstantFoldInstruction(). > > Okay to commit? > <005-constfold-insert-extract-value.patch><002-constprop-insertvalue-test.patch><004-constprop-extractvalue-test.patch>_______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From bigcheesegs at gmail.com Mon Nov 29 13:28:48 2010 From: bigcheesegs at gmail.com (Michael J. Spencer) Date: Mon, 29 Nov 2010 19:28:48 -0000 Subject: [llvm-commits] [llvm] r120308 - /llvm/trunk/cmake/modules/LLVMLibDeps.cmake Message-ID: <20101129192848.7C40B2A6C12D@llvm.org> Author: mspencer Date: Mon Nov 29 13:28:48 2010 New Revision: 120308 URL: http://llvm.org/viewvc/llvm-project?rev=120308&view=rev Log: Update library dependencies changed in the System -> Support merge. Modified: llvm/trunk/cmake/modules/LLVMLibDeps.cmake Modified: llvm/trunk/cmake/modules/LLVMLibDeps.cmake URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/LLVMLibDeps.cmake?rev=120308&r1=120307&r2=120308&view=diff ============================================================================== --- llvm/trunk/cmake/modules/LLVMLibDeps.cmake (original) +++ llvm/trunk/cmake/modules/LLVMLibDeps.cmake Mon Nov 29 13:28:48 2010 @@ -1,68 +1,67 @@ set(MSVC_LIB_DEPS_LLVMARMAsmParser LLVMARMCodeGen LLVMARMInfo LLVMMC LLVMMCParser LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMARMAsmPrinter LLVMMC LLVMSupport) -set(MSVC_LIB_DEPS_LLVMARMCodeGen LLVMARMAsmPrinter LLVMARMInfo LLVMAnalysis LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSupport LLVMSystem LLVMTarget) -set(MSVC_LIB_DEPS_LLVMARMDisassembler LLVMARMCodeGen LLVMARMInfo LLVMMC LLVMSupport LLVMSystem) +set(MSVC_LIB_DEPS_LLVMARMCodeGen LLVMARMAsmPrinter LLVMARMInfo LLVMAnalysis LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSupport LLVMTarget) +set(MSVC_LIB_DEPS_LLVMARMDisassembler LLVMARMCodeGen LLVMARMInfo LLVMMC LLVMSupport) set(MSVC_LIB_DEPS_LLVMARMInfo LLVMMC LLVMSupport) -set(MSVC_LIB_DEPS_LLVMAlphaCodeGen LLVMAlphaInfo LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSupport LLVMSystem LLVMTarget) +set(MSVC_LIB_DEPS_LLVMAlphaCodeGen LLVMAlphaInfo LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMAlphaInfo LLVMMC LLVMSupport) -set(MSVC_LIB_DEPS_LLVMAnalysis LLVMCore LLVMSupport LLVMSystem LLVMTarget) -set(MSVC_LIB_DEPS_LLVMArchive LLVMBitReader LLVMCore LLVMSupport LLVMSystem) -set(MSVC_LIB_DEPS_LLVMAsmParser LLVMCore LLVMSupport LLVMSystem) -set(MSVC_LIB_DEPS_LLVMAsmPrinter LLVMAnalysis LLVMCodeGen LLVMCore LLVMMC LLVMMCParser LLVMSupport LLVMSystem LLVMTarget) +set(MSVC_LIB_DEPS_LLVMAnalysis LLVMCore LLVMSupport LLVMTarget) +set(MSVC_LIB_DEPS_LLVMArchive LLVMBitReader LLVMCore LLVMSupport) +set(MSVC_LIB_DEPS_LLVMAsmParser LLVMCore LLVMSupport) +set(MSVC_LIB_DEPS_LLVMAsmPrinter LLVMAnalysis LLVMCodeGen LLVMCore LLVMMC LLVMMCParser LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMBitReader LLVMCore LLVMSupport) set(MSVC_LIB_DEPS_LLVMBitWriter LLVMCore LLVMSupport) set(MSVC_LIB_DEPS_LLVMBlackfinCodeGen LLVMAsmPrinter LLVMBlackfinInfo LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMBlackfinInfo LLVMMC LLVMSupport) -set(MSVC_LIB_DEPS_LLVMCBackend LLVMAnalysis LLVMCBackendInfo LLVMCodeGen LLVMCore LLVMMC LLVMScalarOpts LLVMSupport LLVMSystem LLVMTarget LLVMTransformUtils LLVMipa) +set(MSVC_LIB_DEPS_LLVMCBackend LLVMAnalysis LLVMCBackendInfo LLVMCodeGen LLVMCore LLVMMC LLVMScalarOpts LLVMSupport LLVMTarget LLVMTransformUtils LLVMipa) set(MSVC_LIB_DEPS_LLVMCBackendInfo LLVMMC LLVMSupport) set(MSVC_LIB_DEPS_LLVMCellSPUCodeGen LLVMAsmPrinter LLVMCellSPUInfo LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMCellSPUInfo LLVMMC LLVMSupport) -set(MSVC_LIB_DEPS_LLVMCodeGen LLVMAnalysis LLVMCore LLVMMC LLVMScalarOpts LLVMSupport LLVMSystem LLVMTarget LLVMTransformUtils) -set(MSVC_LIB_DEPS_LLVMCore LLVMSupport LLVMSystem) -set(MSVC_LIB_DEPS_LLVMCppBackend LLVMCore LLVMCppBackendInfo LLVMSupport LLVMSystem LLVMTarget) +set(MSVC_LIB_DEPS_LLVMCodeGen LLVMAnalysis LLVMCore LLVMMC LLVMScalarOpts LLVMSupport LLVMTarget LLVMTransformUtils) +set(MSVC_LIB_DEPS_LLVMCore LLVMSupport) +set(MSVC_LIB_DEPS_LLVMCppBackend LLVMCore LLVMCppBackendInfo LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMCppBackendInfo LLVMMC LLVMSupport) -set(MSVC_LIB_DEPS_LLVMExecutionEngine LLVMCore LLVMSupport LLVMSystem LLVMTarget) -set(MSVC_LIB_DEPS_LLVMInstCombine LLVMAnalysis LLVMCore LLVMSupport LLVMSystem LLVMTarget LLVMTransformUtils) -set(MSVC_LIB_DEPS_LLVMInstrumentation LLVMAnalysis LLVMCore LLVMSupport LLVMSystem LLVMTransformUtils) -set(MSVC_LIB_DEPS_LLVMInterpreter LLVMCodeGen LLVMCore LLVMExecutionEngine LLVMSupport LLVMSystem LLVMTarget) -set(MSVC_LIB_DEPS_LLVMJIT LLVMCodeGen LLVMCore LLVMExecutionEngine LLVMMC LLVMSupport LLVMSystem LLVMTarget) -set(MSVC_LIB_DEPS_LLVMLinker LLVMArchive LLVMBitReader LLVMCore LLVMSupport LLVMSystem LLVMTransformUtils) -set(MSVC_LIB_DEPS_LLVMMBlazeAsmParser LLVMMBlazeCodeGen LLVMMBlazeInfo LLVMMC LLVMMCParser LLVMSupport LLVMSystem LLVMTarget) -set(MSVC_LIB_DEPS_LLVMMBlazeAsmPrinter LLVMMC LLVMSupport LLVMSystem) -set(MSVC_LIB_DEPS_LLVMMBlazeCodeGen LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMBlazeAsmPrinter LLVMMBlazeInfo LLVMMC LLVMSelectionDAG LLVMSupport LLVMSystem LLVMTarget) +set(MSVC_LIB_DEPS_LLVMExecutionEngine LLVMCore LLVMSupport LLVMTarget) +set(MSVC_LIB_DEPS_LLVMInstCombine LLVMAnalysis LLVMCore LLVMSupport LLVMTarget LLVMTransformUtils) +set(MSVC_LIB_DEPS_LLVMInstrumentation LLVMAnalysis LLVMCore LLVMSupport LLVMTransformUtils) +set(MSVC_LIB_DEPS_LLVMInterpreter LLVMCodeGen LLVMCore LLVMExecutionEngine LLVMSupport LLVMTarget) +set(MSVC_LIB_DEPS_LLVMJIT LLVMCodeGen LLVMCore LLVMExecutionEngine LLVMMC LLVMSupport LLVMTarget) +set(MSVC_LIB_DEPS_LLVMLinker LLVMArchive LLVMBitReader LLVMCore LLVMSupport LLVMTransformUtils) +set(MSVC_LIB_DEPS_LLVMMBlazeAsmParser LLVMMBlazeCodeGen LLVMMBlazeInfo LLVMMC LLVMMCParser LLVMSupport LLVMTarget) +set(MSVC_LIB_DEPS_LLVMMBlazeAsmPrinter LLVMMC LLVMSupport) +set(MSVC_LIB_DEPS_LLVMMBlazeCodeGen LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMBlazeAsmPrinter LLVMMBlazeInfo LLVMMC LLVMSelectionDAG LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMMBlazeDisassembler LLVMMBlazeCodeGen LLVMMBlazeInfo LLVMMC LLVMSupport) set(MSVC_LIB_DEPS_LLVMMBlazeInfo LLVMMC LLVMSupport) -set(MSVC_LIB_DEPS_LLVMMC LLVMSupport LLVMSystem) -set(MSVC_LIB_DEPS_LLVMMCDisassembler LLVMARMAsmParser LLVMARMCodeGen LLVMARMDisassembler LLVMARMInfo LLVMAlphaCodeGen LLVMAlphaInfo LLVMBlackfinCodeGen LLVMBlackfinInfo LLVMCBackend LLVMCBackendInfo LLVMCellSPUCodeGen LLVMCellSPUInfo LLVMCppBackend LLVMCppBackendInfo LLVMMBlazeAsmParser LLVMMBlazeCodeGen LLVMMBlazeDisassembler LLVMMBlazeInfo LLVMMC LLVMMCParser LLVMMSP430CodeGen LLVMMSP430Info LLVMMipsCodeGen LLVMMipsInfo LLVMPTXCodeGen LLVMPTXInfo LLVMPowerPCCodeGen LLVMPowerPCInfo LLVMSparcCodeGen LLVMSparcInfo LLVMSupport LLVMSystem LLVMSystemZCodeGen LLVMSystemZInfo LLVMX86AsmParser LLVMX86CodeGen LLVMX86Disassembler LLVMX86Info LLVMXCoreCodeGen LLVMXCoreInfo) -set(MSVC_LIB_DEPS_LLVMMCJIT LLVMExecutionEngine LLVMSupport LLVMSystem LLVMTarget) +set(MSVC_LIB_DEPS_LLVMMC LLVMSupport) +set(MSVC_LIB_DEPS_LLVMMCDisassembler LLVMARMAsmParser LLVMARMCodeGen LLVMARMDisassembler LLVMARMInfo LLVMAlphaCodeGen LLVMAlphaInfo LLVMBlackfinCodeGen LLVMBlackfinInfo LLVMCBackend LLVMCBackendInfo LLVMCellSPUCodeGen LLVMCellSPUInfo LLVMCppBackend LLVMCppBackendInfo LLVMMBlazeAsmParser LLVMMBlazeCodeGen LLVMMBlazeDisassembler LLVMMBlazeInfo LLVMMC LLVMMCParser LLVMMSP430CodeGen LLVMMSP430Info LLVMMipsCodeGen LLVMMipsInfo LLVMPTXCodeGen LLVMPTXInfo LLVMPowerPCCodeGen LLVMPowerPCInfo LLVMSparcCodeGen LLVMSparcInfo LLVMSupport LLVMSystemZCodeGen LLVMSystemZInfo LLVMX86AsmParser LLVMX86CodeGen LLVMX86Disassembler LLVMX86Info LLVMXCoreCodeGen LLVMXCoreInfo) +set(MSVC_LIB_DEPS_LLVMMCJIT LLVMExecutionEngine LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMMCParser LLVMMC LLVMSupport) set(MSVC_LIB_DEPS_LLVMMSP430AsmPrinter LLVMMC LLVMSupport) -set(MSVC_LIB_DEPS_LLVMMSP430CodeGen LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMMSP430AsmPrinter LLVMMSP430Info LLVMSelectionDAG LLVMSupport LLVMSystem LLVMTarget) +set(MSVC_LIB_DEPS_LLVMMSP430CodeGen LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMMSP430AsmPrinter LLVMMSP430Info LLVMSelectionDAG LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMMSP430Info LLVMMC LLVMSupport) -set(MSVC_LIB_DEPS_LLVMMipsCodeGen LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMMipsInfo LLVMSelectionDAG LLVMSupport LLVMSystem LLVMTarget) +set(MSVC_LIB_DEPS_LLVMMipsCodeGen LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMMipsInfo LLVMSelectionDAG LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMMipsInfo LLVMMC LLVMSupport) -set(MSVC_LIB_DEPS_LLVMObject LLVMSupport LLVMSystem) +set(MSVC_LIB_DEPS_LLVMObject LLVMSupport) set(MSVC_LIB_DEPS_LLVMPTXCodeGen LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMPTXInfo LLVMSelectionDAG LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMPTXInfo LLVMMC LLVMSupport) -set(MSVC_LIB_DEPS_LLVMPowerPCAsmPrinter LLVMMC LLVMSupport LLVMSystem) -set(MSVC_LIB_DEPS_LLVMPowerPCCodeGen LLVMAnalysis LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMPowerPCAsmPrinter LLVMPowerPCInfo LLVMSelectionDAG LLVMSupport LLVMSystem LLVMTarget) +set(MSVC_LIB_DEPS_LLVMPowerPCAsmPrinter LLVMMC LLVMSupport) +set(MSVC_LIB_DEPS_LLVMPowerPCCodeGen LLVMAnalysis LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMPowerPCAsmPrinter LLVMPowerPCInfo LLVMSelectionDAG LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMPowerPCInfo LLVMMC LLVMSupport) -set(MSVC_LIB_DEPS_LLVMScalarOpts LLVMAnalysis LLVMCore LLVMInstCombine LLVMSupport LLVMSystem LLVMTarget LLVMTransformUtils) -set(MSVC_LIB_DEPS_LLVMSelectionDAG LLVMAnalysis LLVMCodeGen LLVMCore LLVMMC LLVMSupport LLVMSystem LLVMTarget) -set(MSVC_LIB_DEPS_LLVMSparcCodeGen LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSparcInfo LLVMSupport LLVMSystem LLVMTarget) +set(MSVC_LIB_DEPS_LLVMScalarOpts LLVMAnalysis LLVMCore LLVMInstCombine LLVMSupport LLVMTarget LLVMTransformUtils) +set(MSVC_LIB_DEPS_LLVMSelectionDAG LLVMAnalysis LLVMCodeGen LLVMCore LLVMMC LLVMSupport LLVMTarget) +set(MSVC_LIB_DEPS_LLVMSparcCodeGen LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSparcInfo LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMSparcInfo LLVMMC LLVMSupport) -set(MSVC_LIB_DEPS_LLVMSupport LLVMSystem) -set(MSVC_LIB_DEPS_LLVMSystem ) +set(MSVC_LIB_DEPS_LLVMSupport ) set(MSVC_LIB_DEPS_LLVMSystemZCodeGen LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSupport LLVMSystemZInfo LLVMTarget) set(MSVC_LIB_DEPS_LLVMSystemZInfo LLVMMC LLVMSupport) -set(MSVC_LIB_DEPS_LLVMTarget LLVMCore LLVMMC LLVMSupport LLVMSystem) -set(MSVC_LIB_DEPS_LLVMTransformUtils LLVMAnalysis LLVMCore LLVMSupport LLVMSystem LLVMTarget LLVMipa) -set(MSVC_LIB_DEPS_LLVMX86AsmParser LLVMMC LLVMMCParser LLVMSupport LLVMSystem LLVMTarget LLVMX86Info) -set(MSVC_LIB_DEPS_LLVMX86AsmPrinter LLVMMC LLVMSupport LLVMSystem) -set(MSVC_LIB_DEPS_LLVMX86CodeGen LLVMAnalysis LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSupport LLVMSystem LLVMTarget LLVMX86AsmPrinter LLVMX86Info) +set(MSVC_LIB_DEPS_LLVMTarget LLVMCore LLVMMC LLVMSupport) +set(MSVC_LIB_DEPS_LLVMTransformUtils LLVMAnalysis LLVMCore LLVMSupport LLVMTarget LLVMipa) +set(MSVC_LIB_DEPS_LLVMX86AsmParser LLVMMC LLVMMCParser LLVMSupport LLVMTarget LLVMX86Info) +set(MSVC_LIB_DEPS_LLVMX86AsmPrinter LLVMMC LLVMSupport) +set(MSVC_LIB_DEPS_LLVMX86CodeGen LLVMAnalysis LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSupport LLVMTarget LLVMX86AsmPrinter LLVMX86Info) set(MSVC_LIB_DEPS_LLVMX86Disassembler LLVMMC LLVMSupport LLVMX86Info) set(MSVC_LIB_DEPS_LLVMX86Info LLVMMC LLVMSupport) set(MSVC_LIB_DEPS_LLVMXCoreCodeGen LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSupport LLVMTarget LLVMXCoreInfo) set(MSVC_LIB_DEPS_LLVMXCoreInfo LLVMMC LLVMSupport) -set(MSVC_LIB_DEPS_LLVMipa LLVMAnalysis LLVMCore LLVMSupport LLVMSystem) -set(MSVC_LIB_DEPS_LLVMipo LLVMAnalysis LLVMCore LLVMScalarOpts LLVMSupport LLVMSystem LLVMTarget LLVMTransformUtils LLVMipa) +set(MSVC_LIB_DEPS_LLVMipa LLVMAnalysis LLVMCore LLVMSupport) +set(MSVC_LIB_DEPS_LLVMipo LLVMAnalysis LLVMCore LLVMScalarOpts LLVMSupport LLVMTarget LLVMTransformUtils LLVMipa) From resistor at mac.com Mon Nov 29 13:29:15 2010 From: resistor at mac.com (Owen Anderson) Date: Mon, 29 Nov 2010 19:29:15 -0000 Subject: [llvm-commits] [llvm] r120309 - /llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Message-ID: <20101129192915.8BD0B2A6C12D@llvm.org> Author: resistor Date: Mon Nov 29 13:29:15 2010 New Revision: 120309 URL: http://llvm.org/viewvc/llvm-project?rev=120309&view=rev Log: Thumb2 encodings for MSR and MRS. Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td?rev=120309&r1=120308&r2=120309&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Mon Nov 29 13:29:15 2010 @@ -3212,8 +3212,14 @@ // Move between special register and ARM core register -- for disassembly only // -// Rd = Instr{11-8} -def t2MRS : T2I<(outs rGPR:$dst), (ins), NoItinerary, "mrs", "\t$dst, cpsr", +class T2MRS pattern> + : T2I { + bits<4> Rd; + let Inst{11-8} = Rd{3-0}; +} + +def t2MRS : T2MRS<(outs rGPR:$Rd), (ins), NoItinerary, "mrs", "\t$Rd, cpsr", [/* For disassembly only; pattern left blank */]> { let Inst{31-27} = 0b11110; let Inst{26} = 0; @@ -3223,8 +3229,8 @@ let Inst{12} = 0; } -// Rd = Instr{11-8} -def t2MRSsys : T2I<(outs rGPR:$dst), (ins), NoItinerary, "mrs", "\t$dst, spsr", +def t2MRSsys : T2MRS< + (outs rGPR:$Rd), (ins), NoItinerary, "mrs", "\t$Rd, spsr", [/* For disassembly only; pattern left blank */]> { let Inst{31-27} = 0b11110; let Inst{26} = 0; @@ -3234,9 +3240,17 @@ let Inst{12} = 0; } -// Rn = Inst{19-16} -def t2MSR : T2I<(outs), (ins rGPR:$src, msr_mask:$mask), NoItinerary, "msr", - "\tcpsr$mask, $src", +class T2MSR pattern> + : T2I { + bits<4> Rn; + bits<4> mask; + let Inst{19-16} = Rn{3-0}; + let Inst{11-8} = mask{3-0}; +} + +def t2MSR : T2MSR<(outs), (ins rGPR:$Rn, msr_mask:$mask), NoItinerary, "msr", + "\tcpsr$mask, $Rn", [/* For disassembly only; pattern left blank */]> { let Inst{31-27} = 0b11110; let Inst{26} = 0; @@ -3246,9 +3260,9 @@ let Inst{12} = 0; } -// Rn = Inst{19-16} -def t2MSRsys : T2I<(outs), (ins rGPR:$src, msr_mask:$mask), NoItinerary, "msr", - "\tspsr$mask, $src", +def t2MSRsys : T2MSR< + (outs), (ins rGPR:$Rn, msr_mask:$mask), NoItinerary, "msr", + "\tspsr$mask, $Rn", [/* For disassembly only; pattern left blank */]> { let Inst{31-27} = 0b11110; let Inst{26} = 0; From grosbach at apple.com Mon Nov 29 13:32:47 2010 From: grosbach at apple.com (Jim Grosbach) Date: Mon, 29 Nov 2010 19:32:47 -0000 Subject: [llvm-commits] [llvm] r120310 - in /llvm/trunk/lib/Target/ARM: ARMAsmPrinter.cpp ARMInstrFormats.td ARMInstrInfo.td ARMInstrThumb.td InstPrinter/ARMInstPrinter.h Message-ID: <20101129193247.C985D2A6C12D@llvm.org> Author: grosbach Date: Mon Nov 29 13:32:47 2010 New Revision: 120310 URL: http://llvm.org/viewvc/llvm-project?rev=120310&view=rev Log: ARM Pseudo-ize tBR_JTr. Modified: llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp llvm/trunk/lib/Target/ARM/ARMInstrFormats.td llvm/trunk/lib/Target/ARM/ARMInstrInfo.td llvm/trunk/lib/Target/ARM/ARMInstrThumb.td llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.h Modified: llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp?rev=120310&r1=120309&r2=120310&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp Mon Nov 29 13:32:47 2010 @@ -936,23 +936,13 @@ EmitJump2Table(MI); return; } - case ARM::tBR_JTr: { - // Lower and emit the instruction itself, then the jump table following it. - MCInst TmpInst; - // FIXME: The branch instruction is really a pseudo. We should xform it - // explicitly. - LowerARMMachineInstrToMCInst(MI, TmpInst, *this); - OutStreamer.EmitInstruction(TmpInst); - - // Output the data for the jump table itself - EmitJumpTable(MI); - return; - } + case ARM::tBR_JTr: case ARM::BR_JTr: { // Lower and emit the instruction itself, then the jump table following it. // mov pc, target MCInst TmpInst; - TmpInst.setOpcode(ARM::MOVr); + unsigned Opc = MI->getOpcode() == ARM::BR_JTr ? ARM::MOVr : ARM::tMOVr; + TmpInst.setOpcode(Opc); TmpInst.addOperand(MCOperand::CreateReg(ARM::PC)); TmpInst.addOperand(MCOperand::CreateReg(MI->getOperand(0).getReg())); // Add predicate operands. @@ -960,6 +950,10 @@ TmpInst.addOperand(MCOperand::CreateReg(0)); OutStreamer.EmitInstruction(TmpInst); + // Make sure the Thumb jump table is 4-byte aligned. + if (Opc == ARM::tMOVr) + EmitAlignment(2); + // Output the data for the jump table itself EmitJumpTable(MI); return; Modified: llvm/trunk/lib/Target/ARM/ARMInstrFormats.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrFormats.td?rev=120310&r1=120309&r2=120310&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrFormats.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrFormats.td Mon Nov 29 13:32:47 2010 @@ -255,6 +255,13 @@ list Predicates = [IsARM]; } +// PseudoInst that's Thumb-mode only. +class tPseudoInst pattern> + : PseudoInst { + let SZ = sz; + list Predicates = [IsThumb]; +} // Almost all ARM instructions are predicable. class I pattern> : Thumb1I; -class T1JTI pattern> - : Thumb1I; // Two-address instructions class T1It { - let PrintMethod = "printJTBlockOperand"; -} def jt2block_operand : Operand { let PrintMethod = "printJT2BlockOperand"; } Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrThumb.td?rev=120310&r1=120309&r2=120310&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrThumb.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrThumb.td Mon Nov 29 13:32:47 2010 @@ -439,14 +439,11 @@ def tBfar : TIx2<0b11110, 0b11, 1, (outs), (ins brtarget:$target), IIC_Br, "bl\t$target",[]>; - let isCodeGenOnly = 1 in - def tBR_JTr : T1JTI<(outs), - (ins tGPR:$target, jtblock_operand:$jt, i32imm:$id), - IIC_Br, "mov\tpc, $target\n\t.align\t2$jt", - [(ARMbrjt tGPR:$target, tjumptable:$jt, imm:$id)]>, - Encoding16 { - let Inst{15-7} = 0b010001101; - let Inst{2-0} = 0b111; + def tBR_JTr : tPseudoInst<(outs), + (ins tGPR:$target, i32imm:$jt, i32imm:$id), + Size2Bytes, IIC_Br, + [(ARMbrjt tGPR:$target, tjumptable:$jt, imm:$id)]> { + list Predicates = [IsThumb, IsThumb1Only]; } } } Modified: llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.h?rev=120310&r1=120309&r2=120310&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.h (original) +++ llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.h Mon Nov 29 13:32:47 2010 @@ -96,7 +96,6 @@ void printRegisterList(const MCInst *MI, unsigned OpNum, raw_ostream &O); // The jump table instructions have custom handling in ARMAsmPrinter // to output the jump table. Nothing further is necessary here. - void printJTBlockOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O) {} void printJT2BlockOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O) {} void printTBAddrMode(const MCInst *MI, unsigned OpNum, raw_ostream &O); void printNoHashImmediate(const MCInst *MI, unsigned OpNum, raw_ostream &O); From bob.wilson at apple.com Mon Nov 29 13:35:23 2010 From: bob.wilson at apple.com (Bob Wilson) Date: Mon, 29 Nov 2010 19:35:23 -0000 Subject: [llvm-commits] [llvm] r120311 - in /llvm/trunk/lib/Target/ARM: ARMScheduleA8.td ARMScheduleA9.td Message-ID: <20101129193523.3E9A52A6C12D@llvm.org> Author: bwilson Date: Mon Nov 29 13:35:23 2010 New Revision: 120311 URL: http://llvm.org/viewvc/llvm-project?rev=120311&view=rev Log: Fix copy-and-paste errors in VLD2-dup scheduling itineraries. Modified: llvm/trunk/lib/Target/ARM/ARMScheduleA8.td llvm/trunk/lib/Target/ARM/ARMScheduleA9.td Modified: llvm/trunk/lib/Target/ARM/ARMScheduleA8.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMScheduleA8.td?rev=120311&r1=120310&r2=120311&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMScheduleA8.td (original) +++ llvm/trunk/lib/Target/ARM/ARMScheduleA8.td Mon Nov 29 13:35:23 2010 @@ -527,13 +527,13 @@ InstrItinData, InstrStage<2, [A8_NLSPipe], 0>, InstrStage<2, [A8_LSPipe]>], - [2, 1]>, + [2, 2, 1]>, // // VLD2dupu InstrItinData, InstrStage<2, [A8_NLSPipe], 0>, InstrStage<2, [A8_LSPipe]>], - [2, 2, 1, 1]>, + [2, 2, 2, 1, 1]>, // // VLD3 InstrItinData, Modified: llvm/trunk/lib/Target/ARM/ARMScheduleA9.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMScheduleA9.td?rev=120311&r1=120310&r2=120311&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMScheduleA9.td (original) +++ llvm/trunk/lib/Target/ARM/ARMScheduleA9.td Mon Nov 29 13:35:23 2010 @@ -894,7 +894,7 @@ InstrStage<8, [A9_DRegsVFP], 0, Reserved>, InstrStage<2, [A9_NPipe], 0>, InstrStage<2, [A9_LSUnit]>], - [3, 1]>, + [3, 3, 1]>, // // VLD2dupu InstrItinData, @@ -903,7 +903,7 @@ InstrStage<8, [A9_DRegsVFP], 0, Reserved>, InstrStage<2, [A9_NPipe], 0>, InstrStage<2, [A9_LSUnit]>], - [3, 2, 1, 1]>, + [3, 3, 2, 1, 1]>, // // VLD3 InstrItinData, From bob.wilson at apple.com Mon Nov 29 13:35:29 2010 From: bob.wilson at apple.com (Bob Wilson) Date: Mon, 29 Nov 2010 19:35:29 -0000 Subject: [llvm-commits] [llvm] r120312 - in /llvm/trunk: lib/Target/ARM/ARMExpandPseudoInsts.cpp lib/Target/ARM/ARMISelDAGToDAG.cpp lib/Target/ARM/ARMInstrNEON.td lib/Target/ARM/ARMSchedule.td lib/Target/ARM/ARMScheduleA8.td lib/Target/ARM/ARMScheduleA9.td test/CodeGen/ARM/vlddup.ll Message-ID: <20101129193529.6E0922A6C12F@llvm.org> Author: bwilson Date: Mon Nov 29 13:35:29 2010 New Revision: 120312 URL: http://llvm.org/viewvc/llvm-project?rev=120312&view=rev Log: Add support for NEON VLD3-dup instructions. Modified: llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp llvm/trunk/lib/Target/ARM/ARMISelDAGToDAG.cpp llvm/trunk/lib/Target/ARM/ARMInstrNEON.td llvm/trunk/lib/Target/ARM/ARMSchedule.td llvm/trunk/lib/Target/ARM/ARMScheduleA8.td llvm/trunk/lib/Target/ARM/ARMScheduleA9.td llvm/trunk/test/CodeGen/ARM/vlddup.ll Modified: llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp?rev=120312&r1=120311&r2=120312&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp Mon Nov 29 13:35:29 2010 @@ -172,6 +172,13 @@ { ARM::VLD2q8Pseudo, ARM::VLD2q8, true, false, SingleSpc, 4, 8 }, { ARM::VLD2q8Pseudo_UPD, ARM::VLD2q8_UPD, true, true, SingleSpc, 4, 8 }, +{ ARM::VLD3DUPd16Pseudo, ARM::VLD3DUPd16, true, false, SingleSpc, 3, 4}, +{ ARM::VLD3DUPd16Pseudo_UPD, ARM::VLD3DUPd16_UPD, true, true, SingleSpc, 3, 4}, +{ ARM::VLD3DUPd32Pseudo, ARM::VLD3DUPd32, true, false, SingleSpc, 3, 2}, +{ ARM::VLD3DUPd32Pseudo_UPD, ARM::VLD3DUPd32_UPD, true, true, SingleSpc, 3, 2}, +{ ARM::VLD3DUPd8Pseudo, ARM::VLD3DUPd8, true, false, SingleSpc, 3, 8}, +{ ARM::VLD3DUPd8Pseudo_UPD, ARM::VLD3DUPd8_UPD, true, true, SingleSpc, 3, 8}, + { ARM::VLD3LNd16Pseudo, ARM::VLD3LNd16, true, false, SingleSpc, 3, 4 }, { ARM::VLD3LNd16Pseudo_UPD, ARM::VLD3LNd16_UPD, true, true, SingleSpc, 3, 4 }, { ARM::VLD3LNd32Pseudo, ARM::VLD3LNd32, true, false, SingleSpc, 3, 2 }, @@ -946,6 +953,12 @@ case ARM::VLD2DUPd8Pseudo_UPD: case ARM::VLD2DUPd16Pseudo_UPD: case ARM::VLD2DUPd32Pseudo_UPD: + case ARM::VLD3DUPd8Pseudo: + case ARM::VLD3DUPd16Pseudo: + case ARM::VLD3DUPd32Pseudo: + case ARM::VLD3DUPd8Pseudo_UPD: + case ARM::VLD3DUPd16Pseudo_UPD: + case ARM::VLD3DUPd32Pseudo_UPD: ExpandVLD(MBBI); break; Modified: llvm/trunk/lib/Target/ARM/ARMISelDAGToDAG.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelDAGToDAG.cpp?rev=120312&r1=120311&r2=120312&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMISelDAGToDAG.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMISelDAGToDAG.cpp Mon Nov 29 13:35:29 2010 @@ -2361,6 +2361,12 @@ return SelectVLDDup(N, 2, Opcodes); } + case ARMISD::VLD3DUP: { + unsigned Opcodes[] = { ARM::VLD3DUPd8Pseudo, ARM::VLD3DUPd16Pseudo, + ARM::VLD3DUPd32Pseudo }; + return SelectVLDDup(N, 3, Opcodes); + } + case ISD::INTRINSIC_VOID: case ISD::INTRINSIC_W_CHAIN: { unsigned IntNo = cast(N->getOperand(1))->getZExtValue(); Modified: llvm/trunk/lib/Target/ARM/ARMInstrNEON.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrNEON.td?rev=120312&r1=120311&r2=120312&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrNEON.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrNEON.td Mon Nov 29 13:35:29 2010 @@ -896,6 +896,48 @@ def VLD2DUPd32Pseudo_UPD : VLDQWBPseudo; // VLD3DUP : Vector Load (single 3-element structure to all lanes) +class VLD3DUP op7_4, string Dt> + : NLdSt<1, 0b10, 0b1110, op7_4, (outs DPR:$Vd, DPR:$dst2, DPR:$dst3), + (ins addrmode6:$Rn), IIC_VLD3dup, + "vld3", Dt, "\\{$Vd[], $dst2[], $dst3[]\\}, $Rn", "", []> { + let Rm = 0b1111; + let Inst{4} = Rn{4}; +} + +def VLD3DUPd8 : VLD3DUP<{0,0,0,?}, "8">; +def VLD3DUPd16 : VLD3DUP<{0,1,0,?}, "16">; +def VLD3DUPd32 : VLD3DUP<{1,0,0,?}, "32">; + +def VLD3DUPd8Pseudo : VLDQQPseudo; +def VLD3DUPd16Pseudo : VLDQQPseudo; +def VLD3DUPd32Pseudo : VLDQQPseudo; + +// ...with double-spaced registers (not used for codegen): +def VLD3DUPd8T : VLD3DUP<{0,0,1,?}, "8">; +def VLD3DUPd16T : VLD3DUP<{0,1,1,?}, "16">; +def VLD3DUPd32T : VLD3DUP<{1,0,1,?}, "32">; + +// ...with address register writeback: +class VLD3DUPWB op7_4, string Dt> + : NLdSt<1, 0b10, 0b1110, op7_4, (outs DPR:$Vd, DPR:$dst2, DPR:$dst3, GPR:$wb), + (ins addrmode6:$Rn, am6offset:$Rm), IIC_VLD3dupu, + "vld3", Dt, "\\{$Vd[], $dst2[], $dst3[]\\}, $Rn$Rm", + "$Rn.addr = $wb", []> { + let Inst{4} = Rn{4}; +} + +def VLD3DUPd8_UPD : VLD3DUPWB<{0,0,0,0}, "8">; +def VLD3DUPd16_UPD : VLD3DUPWB<{0,1,0,?}, "16">; +def VLD3DUPd32_UPD : VLD3DUPWB<{1,0,0,?}, "32">; + +def VLD3DUPd8T_UPD : VLD3DUPWB<{0,0,1,0}, "8">; +def VLD3DUPd16T_UPD : VLD3DUPWB<{0,1,1,?}, "16">; +def VLD3DUPd32T_UPD : VLD3DUPWB<{1,0,1,?}, "32">; + +def VLD3DUPd8Pseudo_UPD : VLDQQWBPseudo; +def VLD3DUPd16Pseudo_UPD : VLDQQWBPseudo; +def VLD3DUPd32Pseudo_UPD : VLDQQWBPseudo; + // VLD4DUP : Vector Load (single 4-element structure to all lanes) // FIXME: Not yet implemented. } // mayLoad = 1, neverHasSideEffects = 1, hasExtraDefRegAllocReq = 1 Modified: llvm/trunk/lib/Target/ARM/ARMSchedule.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMSchedule.td?rev=120312&r1=120311&r2=120312&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMSchedule.td (original) +++ llvm/trunk/lib/Target/ARM/ARMSchedule.td Mon Nov 29 13:35:29 2010 @@ -152,6 +152,8 @@ def IIC_VLD3ln : InstrItinClass; def IIC_VLD3u : InstrItinClass; def IIC_VLD3lnu : InstrItinClass; +def IIC_VLD3dup : InstrItinClass; +def IIC_VLD3dupu : InstrItinClass; def IIC_VLD4 : InstrItinClass; def IIC_VLD4ln : InstrItinClass; def IIC_VLD4u : InstrItinClass; Modified: llvm/trunk/lib/Target/ARM/ARMScheduleA8.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMScheduleA8.td?rev=120312&r1=120311&r2=120312&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMScheduleA8.td (original) +++ llvm/trunk/lib/Target/ARM/ARMScheduleA8.td Mon Nov 29 13:35:29 2010 @@ -559,6 +559,18 @@ InstrStage<5, [A8_LSPipe]>], [4, 4, 5, 2, 1, 1, 1, 1, 1, 2]>, // + // VLD3dup + InstrItinData, + InstrStage<3, [A8_NLSPipe], 0>, + InstrStage<3, [A8_LSPipe]>], + [2, 2, 3, 1]>, + // + // VLD3dupu + InstrItinData, + InstrStage<3, [A8_NLSPipe], 0>, + InstrStage<3, [A8_LSPipe]>], + [2, 2, 3, 2, 1, 1]>, + // // VLD4 InstrItinData, InstrStage<4, [A8_NLSPipe], 0>, Modified: llvm/trunk/lib/Target/ARM/ARMScheduleA9.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMScheduleA9.td?rev=120312&r1=120311&r2=120312&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMScheduleA9.td (original) +++ llvm/trunk/lib/Target/ARM/ARMScheduleA9.td Mon Nov 29 13:35:29 2010 @@ -941,6 +941,24 @@ InstrStage<5, [A9_LSUnit]>], [5, 5, 6, 2, 1, 1, 1, 1, 1, 2]>, // + // VLD3dup + InstrItinData, + InstrStage<1, [A9_MUX0], 0>, + InstrStage<1, [A9_DRegsN], 0, Required>, + InstrStage<9, [A9_DRegsVFP], 0, Reserved>, + InstrStage<3, [A9_NPipe], 0>, + InstrStage<3, [A9_LSUnit]>], + [3, 3, 4, 1]>, + // + // VLD3dupu + InstrItinData, + InstrStage<1, [A9_MUX0], 0>, + InstrStage<1, [A9_DRegsN], 0, Required>, + InstrStage<9, [A9_DRegsVFP], 0, Reserved>, + InstrStage<3, [A9_NPipe], 0>, + InstrStage<3, [A9_LSUnit]>], + [3, 3, 4, 2, 1, 1]>, + // // VLD4 InstrItinData, InstrStage<1, [A9_MUX0], 0>, Modified: llvm/trunk/test/CodeGen/ARM/vlddup.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/vlddup.ll?rev=120312&r1=120311&r2=120312&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/ARM/vlddup.ll (original) +++ llvm/trunk/test/CodeGen/ARM/vlddup.ll Mon Nov 29 13:35:29 2010 @@ -71,3 +71,23 @@ declare %struct.__neon_int8x8x2_t @llvm.arm.neon.vld2lane.v8i8(i8*, <8 x i8>, <8 x i8>, i32, i32) nounwind readonly declare %struct.__neon_int2x32x2_t @llvm.arm.neon.vld2lane.v2i32(i32*, <2 x i32>, <2 x i32>, i32, i32) nounwind readonly + +%struct.__neon_int16x4x3_t = type { <4 x i16>, <4 x i16>, <4 x i16> } + +define <4 x i16> @vld3dupi16(i16* %A) nounwind { +;CHECK: vld3dupi16: +;Check the (default) alignment value. VLD3 does not support alignment. +;CHECK: vld3.16 {d16[], d17[], d18[]}, [r0] + %tmp0 = tail call %struct.__neon_int16x4x3_t @llvm.arm.neon.vld3lane.v4i16(i16* %A, <4 x i16> undef, <4 x i16> undef, <4 x i16> undef, i32 0, i32 8) + %tmp1 = extractvalue %struct.__neon_int16x4x3_t %tmp0, 0 + %tmp2 = shufflevector <4 x i16> %tmp1, <4 x i16> undef, <4 x i32> zeroinitializer + %tmp3 = extractvalue %struct.__neon_int16x4x3_t %tmp0, 1 + %tmp4 = shufflevector <4 x i16> %tmp3, <4 x i16> undef, <4 x i32> zeroinitializer + %tmp5 = extractvalue %struct.__neon_int16x4x3_t %tmp0, 2 + %tmp6 = shufflevector <4 x i16> %tmp5, <4 x i16> undef, <4 x i32> zeroinitializer + %tmp7 = add <4 x i16> %tmp2, %tmp4 + %tmp8 = add <4 x i16> %tmp7, %tmp6 + ret <4 x i16> %tmp8 +} + +declare %struct.__neon_int16x4x3_t @llvm.arm.neon.vld3lane.v4i16(i16*, <4 x i16>, <4 x i16>, <4 x i16>, i32, i32) nounwind readonly From dmalyshev at accesssoftek.com Mon Nov 29 13:38:52 2010 From: dmalyshev at accesssoftek.com (Danil Malyshev) Date: Mon, 29 Nov 2010 11:38:52 -0800 Subject: [llvm-commits] Fix output stream opened in text instead of binary mode on MinGW In-Reply-To: <1D923093-7E74-457D-AF4E-CE879B273076@2pi.dk> References: <6AE1604EE3EC5F4296C096518C6B77EE1705A19A78@mail.accesssoftek.com> <1D923093-7E74-457D-AF4E-CE879B273076@2pi.dk> Message-ID: <6AE1604EE3EC5F4296C096518C6B77EE1705A19B31@mail.accesssoftek.com> Hello Jakob, > Can you find a way of doing this without increasing the size of the raw_ostream object, and without imposing any overhead on users that don't need it? Ok, I did it. Attached file fix-cout-02.diff is the new patch. It change only llvm-ar, llvm-ranlib, and attributes of *.toc files in Archive tests. Thank you, Danil ________________________________ From: Jakob Stoklund Olesen [mailto:stoklund at 2pi.dk] Sent: Sunday, November 28, 2010 1:48 AM To: Danil Malyshev Cc: llvm-commits at cs.uiuc.edu Subject: Re: [llvm-commits] Fix output stream opened in text instead of binary mode on MinGW On Nov 24, 2010, at 9:07 AM, Danil Malyshev wrote: Hi Danil, Thanks for working on this. 1. Adds support for setw() method to the llvm::raw_ostream. Please don't do that, though. Part of the idea behind raw_ostream is that it doesn't have any of the overhead from formatting and so on. Can you find a way of doing this without increasing the size of the raw_ostream object, and without imposing any overhead on users that don't need it? Thanks, /jakob -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20101129/15b12036/attachment.html -------------- next part -------------- A non-text attachment was scrubbed... Name: fix-cout-02.diff Type: application/octet-stream Size: 6257 bytes Desc: fix-cout-02.diff Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20101129/15b12036/attachment.obj From benny.kra at googlemail.com Mon Nov 29 13:36:46 2010 From: benny.kra at googlemail.com (Benjamin Kramer) Date: Mon, 29 Nov 2010 19:36:46 -0000 Subject: [llvm-commits] [llvm] r120313 - in /llvm/trunk: include/llvm/System/ lib/System/ Message-ID: <20101129193646.5CA152A6C12D@llvm.org> Author: d0k Date: Mon Nov 29 13:36:46 2010 New Revision: 120313 URL: http://llvm.org/viewvc/llvm-project?rev=120313&view=rev Log: Remove empty directories. Removed: llvm/trunk/include/llvm/System/ llvm/trunk/lib/System/ From dmalyshev at accesssoftek.com Mon Nov 29 13:43:41 2010 From: dmalyshev at accesssoftek.com (Danil Malyshev) Date: Mon, 29 Nov 2010 11:43:41 -0800 Subject: [llvm-commits] Fix output stream opened in text instead of binary mode on MinGW In-Reply-To: <4931539F-BC52-4235-B421-C9140759527B@apple.com> References: <6AE1604EE3EC5F4296C096518C6B77EE1705A19A78@mail.accesssoftek.com> <4931539F-BC52-4235-B421-C9140759527B@apple.com> Message-ID: <6AE1604EE3EC5F4296C096518C6B77EE1705A19B34@mail.accesssoftek.com> Hello Dan, Thanks, I just did so in the second patch. Thank you, Danil -----Original Message----- From: Dan Gohman [mailto:gohman at apple.com] Sent: Monday, November 29, 2010 10:20 PM To: Danil Malyshev Cc: llvm-commits at cs.uiuc.edu Subject: Re: [llvm-commits] Fix output stream opened in text instead of binary mode on MinGW On Nov 24, 2010, at 9:07 AM, Danil Malyshev wrote: > Hello everyone, > > Please find attached a patch to review. > > This patch > > 1. Adds support for setw() method to the llvm::raw_ostream. An alternative to unpopular iostream-style manipulators is llvm/Support/Format.h. Dan From stoklund at 2pi.dk Mon Nov 29 13:44:20 2010 From: stoklund at 2pi.dk (Jakob Stoklund Olesen) Date: Mon, 29 Nov 2010 11:44:20 -0800 Subject: [llvm-commits] Fix output stream opened in text instead of binary mode on MinGW In-Reply-To: <6AE1604EE3EC5F4296C096518C6B77EE1705A19B31@mail.accesssoftek.com> References: <6AE1604EE3EC5F4296C096518C6B77EE1705A19A78@mail.accesssoftek.com> <1D923093-7E74-457D-AF4E-CE879B273076@2pi.dk> <6AE1604EE3EC5F4296C096518C6B77EE1705A19B31@mail.accesssoftek.com> Message-ID: On Nov 29, 2010, at 11:38 AM, Danil Malyshev wrote: > Hello Jakob, > > > Can you find a way of doing this without increasing the size of the raw_ostream object, and without imposing any overhead on users that don't need it? > > Ok, I did it. > Attached file fix-cout-02.diff is the new patch. It change only llvm-ar, llvm-ranlib, and attributes of *.toc files in Archive tests. That is much better, thanks! Somebody else should have an opinion about how we handle newlines and binary files in SVN on Windows. /jakob From cdavis at mines.edu Mon Nov 29 13:44:50 2010 From: cdavis at mines.edu (Charles Davis) Date: Mon, 29 Nov 2010 19:44:50 -0000 Subject: [llvm-commits] [llvm] r120314 - in /llvm/trunk: ./ include/llvm/Support/ lib/CompilerDriver/ lib/Support/ lib/Support/Unix/ lib/Support/Windows/ tools/gold/ Message-ID: <20101129194451.376922A6C12D@llvm.org> Author: cdavis Date: Mon Nov 29 13:44:50 2010 New Revision: 120314 URL: http://llvm.org/viewvc/llvm-project?rev=120314&view=rev Log: Now to chant the magical incantation that will exorcise the System library from LLVM forever: grep -lR "llvm/System" * | grep -v .svn | xargs sed -ie 's#llvm/System#llvm/Support#g' Modified: llvm/trunk/Makefile.rules llvm/trunk/include/llvm/Support/AIXDataTypesFix.h llvm/trunk/include/llvm/Support/Alarm.h llvm/trunk/include/llvm/Support/Atomic.h llvm/trunk/include/llvm/Support/DynamicLibrary.h llvm/trunk/include/llvm/Support/Errno.h llvm/trunk/include/llvm/Support/FEnv.h llvm/trunk/include/llvm/Support/Host.h llvm/trunk/include/llvm/Support/IncludeFile.h llvm/trunk/include/llvm/Support/Memory.h llvm/trunk/include/llvm/Support/Mutex.h llvm/trunk/include/llvm/Support/Path.h llvm/trunk/include/llvm/Support/PathV2.h llvm/trunk/include/llvm/Support/Process.h llvm/trunk/include/llvm/Support/Program.h llvm/trunk/include/llvm/Support/Signals.h llvm/trunk/include/llvm/Support/Solaris.h llvm/trunk/include/llvm/Support/ThreadLocal.h llvm/trunk/include/llvm/Support/Threading.h llvm/trunk/include/llvm/Support/Valgrind.h llvm/trunk/lib/CompilerDriver/CMakeLists.txt llvm/trunk/lib/CompilerDriver/Makefile llvm/trunk/lib/Support/IncludeFile.cpp llvm/trunk/lib/Support/Threading.cpp llvm/trunk/lib/Support/Unix/Host.inc llvm/trunk/lib/Support/Unix/Mutex.inc llvm/trunk/lib/Support/Unix/Path.inc llvm/trunk/lib/Support/Unix/Program.inc llvm/trunk/lib/Support/Unix/RWMutex.inc llvm/trunk/lib/Support/Unix/ThreadLocal.inc llvm/trunk/lib/Support/Unix/Unix.h llvm/trunk/lib/Support/Unix/system_error.inc llvm/trunk/lib/Support/Windows/Host.inc llvm/trunk/lib/Support/Windows/Mutex.inc llvm/trunk/lib/Support/Windows/Path.inc llvm/trunk/lib/Support/Windows/RWMutex.inc llvm/trunk/lib/Support/Windows/ThreadLocal.inc llvm/trunk/lib/Support/Windows/system_error.inc llvm/trunk/tools/gold/Makefile Modified: llvm/trunk/Makefile.rules URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile.rules?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/Makefile.rules (original) +++ llvm/trunk/Makefile.rules Mon Nov 29 13:44:50 2010 @@ -205,7 +205,7 @@ TOOLNAME = $(LLVMC_BASED_DRIVER) LLVMLIBS = CompilerDriver.a -LINK_COMPONENTS = support system +LINK_COMPONENTS = support endif # LLVMC_BASED_DRIVER Modified: llvm/trunk/include/llvm/Support/AIXDataTypesFix.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/AIXDataTypesFix.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/AIXDataTypesFix.h (original) +++ llvm/trunk/include/llvm/Support/AIXDataTypesFix.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===-- llvm/System/AIXDataTypesFix.h - Fix datatype defs ------*- C++ -*-===// +//===-- llvm/Support/AIXDataTypesFix.h - Fix datatype defs ------*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/include/llvm/Support/Alarm.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Alarm.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/Alarm.h (original) +++ llvm/trunk/include/llvm/Support/Alarm.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Alarm.h - Alarm Generation support ----------*- C++ -*-===// +//===- llvm/Support/Alarm.h - Alarm Generation support ----------*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/include/llvm/Support/Atomic.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Atomic.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/Atomic.h (original) +++ llvm/trunk/include/llvm/Support/Atomic.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Atomic.h - Atomic Operations -----------------*- C++ -*-===// +//===- llvm/Support/Atomic.h - Atomic Operations -----------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/include/llvm/Support/DynamicLibrary.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/DynamicLibrary.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/DynamicLibrary.h (original) +++ llvm/trunk/include/llvm/Support/DynamicLibrary.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===-- llvm/System/DynamicLibrary.h - Portable Dynamic Library -*- C++ -*-===// +//===-- llvm/Support/DynamicLibrary.h - Portable Dynamic Library -*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/include/llvm/Support/Errno.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Errno.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/Errno.h (original) +++ llvm/trunk/include/llvm/Support/Errno.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Errno.h - Portable+convenient errno handling -*- C++ -*-===// +//===- llvm/Support/Errno.h - Portable+convenient errno handling -*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/include/llvm/Support/FEnv.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/FEnv.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/FEnv.h (original) +++ llvm/trunk/include/llvm/Support/FEnv.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/FEnv.h - Host floating-point exceptions ------*- C++ -*-===// +//===- llvm/Support/FEnv.h - Host floating-point exceptions ------*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/include/llvm/Support/Host.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Host.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/Host.h (original) +++ llvm/trunk/include/llvm/Support/Host.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Host.h - Host machine characteristics --------*- C++ -*-===// +//===- llvm/Support/Host.h - Host machine characteristics --------*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/include/llvm/Support/IncludeFile.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/IncludeFile.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/IncludeFile.h (original) +++ llvm/trunk/include/llvm/Support/IncludeFile.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/IncludeFile.h - Ensure Linking Of Library ---*- C++ -*-===// +//===- llvm/Support/IncludeFile.h - Ensure Linking Of Library ---*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/include/llvm/Support/Memory.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Memory.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/Memory.h (original) +++ llvm/trunk/include/llvm/Support/Memory.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Memory.h - Memory Support --------------------*- C++ -*-===// +//===- llvm/Support/Memory.h - Memory Support --------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/include/llvm/Support/Mutex.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Mutex.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/Mutex.h (original) +++ llvm/trunk/include/llvm/Support/Mutex.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Mutex.h - Mutex Operating System Concept -----*- C++ -*-===// +//===- llvm/Support/Mutex.h - Mutex Operating System Concept -----*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/include/llvm/Support/Path.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Path.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/Path.h (original) +++ llvm/trunk/include/llvm/Support/Path.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Path.h - Path Operating System Concept -------*- C++ -*-===// +//===- llvm/Support/Path.h - Path Operating System Concept -------*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/include/llvm/Support/PathV2.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/PathV2.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/PathV2.h (original) +++ llvm/trunk/include/llvm/Support/PathV2.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/PathV2.h - Path Operating System Concept -----*- C++ -*-===// +//===- llvm/Support/PathV2.h - Path Operating System Concept -----*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/include/llvm/Support/Process.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Process.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/Process.h (original) +++ llvm/trunk/include/llvm/Support/Process.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Process.h ------------------------------------*- C++ -*-===// +//===- llvm/Support/Process.h ------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/include/llvm/Support/Program.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Program.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/Program.h (original) +++ llvm/trunk/include/llvm/Support/Program.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Program.h ------------------------------------*- C++ -*-===// +//===- llvm/Support/Program.h ------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/include/llvm/Support/Signals.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Signals.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/Signals.h (original) +++ llvm/trunk/include/llvm/Support/Signals.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Signals.h - Signal Handling support ----------*- C++ -*-===// +//===- llvm/Support/Signals.h - Signal Handling support ----------*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/include/llvm/Support/Solaris.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Solaris.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/Solaris.h (original) +++ llvm/trunk/include/llvm/Support/Solaris.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -/*===- llvm/System/Solaris.h ------------------------------------*- C++ -*-===* +/*===- llvm/Support/Solaris.h ------------------------------------*- C++ -*-===* * * The LLVM Compiler Infrastructure * Modified: llvm/trunk/include/llvm/Support/ThreadLocal.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/ThreadLocal.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/ThreadLocal.h (original) +++ llvm/trunk/include/llvm/Support/ThreadLocal.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/ThreadLocal.h - Thread Local Data ------------*- C++ -*-===// +//===- llvm/Support/ThreadLocal.h - Thread Local Data ------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/include/llvm/Support/Threading.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Threading.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/Threading.h (original) +++ llvm/trunk/include/llvm/Support/Threading.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===-- llvm/System/Threading.h - Control multithreading mode --*- C++ -*-===// +//===-- llvm/Support/Threading.h - Control multithreading mode --*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/include/llvm/Support/Valgrind.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Valgrind.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/Valgrind.h (original) +++ llvm/trunk/include/llvm/Support/Valgrind.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Valgrind.h - Communication with Valgrind -----*- C++ -*-===// +//===- llvm/Support/Valgrind.h - Communication with Valgrind -----*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/lib/CompilerDriver/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CompilerDriver/CMakeLists.txt?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/lib/CompilerDriver/CMakeLists.txt (original) +++ llvm/trunk/lib/CompilerDriver/CMakeLists.txt Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -set(LLVM_LINK_COMPONENTS support system) +set(LLVM_LINK_COMPONENTS support) set(LLVM_REQUIRES_EH 1) add_llvm_tool(llvmc Modified: llvm/trunk/lib/CompilerDriver/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CompilerDriver/Makefile?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/lib/CompilerDriver/Makefile (original) +++ llvm/trunk/lib/CompilerDriver/Makefile Mon Nov 29 13:44:50 2010 @@ -13,7 +13,7 @@ # name doesn't start with "LLVM" and NO_LLVM_CONFIG is set. LIBRARYNAME = CompilerDriver -LINK_COMPONENTS = support system +LINK_COMPONENTS = support NO_LLVM_CONFIG = 1 Modified: llvm/trunk/lib/Support/IncludeFile.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/IncludeFile.cpp?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/lib/Support/IncludeFile.cpp (original) +++ llvm/trunk/lib/Support/IncludeFile.cpp Mon Nov 29 13:44:50 2010 @@ -16,5 +16,5 @@ using namespace llvm; // This constructor is used to ensure linking of other modules. See the -// llvm/System/IncludeFile.h header for details. +// llvm/Support/IncludeFile.h header for details. IncludeFile::IncludeFile(const void*) {} Modified: llvm/trunk/lib/Support/Threading.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Threading.cpp?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/lib/Support/Threading.cpp (original) +++ llvm/trunk/lib/Support/Threading.cpp Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===-- llvm/System/Threading.cpp- Control multithreading mode --*- C++ -*-==// +//===-- llvm/Support/Threading.cpp- Control multithreading mode --*- C++ -*-==// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/lib/Support/Unix/Host.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Host.inc?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/lib/Support/Unix/Host.inc (original) +++ llvm/trunk/lib/Support/Unix/Host.inc Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ - //===- llvm/System/Unix/Host.inc -------------------------------*- C++ -*-===// + //===- llvm/Support/Unix/Host.inc -------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/lib/Support/Unix/Mutex.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Mutex.inc?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/lib/Support/Unix/Mutex.inc (original) +++ llvm/trunk/lib/Support/Unix/Mutex.inc Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Unix/Mutex.inc - Unix Mutex Implementation ---*- C++ -*-===// +//===- llvm/Support/Unix/Mutex.inc - Unix Mutex Implementation ---*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/lib/Support/Unix/Path.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Path.inc?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/lib/Support/Unix/Path.inc (original) +++ llvm/trunk/lib/Support/Unix/Path.inc Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Unix/Path.cpp - Unix Path Implementation -----*- C++ -*-===// +//===- llvm/Support/Unix/Path.cpp - Unix Path Implementation -----*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/lib/Support/Unix/Program.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Program.inc?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/lib/Support/Unix/Program.inc (original) +++ llvm/trunk/lib/Support/Unix/Program.inc Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Unix/Program.cpp -----------------------------*- C++ -*-===// +//===- llvm/Support/Unix/Program.cpp -----------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/lib/Support/Unix/RWMutex.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/RWMutex.inc?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/lib/Support/Unix/RWMutex.inc (original) +++ llvm/trunk/lib/Support/Unix/RWMutex.inc Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//= llvm/System/Unix/RWMutex.inc - Unix Reader/Writer Mutual Exclusion Lock =// +//= llvm/Support/Unix/RWMutex.inc - Unix Reader/Writer Mutual Exclusion Lock =// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/lib/Support/Unix/ThreadLocal.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/ThreadLocal.inc?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/lib/Support/Unix/ThreadLocal.inc (original) +++ llvm/trunk/lib/Support/Unix/ThreadLocal.inc Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//=== llvm/System/Unix/ThreadLocal.inc - Unix Thread Local Data -*- C++ -*-===// +//=== llvm/Support/Unix/ThreadLocal.inc - Unix Thread Local Data -*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/lib/Support/Unix/Unix.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Unix.h?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/lib/Support/Unix/Unix.h (original) +++ llvm/trunk/lib/Support/Unix/Unix.h Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Unix/Unix.h - Common Unix Include File -------*- C++ -*-===// +//===- llvm/Support/Unix/Unix.h - Common Unix Include File -------*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/lib/Support/Unix/system_error.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/system_error.inc?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/lib/Support/Unix/system_error.inc (original) +++ llvm/trunk/lib/Support/Unix/system_error.inc Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Unix/system_error.inc - Unix error_code ------*- C++ -*-===// +//===- llvm/Support/Unix/system_error.inc - Unix error_code ------*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/lib/Support/Windows/Host.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Host.inc?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/lib/Support/Windows/Host.inc (original) +++ llvm/trunk/lib/Support/Windows/Host.inc Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Win32/Host.inc -------------------------------*- C++ -*-===// +//===- llvm/Support/Win32/Host.inc -------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/lib/Support/Windows/Mutex.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Mutex.inc?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/lib/Support/Windows/Mutex.inc (original) +++ llvm/trunk/lib/Support/Windows/Mutex.inc Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Win32/Mutex.inc - Win32 Mutex Implementation -*- C++ -*-===// +//===- llvm/Support/Win32/Mutex.inc - Win32 Mutex Implementation -*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/lib/Support/Windows/Path.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Path.inc?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/lib/Support/Windows/Path.inc (original) +++ llvm/trunk/lib/Support/Windows/Path.inc Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Win32/Path.cpp - Win32 Path Implementation ---*- C++ -*-===// +//===- llvm/Support/Win32/Path.cpp - Win32 Path Implementation ---*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/lib/Support/Windows/RWMutex.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/RWMutex.inc?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/lib/Support/Windows/RWMutex.inc (original) +++ llvm/trunk/lib/Support/Windows/RWMutex.inc Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//= llvm/System/Win32/Mutex.inc - Win32 Reader/Writer Mutual Exclusion Lock =// +//= llvm/Support/Win32/Mutex.inc - Win32 Reader/Writer Mutual Exclusion Lock =// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/lib/Support/Windows/ThreadLocal.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/ThreadLocal.inc?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/lib/Support/Windows/ThreadLocal.inc (original) +++ llvm/trunk/lib/Support/Windows/ThreadLocal.inc Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//= llvm/System/Win32/ThreadLocal.inc - Win32 Thread Local Data -*- C++ -*-===// +//= llvm/Support/Win32/ThreadLocal.inc - Win32 Thread Local Data -*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/lib/Support/Windows/system_error.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/system_error.inc?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/lib/Support/Windows/system_error.inc (original) +++ llvm/trunk/lib/Support/Windows/system_error.inc Mon Nov 29 13:44:50 2010 @@ -1,4 +1,4 @@ -//===- llvm/System/Win32/system_error.inc - Windows error_code --*- C++ -*-===// +//===- llvm/Support/Win32/system_error.inc - Windows error_code --*- C++ -*-===// // // The LLVM Compiler Infrastructure // Modified: llvm/trunk/tools/gold/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/gold/Makefile?rev=120314&r1=120313&r2=120314&view=diff ============================================================================== --- llvm/trunk/tools/gold/Makefile (original) +++ llvm/trunk/tools/gold/Makefile Mon Nov 29 13:44:50 2010 @@ -21,7 +21,7 @@ SHARED_LIBRARY = 1 LOADABLE_MODULE = 1 -LINK_COMPONENTS := support system +LINK_COMPONENTS := support LIBS += -llto # Because off_t is used in the public API, the largefile parts are required for From fvbommel at gmail.com Mon Nov 29 14:28:35 2010 From: fvbommel at gmail.com (Frits van Bommel) Date: Mon, 29 Nov 2010 21:28:35 +0100 Subject: [llvm-commits] [Review request] Instcombine: extractvalue from load --> load from gep In-Reply-To: <272A49D7-AFC1-4830-A1EB-CA05EB773B03@apple.com> References: <272A49D7-AFC1-4830-A1EB-CA05EB773B03@apple.com> Message-ID: On Mon, Nov 29, 2010 at 8:20 PM, Dan Gohman wrote: > On Nov 28, 2010, at 2:43 AM, Frits van Bommel wrote: > >> <006-instcombine-extractvalue-load-v3.patch><007-instcombine-extractvalue-load-test-v2.patch>_______________________________________________ > > Why is this needed? Front-ends should emit gep+load instead of > load+extractvalue. Not all front ends might do that. For instance, it might load both fields of a struct if thinks it's going to need them anyway but then one gets optimized out. Also, when I accidentally messed this up so it asserted every time it fired clang could no longer compile LLVM. I think the problem was in the passmanager, but I might be misremembering. Anyway, I bugpointed it to a file that contained several instances of this pattern so apparently it *does* occur for clang-generated code. I didn't investigate where they came from, but maybe some other optimization pass is generating extractvalue instructions? Honestly, the main reason I did this was because I was bored and disagreed with the comment, but apparently it does occur in real code... From fvbommel at gmail.com Mon Nov 29 14:34:50 2010 From: fvbommel at gmail.com (Frits van Bommel) Date: Mon, 29 Nov 2010 21:34:50 +0100 Subject: [llvm-commits] [Review request] Instcombine: extractvalue from load --> load from gep In-Reply-To: References: <272A49D7-AFC1-4830-A1EB-CA05EB773B03@apple.com> Message-ID: On Mon, Nov 29, 2010 at 9:28 PM, Frits van Bommel wrote: > Also, when I accidentally messed this up so it asserted every time it > fired clang could no longer compile LLVM. I think the problem was in > the passmanager, but I might be misremembering. Looks like I misremembered; I just found the file I bugpointed and it's called PreAllocSplitting.ll. It doesn't contain any extractvalue instructions, so they must've been generated by one or more of the passes clang runs at -O3. From fvbommel at gmail.com Mon Nov 29 14:36:52 2010 From: fvbommel at gmail.com (Frits van Bommel) Date: Mon, 29 Nov 2010 20:36:52 -0000 Subject: [llvm-commits] [llvm] r120316 - in /llvm/trunk: lib/Analysis/ConstantFolding.cpp test/Transforms/ConstProp/extractvalue.ll test/Transforms/ConstProp/insertvalue.ll Message-ID: <20101129203652.593DC2A6C12D@llvm.org> Author: fvbommel Date: Mon Nov 29 14:36:52 2010 New Revision: 120316 URL: http://llvm.org/viewvc/llvm-project?rev=120316&view=rev Log: Teach ConstantFoldInstruction() how to fold insertvalue and extractvalue. Added: llvm/trunk/test/Transforms/ConstProp/extractvalue.ll llvm/trunk/test/Transforms/ConstProp/insertvalue.ll Modified: llvm/trunk/lib/Analysis/ConstantFolding.cpp Modified: llvm/trunk/lib/Analysis/ConstantFolding.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ConstantFolding.cpp?rev=120316&r1=120315&r2=120316&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/ConstantFolding.cpp (original) +++ llvm/trunk/lib/Analysis/ConstantFolding.cpp Mon Nov 29 14:36:52 2010 @@ -740,7 +740,18 @@ if (const LoadInst *LI = dyn_cast(I)) return ConstantFoldLoadInst(LI, TD); - + + if (InsertValueInst *IVI = dyn_cast(I)) + return ConstantExpr::getInsertValue( + cast(IVI->getAggregateOperand()), + cast(IVI->getInsertedValueOperand()), + IVI->idx_begin(), IVI->getNumIndices()); + + if (ExtractValueInst *EVI = dyn_cast(I)) + return ConstantExpr::getExtractValue( + cast(EVI->getAggregateOperand()), + EVI->idx_begin(), EVI->getNumIndices()); + return ConstantFoldInstOperands(I->getOpcode(), I->getType(), Ops.data(), Ops.size(), TD); } Added: llvm/trunk/test/Transforms/ConstProp/extractvalue.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ConstProp/extractvalue.ll?rev=120316&view=auto ============================================================================== --- llvm/trunk/test/Transforms/ConstProp/extractvalue.ll (added) +++ llvm/trunk/test/Transforms/ConstProp/extractvalue.ll Mon Nov 29 14:36:52 2010 @@ -0,0 +1,68 @@ +; RUN: opt < %s -constprop -S | FileCheck %s + +%struct = type { i32, [4 x i8] } +%array = type [3 x %struct] + +define i32 @test1() { + %A = extractvalue %struct { i32 2, [4 x i8] c"foo\00" }, 0 + ret i32 %A +; CHECK: @test1 +; CHECK: ret i32 2 +} + +define i8 @test2() { + %A = extractvalue %struct { i32 2, [4 x i8] c"foo\00" }, 1, 2 + ret i8 %A +; CHECK: @test2 +; CHECK: ret i8 111 +} + +define i32 @test3() { + %A = extractvalue %array [ %struct { i32 0, [4 x i8] c"aaaa" }, %struct { i32 1, [4 x i8] c"bbbb" }, %struct { i32 2, [4 x i8] c"cccc" } ], 1, 0 + ret i32 %A +; CHECK: @test3 +; CHECK: ret i32 1 +} + +define i32 @zeroinitializer-test1() { + %A = extractvalue %struct zeroinitializer, 0 + ret i32 %A +; CHECK: @zeroinitializer-test1 +; CHECK: ret i32 0 +} + +define i8 @zeroinitializer-test2() { + %A = extractvalue %struct zeroinitializer, 1, 2 + ret i8 %A +; CHECK: @zeroinitializer-test2 +; CHECK: ret i8 0 +} + +define i32 @zeroinitializer-test3() { + %A = extractvalue %array zeroinitializer, 1, 0 + ret i32 %A +; CHECK: @zeroinitializer-test3 +; CHECK: ret i32 0 +} + +define i32 @undef-test1() { + %A = extractvalue %struct undef, 0 + ret i32 %A +; CHECK: @undef-test1 +; CHECK: ret i32 undef +} + +define i8 @undef-test2() { + %A = extractvalue %struct undef, 1, 2 + ret i8 %A +; CHECK: @undef-test2 +; CHECK: ret i8 undef +} + +define i32 @undef-test3() { + %A = extractvalue %array undef, 1, 0 + ret i32 %A +; CHECK: @undef-test3 +; CHECK: ret i32 undef +} + Added: llvm/trunk/test/Transforms/ConstProp/insertvalue.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ConstProp/insertvalue.ll?rev=120316&view=auto ============================================================================== --- llvm/trunk/test/Transforms/ConstProp/insertvalue.ll (added) +++ llvm/trunk/test/Transforms/ConstProp/insertvalue.ll Mon Nov 29 14:36:52 2010 @@ -0,0 +1,68 @@ +; RUN: opt < %s -constprop -S | FileCheck %s + +%struct = type { i32, [4 x i8] } +%array = type [3 x %struct] + +define %struct @test1() { + %A = insertvalue %struct { i32 2, [4 x i8] c"foo\00" }, i32 1, 0 + ret %struct %A +; CHECK: @test1 +; CHECK: ret %struct { i32 1, [4 x i8] c"foo\00" } +} + +define %struct @test2() { + %A = insertvalue %struct { i32 2, [4 x i8] c"foo\00" }, i8 1, 1, 2 + ret %struct %A +; CHECK: @test2 +; CHECK: ret %struct { i32 2, [4 x i8] c"fo\01\00" } +} + +define %array @test3() { + %A = insertvalue %array [ %struct { i32 0, [4 x i8] c"aaaa" }, %struct { i32 1, [4 x i8] c"bbbb" }, %struct { i32 2, [4 x i8] c"cccc" } ], i32 -1, 1, 0 + ret %array %A +; CHECK: @test3 +; CHECK:ret %array [%struct { i32 0, [4 x i8] c"aaaa" }, %struct { i32 -1, [4 x i8] c"bbbb" }, %struct { i32 2, [4 x i8] c"cccc" }] +} + +define %struct @zeroinitializer-test1() { + %A = insertvalue %struct zeroinitializer, i32 1, 0 + ret %struct %A +; CHECK: @zeroinitializer-test1 +; CHECK: ret %struct { i32 1, [4 x i8] zeroinitializer } +} + +define %struct @zeroinitializer-test2() { + %A = insertvalue %struct zeroinitializer, i8 1, 1, 2 + ret %struct %A +; CHECK: @zeroinitializer-test2 +; CHECK: ret %struct { i32 0, [4 x i8] c"\00\00\01\00" } +} + +define %array @zeroinitializer-test3() { + %A = insertvalue %array zeroinitializer, i32 1, 1, 0 + ret %array %A +; CHECK: @zeroinitializer-test3 +; CHECK: ret %array [%struct zeroinitializer, %struct { i32 1, [4 x i8] zeroinitializer }, %struct zeroinitializer] +} + +define %struct @undef-test1() { + %A = insertvalue %struct undef, i32 1, 0 + ret %struct %A +; CHECK: @undef-test1 +; CHECK: ret %struct { i32 1, [4 x i8] undef } +} + +define %struct @undef-test2() { + %A = insertvalue %struct undef, i8 0, 1, 2 + ret %struct %A +; CHECK: @undef-test2 +; CHECK: ret %struct { i32 undef, [4 x i8] [i8 undef, i8 undef, i8 0, i8 undef] } +} + +define %array @undef-test3() { + %A = insertvalue %array undef, i32 0, 1, 0 + ret %array %A +; CHECK: @undef-test3 +; CHECK: ret %array [%struct undef, %struct { i32 0, [4 x i8] undef }, %struct undef] +} + From fvbommel at gmail.com Mon Nov 29 14:40:01 2010 From: fvbommel at gmail.com (Frits van Bommel) Date: Mon, 29 Nov 2010 21:40:01 +0100 Subject: [llvm-commits] [Review request] Constant folding insertvalue instructions. In-Reply-To: References: Message-ID: On Mon, Nov 29, 2010 at 8:28 PM, Chris Lattner wrote: > Looks great! Please commit, r120316. From resistor at mac.com Mon Nov 29 14:38:48 2010 From: resistor at mac.com (Owen Anderson) Date: Mon, 29 Nov 2010 20:38:48 -0000 Subject: [llvm-commits] [llvm] r120317 - /llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Message-ID: <20101129203849.057D02A6C12D@llvm.org> Author: resistor Date: Mon Nov 29 14:38:48 2010 New Revision: 120317 URL: http://llvm.org/viewvc/llvm-project?rev=120317&view=rev Log: Improving the factoring of several instruction encodings. Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td?rev=120317&r1=120316&r2=120317&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Mon Nov 29 14:38:48 2010 @@ -3107,74 +3107,53 @@ let Inst{19-16} = opt{3-0}; } -class T2SRS op31_20, + dag oops, dag iops, InstrItinClass itin, string opc, string asm, list pattern> : T2I { + let Inst{31-20} = op31_20{11-0}; + bits<5> mode; let Inst{4-0} = mode{4-0}; } // Store Return State is a system instruction -- for disassembly only -def t2SRSDBW : T2SRS< +def t2SRSDBW : T2SRS<0b111010000010, (outs),(ins i32imm:$mode),NoItinerary,"srsdb","\tsp!, $mode", - [/* For disassembly only; pattern left blank */]> { - let Inst{31-27} = 0b11101; - let Inst{26-20} = 0b0000010; // W = 1 -} - -def t2SRSDB : T2SRS< + [/* For disassembly only; pattern left blank */]>; +def t2SRSDB : T2SRS<0b111010000000, (outs),(ins i32imm:$mode),NoItinerary,"srsdb","\tsp, $mode", - [/* For disassembly only; pattern left blank */]> { - let Inst{31-27} = 0b11101; - let Inst{26-20} = 0b0000000; // W = 0 -} - -def t2SRSIAW : T2SRS< + [/* For disassembly only; pattern left blank */]>; +def t2SRSIAW : T2SRS<0b111010011010, (outs),(ins i32imm:$mode),NoItinerary,"srsia","\tsp!, $mode", - [/* For disassembly only; pattern left blank */]> { - let Inst{31-27} = 0b11101; - let Inst{26-20} = 0b0011010; // W = 1 -} - -def t2SRSIA : T2SRS< + [/* For disassembly only; pattern left blank */]>; +def t2SRSIA : T2SRS<0b111010011000, (outs), (ins i32imm:$mode),NoItinerary,"srsia","\tsp, $mode", - [/* For disassembly only; pattern left blank */]> { - let Inst{31-27} = 0b11101; - let Inst{26-20} = 0b0011000; // W = 0 -} + [/* For disassembly only; pattern left blank */]>; // Return From Exception is a system instruction -- for disassembly only -class T2RFE op31_20, dag oops, dag iops, InstrItinClass itin, string opc, string asm, list pattern> : T2I { + let Inst{31-20} = op31_20{11-0}; + bits<4> Rn; let Inst{19-16} = Rn{3-0}; } -def t2RFEDBW : T2RFE<(outs), (ins rGPR:$Rn), NoItinerary, "rfedb", "\t$Rn!", - [/* For disassembly only; pattern left blank */]> { - let Inst{31-27} = 0b11101; - let Inst{26-20} = 0b0000011; // W = 1 -} - -def t2RFEDB : T2RFE<(outs), (ins rGPR:$Rn), NoItinerary, "rfeab", "\t$Rn", - [/* For disassembly only; pattern left blank */]> { - let Inst{31-27} = 0b11101; - let Inst{26-20} = 0b0000001; // W = 0 -} - -def t2RFEIAW : T2RFE<(outs), (ins rGPR:$Rn), NoItinerary, "rfeia", "\t$Rn!", - [/* For disassembly only; pattern left blank */]> { - let Inst{31-27} = 0b11101; - let Inst{26-20} = 0b0011011; // W = 1 -} - -def t2RFEIA : T2RFE<(outs), (ins rGPR:$Rn), NoItinerary, "rfeia", "\t$Rn", - [/* For disassembly only; pattern left blank */]> { - let Inst{31-27} = 0b11101; - let Inst{26-20} = 0b0011001; // W = 0 -} +def t2RFEDBW : T2RFE<0b111010000011, + (outs), (ins rGPR:$Rn), NoItinerary, "rfedb", "\t$Rn!", + [/* For disassembly only; pattern left blank */]>; +def t2RFEDB : T2RFE<0b111010000001, + (outs), (ins rGPR:$Rn), NoItinerary, "rfeab", "\t$Rn", + [/* For disassembly only; pattern left blank */]>; +def t2RFEIAW : T2RFE<0b111010011011, + (outs), (ins rGPR:$Rn), NoItinerary, "rfeia", "\t$Rn!", + [/* For disassembly only; pattern left blank */]>; +def t2RFEIA : T2RFE<0b111010011001, + (outs), (ins rGPR:$Rn), NoItinerary, "rfeia", "\t$Rn", + [/* For disassembly only; pattern left blank */]>; //===----------------------------------------------------------------------===// // Non-Instruction Patterns @@ -3212,62 +3191,45 @@ // Move between special register and ARM core register -- for disassembly only // -class T2MRS op31_20, bits<2> op15_14, bits<1> op12, + dag oops, dag iops, InstrItinClass itin, string opc, string asm, list pattern> : T2I { - bits<4> Rd; - let Inst{11-8} = Rd{3-0}; + let Inst{31-20} = op31_20{11-0}; + let Inst{15-14} = op15_14{1-0}; + let Inst{12} = op12{0}; } -def t2MRS : T2MRS<(outs rGPR:$Rd), (ins), NoItinerary, "mrs", "\t$Rd, cpsr", - [/* For disassembly only; pattern left blank */]> { - let Inst{31-27} = 0b11110; - let Inst{26} = 0; - let Inst{25-21} = 0b11111; - let Inst{20} = 0; // The R bit. - let Inst{15-14} = 0b10; - let Inst{12} = 0; +class T2MRS op31_20, bits<2> op15_14, bits<1> op12, + dag oops, dag iops, InstrItinClass itin, + string opc, string asm, list pattern> + : T2SpecialReg { + bits<4> Rd; + let Inst{11-8} = Rd{3-0}; } -def t2MRSsys : T2MRS< +def t2MRS : T2MRS<0b111100111110, 0b10, 0, + (outs rGPR:$Rd), (ins), NoItinerary, "mrs", "\t$Rd, cpsr", + [/* For disassembly only; pattern left blank */]>; +def t2MRSsys : T2MRS<0b111100111111, 0b10, 0, (outs rGPR:$Rd), (ins), NoItinerary, "mrs", "\t$Rd, spsr", - [/* For disassembly only; pattern left blank */]> { - let Inst{31-27} = 0b11110; - let Inst{26} = 0; - let Inst{25-21} = 0b11111; - let Inst{20} = 1; // The R bit. - let Inst{15-14} = 0b10; - let Inst{12} = 0; -} + [/* For disassembly only; pattern left blank */]>; -class T2MSR op31_20, bits<2> op15_14, bits<1> op12, + dag oops, dag iops, InstrItinClass itin, string opc, string asm, list pattern> - : T2I { + : T2SpecialReg { bits<4> Rn; bits<4> mask; let Inst{19-16} = Rn{3-0}; let Inst{11-8} = mask{3-0}; } -def t2MSR : T2MSR<(outs), (ins rGPR:$Rn, msr_mask:$mask), NoItinerary, "msr", +def t2MSR : T2MSR<0b111100111000, 0b10, 0, + (outs), (ins rGPR:$Rn, msr_mask:$mask), NoItinerary, "msr", "\tcpsr$mask, $Rn", - [/* For disassembly only; pattern left blank */]> { - let Inst{31-27} = 0b11110; - let Inst{26} = 0; - let Inst{25-21} = 0b11100; - let Inst{20} = 0; // The R bit. - let Inst{15-14} = 0b10; - let Inst{12} = 0; -} - -def t2MSRsys : T2MSR< + [/* For disassembly only; pattern left blank */]>; +def t2MSRsys : T2MSR<0b111100111001, 0b10, 0, (outs), (ins rGPR:$Rn, msr_mask:$mask), NoItinerary, "msr", "\tspsr$mask, $Rn", - [/* For disassembly only; pattern left blank */]> { - let Inst{31-27} = 0b11110; - let Inst{26} = 0; - let Inst{25-21} = 0b11100; - let Inst{20} = 1; // The R bit. - let Inst{15-14} = 0b10; - let Inst{12} = 0; -} + [/* For disassembly only; pattern left blank */]>; From clattner at apple.com Mon Nov 29 14:48:00 2010 From: clattner at apple.com (Chris Lattner) Date: Mon, 29 Nov 2010 12:48:00 -0800 Subject: [llvm-commits] [llvm] r120314 - in /llvm/trunk: ./ include/llvm/Support/ lib/CompilerDriver/ lib/Support/ lib/Support/Unix/ lib/Support/Windows/ tools/gold/ In-Reply-To: <20101129194451.376922A6C12D@llvm.org> References: <20101129194451.376922A6C12D@llvm.org> Message-ID: On Nov 29, 2010, at 11:44 AM, Charles Davis wrote: > Author: cdavis > Date: Mon Nov 29 13:44:50 2010 > New Revision: 120314 > > URL: http://llvm.org/viewvc/llvm-project?rev=120314&view=rev > Log: > Now to chant the magical incantation that will exorcise the System library > from LLVM forever: Thanks! Please fix the file header lines to fit in 80 columns though :) -Chris From fvbommel at gmail.com Mon Nov 29 14:55:40 2010 From: fvbommel at gmail.com (Frits van Bommel) Date: Mon, 29 Nov 2010 20:55:40 -0000 Subject: [llvm-commits] [llvm] r120319 - /llvm/trunk/test/Transforms/InstCombine/extractvalue.ll Message-ID: <20101129205540.BFFFE2A6C12D@llvm.org> Author: fvbommel Date: Mon Nov 29 14:55:40 2010 New Revision: 120319 URL: http://llvm.org/viewvc/llvm-project?rev=120319&view=rev Log: Update this test to keep testing the -instcombine transform it's supposed to be testing instead of triggering the improved constant folding for insertvalue and extractvalue. Modified: llvm/trunk/test/Transforms/InstCombine/extractvalue.ll Modified: llvm/trunk/test/Transforms/InstCombine/extractvalue.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/extractvalue.ll?rev=120319&r1=120318&r2=120319&view=diff ============================================================================== --- llvm/trunk/test/Transforms/InstCombine/extractvalue.ll (original) +++ llvm/trunk/test/Transforms/InstCombine/extractvalue.ll Mon Nov 29 14:55:40 2010 @@ -4,10 +4,10 @@ ; together declare void @bar({i32, i32} %a) -define i32 @foo() { +define i32 @foo(i32 %a, i32 %b) { ; Build a simple struct and pull values out again - %s1.1 = insertvalue {i32, i32} undef, i32 0, 0 - %s1 = insertvalue {i32, i32} %s1.1, i32 1, 1 + %s1.1 = insertvalue {i32, i32} undef, i32 %a, 0 + %s1 = insertvalue {i32, i32} %s1.1, i32 %b, 1 %v1 = extractvalue {i32, i32} %s1, 0 %v2 = extractvalue {i32, i32} %s1, 1 From kennethuil at gmail.com Mon Nov 29 15:08:35 2010 From: kennethuil at gmail.com (Kenneth Uildriks) Date: Mon, 29 Nov 2010 15:08:35 -0600 Subject: [llvm-commits] [PATCH] Fix llvm.invariant support In-Reply-To: <0C0069DC-258D-45D1-877E-3921693D2221@apple.com> References: <0C0069DC-258D-45D1-877E-3921693D2221@apple.com> Message-ID: On Mon, Nov 29, 2010 at 1:20 PM, Dan Gohman wrote: > > On Nov 22, 2010, at 7:14 PM, Kenneth Uildriks wrote: > >> Ping. >> >> On Sat, Nov 13, 2010 at 7:00 PM, Kenneth Uildriks wrote: >>> A less drastic attempt to fix issues with support for >>> llvm.invariant.start and llvm.invariant.end. ?It involves adding >>> invariant tracking by block to MemoryDependenceAnalysis. ?When a load >>> is analyzed, the invariant information for that block and its >>> predecessors is lazily computed and consulted. ?If the load's target >>> is not invariant anywhere in the block, there is no need to look for >>> invariant markers during the scan. ?If it is invariant throughout the >>> block, no def or clobber can be in that block, so we can skip >>> backwards to the block(s) that began the invariance. ?If it is >>> invariant through part of the block, we need to continue scanning >>> backwards past clobbers until we find the def or an invariant marker - >>> we can't assume that the scan starts after the invariant end, but >>> instead assume that we *might* have started scanning in the middle of >>> an invariant region until we can prove otherwise. > > How do @llvm.invariant.start and @llvm.invariant.end work? > > There are at least two interesting situations. > > First, is this valid? > > define void @callee(i8* %p) { > ?call void @llvm.invariant.end(i8* %p) > ?ret void > } > > If so, then any call can call @llvm.invariant.end on any pointer it has > access to, which substantially weakens what MemDep can do. If not, then > it seems to violate high-level IR design principles -- it should always > be valid to out-line code regions. My understanding from previous discussions was that llvm.invariant is a function local thing, so that construct would not be recognized. You can always outline code inside of the llvm.invariant markers without outlining the invariant markers themselves. > > Next, what about this? > > ?%a = alloca i32 > ?%b = bitcast i32* %a to i8* > ?%c = call {}* @llvm.invariant.begin(i8* %b) > ?%d = bitcast {}* %c to i8* > ?call void @llvm.invariant.end(i8* %d) > > If I read your patch correctly, it won't notice that the invariant > region for %b is ended here, because it's ended with a different > pointer. The results for subsequent getPointerDependencyFrom queries > will depend on which pointer happens to land first in the std::map. > Or did I miss something? I believe a given query uses alias analysis to determine whether an invariant begin/end marker applies to the pointer being queried. > > Here are a few specific comments on the patch: > >> + ?struct InvariantInfo { >> + ? ?unsigned Size; > > AliasAnalysis uses uint64_t for sizes now. OK, I'll change it. > >> + ? ? ?else if (F->getName() == "llvm.invariant.start" > >> + ? ? ?else if (F->getName() == "llvm.invariant.end" > > These should use F->getIntrinsicID(). Thanks for the heads up. I'll change that too. > >> @@ -321,8 +367,11 @@ >> >> ? ? ? ?if (R == AliasAnalysis::NoAlias) >> ? ? ? ? ?continue; >> - ? ? ?if (R == AliasAnalysis::MayAlias) >> - ? ? ? ?return MemDepResult::getClobber(Inst); >> + ? ? ?if (R == AliasAnalysis::MayAlias) { >> + ? ? ? ?if (!InvariantInside) >> + ? ? ? ? ?return MemDepResult::getClobber(Inst); >> + ? ? ? ?MayBeClobbered = true; >> + ? ? ?} >> ? ? ? ?return MemDepResult::getDef(Inst); >> ? ? ?} > > It's not obvious what's happening here. If the pointer is > invariant inside the block, why is it marked MayBeClobbered? Beause we don't know yet whether the specific instruction inside the block is inside of an invariant region or not. The load and the store might both be in the invariant region, and since we start scanning backward from the load, we don't know whether that's the case until we see an invariant marker. > > And, a testcase demonstrating the basic functionality would > be helpful. > > Dan > > > I had meant to include two testcases... I'll try again. From clattner at apple.com Mon Nov 29 15:30:28 2010 From: clattner at apple.com (Chris Lattner) Date: Mon, 29 Nov 2010 13:30:28 -0800 Subject: [llvm-commits] [Review request] Instcombine: extractvalue from load --> load from gep In-Reply-To: References: Message-ID: <7CBC704A-3752-4146-9B04-867EE9F3EDED@apple.com> On Nov 28, 2010, at 2:43 AM, Frits van Bommel wrote: > On Sun, Nov 28, 2010 at 3:52 AM, Frits van Bommel wrote: >> No, definitely not okay. It inserts the new load at the location of >> the extractvalue instead of the location of the old load. Fixed >> version attached. I'll provide an extra test case once I've had some >> sleep... > > So apparently 4 AM is not the best time to try to fix bugs. Who knew? > I forgot to even run the testcase. > That version is even more broken than the one it replaced; it asserts > every time it fires. > > Here's the real fix, as well as the promised adjusted testcase that > checks for the original problem. I think that Dan is pointing out that it is unwise for an frontend to generate a ton of aggregate values, because that will cause fastisel to be defeated and lead to slower compile times. However, despite Dan's objections, I think this is a perfectly reasonable xform for instcombine to do. A comment on the patch: + return ReplaceInstUsesWith(EV, Builder->CreateLoad(GEP)); Please just use: "return new LoadInst(GEP);", assuming that it will be inserted in the correct place. If not, then your code is fine with an added comment explaining what is going on. Thanks Frits! -Chris From grosbach at apple.com Mon Nov 29 15:28:32 2010 From: grosbach at apple.com (Jim Grosbach) Date: Mon, 29 Nov 2010 21:28:32 -0000 Subject: [llvm-commits] [llvm] r120320 - in /llvm/trunk: lib/Target/ARM/ARMAsmPrinter.cpp lib/Target/ARM/ARMBaseInstrInfo.cpp lib/Target/ARM/ARMConstantIslandPass.cpp lib/Target/ARM/ARMInstrThumb2.td lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp utils/TableGen/ARMDecoderEmitter.cpp Message-ID: <20101129212832.7243C2A6C12D@llvm.org> Author: grosbach Date: Mon Nov 29 15:28:32 2010 New Revision: 120320 URL: http://llvm.org/viewvc/llvm-project?rev=120320&view=rev Log: Rename t2 TBB and TBH instructions to reference that they encode the jump table data. Next up, pseudo-izing them. Modified: llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp llvm/trunk/lib/Target/ARM/ARMBaseInstrInfo.cpp llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp llvm/trunk/utils/TableGen/ARMDecoderEmitter.cpp Modified: llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp?rev=120320&r1=120319&r2=120320&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp Mon Nov 29 15:28:32 2010 @@ -740,9 +740,9 @@ const std::vector &JT = MJTI->getJumpTables(); const std::vector &JTBBs = JT[JTI].MBBs; unsigned OffsetWidth = 4; - if (MI->getOpcode() == ARM::t2TBB) + if (MI->getOpcode() == ARM::t2TBB_JT) OffsetWidth = 1; - else if (MI->getOpcode() == ARM::t2TBH) + else if (MI->getOpcode() == ARM::t2TBH_JT) OffsetWidth = 2; for (unsigned i = 0, e = JTBBs.size(); i != e; ++i) { @@ -777,7 +777,7 @@ // Make sure the instruction that follows TBB is 2-byte aligned. // FIXME: Constant island pass should insert an "ALIGN" instruction instead. - if (MI->getOpcode() == ARM::t2TBB) + if (MI->getOpcode() == ARM::t2TBB_JT) EmitAlignment(1); } @@ -924,8 +924,8 @@ return; } - case ARM::t2TBB: - case ARM::t2TBH: + case ARM::t2TBB_JT: + case ARM::t2TBH_JT: case ARM::t2BR_JT: { // Lower and emit the instruction itself, then the jump table following it. MCInst TmpInst; Modified: llvm/trunk/lib/Target/ARM/ARMBaseInstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMBaseInstrInfo.cpp?rev=120320&r1=120319&r2=120320&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMBaseInstrInfo.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMBaseInstrInfo.cpp Mon Nov 29 15:28:32 2010 @@ -518,13 +518,13 @@ case ARM::BR_JTadd: case ARM::tBR_JTr: case ARM::t2BR_JT: - case ARM::t2TBB: - case ARM::t2TBH: { + case ARM::t2TBB_JT: + case ARM::t2TBH_JT: { // These are jumptable branches, i.e. a branch followed by an inlined // jumptable. The size is 4 + 4 * number of entries. For TBB, each // entry is one byte; TBH two byte each. - unsigned EntrySize = (Opc == ARM::t2TBB) - ? 1 : ((Opc == ARM::t2TBH) ? 2 : 4); + unsigned EntrySize = (Opc == ARM::t2TBB_JT) + ? 1 : ((Opc == ARM::t2TBH_JT) ? 2 : 4); unsigned NumOps = TID.getNumOperands(); MachineOperand JTOP = MI->getOperand(NumOps - (TID.isPredicable() ? 3 : 2)); @@ -542,7 +542,7 @@ // alignment issue. unsigned InstSize = (Opc == ARM::tBR_JTr || Opc == ARM::t2BR_JT) ? 2 : 4; unsigned NumEntries = getNumJTEntries(JT, JTI); - if (Opc == ARM::t2TBB && (NumEntries & 1)) + if (Opc == ARM::t2TBB_JT && (NumEntries & 1)) // Make sure the instruction that follows TBB is 2-byte aligned. // FIXME: Constant island pass should insert an "ALIGN" instruction // instead. Modified: llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp?rev=120320&r1=120319&r2=120320&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp Mon Nov 29 15:28:32 2010 @@ -1766,7 +1766,7 @@ if (!OptOk) continue; - unsigned Opc = ByteOk ? ARM::t2TBB : ARM::t2TBH; + unsigned Opc = ByteOk ? ARM::t2TBB_JT : ARM::t2TBH_JT; MachineInstr *NewJTMI = BuildMI(MBB, MI->getDebugLoc(), TII->get(Opc)) .addReg(IdxReg, getKillRegState(IdxRegKill)) .addJumpTableIndex(JTI, JTOP.getTargetFlags()) Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td?rev=120320&r1=120319&r2=120320&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Mon Nov 29 15:28:32 2010 @@ -2947,7 +2947,7 @@ // FIXME: Add a non-pc based case that can be predicated. let isCodeGenOnly = 1 in // $id doesn't exist in asm string, should be lowered. -def t2TBB : +def t2TBB_JT : T2JTI<(outs), (ins tb_addrmode:$index, jt2block_operand:$jt, i32imm:$id), IIC_Br, "tbb\t$index$jt", []> { @@ -2959,7 +2959,7 @@ } let isCodeGenOnly = 1 in // $id doesn't exist in asm string, should be lowered. -def t2TBH : +def t2TBH_JT : T2JTI<(outs), (ins tb_addrmode:$index, jt2block_operand:$jt, i32imm:$id), IIC_Br, "tbh\t$index$jt", []> { Modified: llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp?rev=120320&r1=120319&r2=120320&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp (original) +++ llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp Mon Nov 29 15:28:32 2010 @@ -531,7 +531,7 @@ void ARMInstPrinter::printTBAddrMode(const MCInst *MI, unsigned OpNum, raw_ostream &O) { O << "[pc, " << getRegisterName(MI->getOperand(OpNum).getReg()); - if (MI->getOpcode() == ARM::t2TBH) + if (MI->getOpcode() == ARM::t2TBH_JT) O << ", lsl #1"; O << ']'; } Modified: llvm/trunk/utils/TableGen/ARMDecoderEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/ARMDecoderEmitter.cpp?rev=120320&r1=120319&r2=120320&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/ARMDecoderEmitter.cpp (original) +++ llvm/trunk/utils/TableGen/ARMDecoderEmitter.cpp Mon Nov 29 15:28:32 2010 @@ -1719,7 +1719,7 @@ return false; // Ignore t2TBB, t2TBH and prefer the generic t2TBBgen, t2TBHgen. - if (Name == "t2TBB" || Name == "t2TBH") + if (Name == "t2TBB_JT" || Name == "t2TBH_JT") return false; // Resolve conflicts: From baldrick at free.fr Mon Nov 29 15:36:12 2010 From: baldrick at free.fr (Duncan Sands) Date: Mon, 29 Nov 2010 21:36:12 -0000 Subject: [llvm-commits] [dragonegg] r120321 - in /dragonegg/trunk: Makefile llvm-convert.cpp llvm-tree.cpp llvm-tree.h llvm-types.cpp Message-ID: <20101129213612.A47672A6C12D@llvm.org> Author: baldrick Date: Mon Nov 29 15:36:12 2010 New Revision: 120321 URL: http://llvm.org/viewvc/llvm-project?rev=120321&view=rev Log: Factorize out various bits of code that give types and values helpful names in the LLVM IR. Added: dragonegg/trunk/llvm-tree.cpp dragonegg/trunk/llvm-tree.h Modified: dragonegg/trunk/Makefile dragonegg/trunk/llvm-convert.cpp dragonegg/trunk/llvm-types.cpp Modified: dragonegg/trunk/Makefile URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/Makefile?rev=120321&r1=120320&r2=120321&view=diff ============================================================================== --- dragonegg/trunk/Makefile (original) +++ dragonegg/trunk/Makefile Mon Nov 29 15:36:12 2010 @@ -38,7 +38,7 @@ PLUGIN=dragonegg.so PLUGIN_OBJECTS=llvm-cache.o llvm-convert.o llvm-backend.o llvm-debug.o \ - llvm-types.o bits_and_bobs.o llvm-abi-default.o + llvm-types.o bits_and_bobs.o llvm-abi-default.o llvm-tree.o TARGET_OBJECT=llvm-target.o TARGET_SOURCE=$(SRC_DIR)/$(shell $(TARGET_UTIL) -p)/llvm-target.cpp Modified: dragonegg/trunk/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/llvm-convert.cpp?rev=120321&r1=120320&r2=120321&view=diff ============================================================================== --- dragonegg/trunk/llvm-convert.cpp (original) +++ dragonegg/trunk/llvm-convert.cpp Mon Nov 29 15:36:12 2010 @@ -27,6 +27,7 @@ #include "llvm-abi.h" #include "llvm-debug.h" #include "llvm-internal.h" +#include "llvm-tree.h" // LLVM headers #include "llvm/CallingConv.h" @@ -166,47 +167,11 @@ /// NameValue - Try to name the given value after the given GCC tree node. If /// the GCC tree node has no sensible name then it does nothing. If the value /// already has a name then it is not changed. -static void NameValue(Value *V, tree t, Twine Prefix = Twine(), - Twine Postfix = Twine()) { - // If the value already has a name, do not change it. - if (V->hasName()) - return; - - // No sensible name - give up, discarding any pre- and post-fixes. - if (!t) - return; - - switch (TREE_CODE(t)) { - default: - // Unhandled case - give up. - return; - - case CONST_DECL: - case FIELD_DECL: - case FUNCTION_DECL: - case NAMESPACE_DECL: - case PARM_DECL: - case VAR_DECL: { - if (DECL_NAME(t)) { - StringRef Ident(IDENTIFIER_POINTER(DECL_NAME(t)), - IDENTIFIER_LENGTH(DECL_NAME(t))); - V->setName(Prefix + Ident + Postfix); - return; - } - const char *Annotation = TREE_CODE(t) == CONST_DECL ? "C." : "D."; - Twine UID(DECL_UID(t)); - V->setName(Prefix + Annotation + UID + Postfix); - return; - } - - case RESULT_DECL: - V->setName(Prefix + "" + Postfix); - return; - - case SSA_NAME: - Twine NameVersion(SSA_NAME_VERSION(t)); - NameValue(V, SSA_NAME_VAR(t), Prefix, "_" + NameVersion + Postfix); - return; +static void NameValue(Value *V, tree t) { + if (!V->hasName()) { + const std::string &Name = getDescriptiveName(t); + if (!Name.empty()) + V->setName(Name); } } @@ -1069,19 +1034,9 @@ gimple stmt = first_stmt(bb); if (stmt && gimple_code(stmt) == GIMPLE_LABEL) { tree label = gimple_label_label(stmt); - if (tree name = DECL_NAME(label)) { - // If the label has a name then use it. - StringRef Ident(IDENTIFIER_POINTER(name), IDENTIFIER_LENGTH(name)); - BB->setName(Ident); - } else if (LABEL_DECL_UID(label) != -1) { - // If the label has a UID then use it. - Twine UID(LABEL_DECL_UID(label)); - BB->setName(""); - } else { - // Otherwise use the generic UID. - Twine UID(DECL_UID(label)); - BB->setName(""); - } + const std::string &LabelName = getDescriptiveName(label); + if (!LabelName.empty()) + BB->setName("<" + LabelName + ">"); } else { // When there is no label, use the same name scheme as the GCC tree dumps. Twine Index(bb->index); Added: dragonegg/trunk/llvm-tree.cpp URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/llvm-tree.cpp?rev=120321&view=auto ============================================================================== --- dragonegg/trunk/llvm-tree.cpp (added) +++ dragonegg/trunk/llvm-tree.cpp Mon Nov 29 15:36:12 2010 @@ -0,0 +1,129 @@ +//===---- llvm-tree.cpp - Utility functions for working with GCC trees ----===// +// +// Copyright (C) 2010 Duncan Sands. +// +// This file is part of DragonEgg. +// +// DragonEgg is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation; either version 2, or (at your option) any later version. +// +// DragonEgg is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +// A PARTICULAR PURPOSE. See the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along with +// DragonEgg; see the file COPYING. If not, write to the Free Software +// Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA. +// +//===----------------------------------------------------------------------===// +// This file defines utility functions for working with GCC trees. +//===----------------------------------------------------------------------===// + +// Plugin headers +#include "llvm-tree.h" + +// LLVM headers +#include "llvm/ADT/Twine.h" + +// System headers +#include + +// GCC headers +extern "C" { +#include "config.h" +// Stop GCC declaring 'getopt' as it can clash with the system's declaration. +#undef HAVE_DECL_GETOPT +#include "system.h" +#include "coretypes.h" +#include "target.h" +#include "tree.h" +} + +using namespace llvm; + +/// concatIfNotEmpty - Concatenate the given strings if they are both non-empty. +/// Otherwise return the empty string. +static std::string concatIfNotEmpty(const std::string &Left, + const std::string &Right) { + if (Left.empty() || Right.empty()) + return std::string(); + return Left + Right; +} + +/// getDescriptiveName - Return a helpful name for the given tree, or an empty +/// string if no sensible name was found. These names are used to make the IR +/// more readable, and have no official status. +std::string llvm::getDescriptiveName(tree t) { + if (!t) return std::string(); // Occurs when recursing. + + // Name identifier nodes after their contents. This gives the desired effect + // when called recursively. + if (TREE_CODE(t) == IDENTIFIER_NODE) + return std::string(IDENTIFIER_POINTER(t), IDENTIFIER_LENGTH(t)); + + // Handle declarations of all kinds. + if (DECL_P(t)) { + // If the declaration comes with a name then use it. + if (DECL_NAME(t)) // Always an identifier node. + return std::string(IDENTIFIER_POINTER(DECL_NAME(t)), + IDENTIFIER_LENGTH(DECL_NAME(t))); + // Use a generic name for function results. + if (TREE_CODE(t) == RESULT_DECL) + return ""; + // Labels have their own numeric unique identifiers. + if (TREE_CODE(t) == LABEL_DECL && LABEL_DECL_UID(t) != -1) { + Twine LUID(LABEL_DECL_UID(t)); + return ("L" + LUID).str(); + } + // Otherwise use the generic UID. + const char *Annotation = TREE_CODE(t) == CONST_DECL ? "C." : "D."; + Twine UID(DECL_UID(t)); + return (Annotation + UID).str(); + } + + // Handle types of all kinds. + if (TYPE_P(t)) { + // If the type comes with a name then use it. + const std::string &TypeName = getDescriptiveName(TYPE_NAME(t)); + if (!TypeName.empty()) { + // Annotate the name with a description of the type's class. + if (TREE_CODE(t) == ENUMERAL_TYPE) + return "enum." + TypeName; + if (TREE_CODE(t) == RECORD_TYPE) + return "struct." + TypeName; + if (TREE_CODE(t) == QUAL_UNION_TYPE) + return "qualunion." + TypeName; + if (TREE_CODE(t) == UNION_TYPE) + return "union." + TypeName; + return TypeName; + } + + // Try to deduce a useful name. + if (TREE_CODE(t) == ARRAY_TYPE) + // If the element type is E, name the array E[] (regardless of the number + // of dimensions). + return concatIfNotEmpty(getDescriptiveName(TREE_TYPE(t)), "[]"); + if (TREE_CODE(t) == COMPLEX_TYPE) + // If the element type is E, name the complex number complex.E. + return concatIfNotEmpty("complex.", getDescriptiveName(TREE_TYPE(t))); + if (TREE_CODE(t) == POINTER_TYPE) + // If the element type is E, name the pointer E*. + return concatIfNotEmpty(getDescriptiveName(TREE_TYPE(t)), "*"); + if (TREE_CODE(t) == REFERENCE_TYPE) + // If the element type is E, name the reference E&. + return concatIfNotEmpty(getDescriptiveName(TREE_TYPE(t)), "&"); + + return TypeName; + } + + // Handle SSA names. + if (TREE_CODE(t) == SSA_NAME) { + Twine NameVersion(SSA_NAME_VERSION(t)); + return concatIfNotEmpty(getDescriptiveName(SSA_NAME_VAR(t)), + ("_" + NameVersion).str()); + } + + // A mysterious tree, just give up. + return std::string(); +} Added: dragonegg/trunk/llvm-tree.h URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/llvm-tree.h?rev=120321&view=auto ============================================================================== --- dragonegg/trunk/llvm-tree.h (added) +++ dragonegg/trunk/llvm-tree.h Mon Nov 29 15:36:12 2010 @@ -0,0 +1,40 @@ +//=-- llvm-tree.h - Utility functions for working with GCC trees --*- C++ -*-=// +// +// Copyright (C) 2010 Duncan Sands. +// +// This file is part of DragonEgg. +// +// DragonEgg is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation; either version 2, or (at your option) any later version. +// +// DragonEgg is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +// A PARTICULAR PURPOSE. See the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along with +// DragonEgg; see the file COPYING. If not, write to the Free Software +// Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA. +// +//===----------------------------------------------------------------------===// +// This file declares utility functions for working with GCC trees. +//===----------------------------------------------------------------------===// + +#ifndef LLVM_TREE_H +#define LLVM_TREE_H + +// System headers +#include + +union tree_node; + +namespace llvm { + +/// getDescriptiveName - Return a helpful name for the given tree, or an empty +/// string if no sensible name was found. These names are used to make the IR +/// more readable, and have no official status. +std::string getDescriptiveName(union tree_node *t); + +} + +#endif /* LLVM_TREE_H */ Modified: dragonegg/trunk/llvm-types.cpp URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/llvm-types.cpp?rev=120321&r1=120320&r2=120321&view=diff ============================================================================== --- dragonegg/trunk/llvm-types.cpp (original) +++ dragonegg/trunk/llvm-types.cpp Mon Nov 29 15:36:12 2010 @@ -25,6 +25,7 @@ // Plugin headers #include "llvm-abi.h" +#include "llvm-tree.h" extern "C" { #include "llvm-cache.h" } @@ -280,74 +281,6 @@ return isInt64(DECL_FIELD_OFFSET(field_decl), true); } -/// NameType - Try to name the given type after the given GCC tree node. If -/// the GCC tree node has no sensible name then it does nothing. -static void NameType(const Type *Ty, tree t, Twine Prefix = Twine(), - Twine Postfix = Twine()) { - // No sensible name - give up, discarding any pre- and post-fixes. - if (!t) - return; - - switch (TREE_CODE(t)) { - default: - // Unhandled case - give up. - return; - - case ARRAY_TYPE: - // If the element type is E, name the array E[] (regardless of the number - // of dimensions). - for (; TREE_CODE(t) == ARRAY_TYPE; t = TREE_TYPE(t)) ; - NameType(Ty, t, Prefix, "[]" + Postfix); - return; - - case BOOLEAN_TYPE: - case COMPLEX_TYPE: - case ENUMERAL_TYPE: - case FIXED_POINT_TYPE: - case FUNCTION_TYPE: - case INTEGER_TYPE: - case METHOD_TYPE: - case QUAL_UNION_TYPE: - case REAL_TYPE: - case RECORD_TYPE: - case UNION_TYPE: - case VECTOR_TYPE: { - // If the type has a name then use that, otherwise bail out. - if (!TYPE_NAME(t)) - return; // Unnamed type. - - tree identifier = NULL_TREE; - if (TREE_CODE(TYPE_NAME(t)) == IDENTIFIER_NODE) - identifier = TYPE_NAME(t); - else if (TREE_CODE(TYPE_NAME(t)) == TYPE_DECL) - identifier = DECL_NAME(TYPE_NAME(t)); - - if (identifier) { - const char *Class = ""; - if (TREE_CODE(t) == ENUMERAL_TYPE) - Class = "enum "; - if (TREE_CODE(t) == RECORD_TYPE) - Class = "struct "; - else if (TREE_CODE(t) == UNION_TYPE) - Class = "union "; - StringRef Ident(IDENTIFIER_POINTER(identifier), - IDENTIFIER_LENGTH(identifier)); - TheModule->addTypeName((Prefix + Class + Ident + Postfix).str(), Ty); - } - return; - } - - case POINTER_TYPE: - // If the element type is E, LLVM already calls this E*. - return; - - case REFERENCE_TYPE: - // If the element type is E, name the reference E&. - NameType(Ty, TREE_TYPE(t), Prefix, "&" + Postfix); - return; - } -} - /// isBitfield - Returns whether to treat the specified field as a bitfield. bool isBitfield(tree_node *field_decl) { if (!DECL_BIT_FIELD(field_decl)) @@ -943,7 +876,15 @@ } } - NameType(Ty, type); + // Try to give the type a helpful name. There is no point in doing this for + // array and pointer types since LLVM automatically gives them a useful name + // based on the element type. + if (!isa(Ty)) { + const std::string &TypeName = getDescriptiveName(type); + if (!TypeName.empty()) + TheModule->addTypeName(TypeName, Ty); + } + return Ty; } From rafael.espindola at gmail.com Mon Nov 29 15:44:55 2010 From: rafael.espindola at gmail.com (=?UTF-8?Q?Rafael_Esp=C3=ADndola?=) Date: Mon, 29 Nov 2010 16:44:55 -0500 Subject: [llvm-commits] [Review request] Add the feature "sh" for LLVM::Other/close-stderr.ll, for MSVC In-Reply-To: References: Message-ID: > ?Activate the feature. A feature for one test? Isn't it better to use XFAIL? > ...Takumi Cheers, Rafael From fvbommel at gmail.com Mon Nov 29 15:56:20 2010 From: fvbommel at gmail.com (Frits van Bommel) Date: Mon, 29 Nov 2010 21:56:20 -0000 Subject: [llvm-commits] [llvm] r120323 - in /llvm/trunk: lib/Transforms/InstCombine/InstructionCombining.cpp test/Transforms/InstCombine/extractvalue.ll Message-ID: <20101129215620.EDC052A6C12D@llvm.org> Author: fvbommel Date: Mon Nov 29 15:56:20 2010 New Revision: 120323 URL: http://llvm.org/viewvc/llvm-project?rev=120323&view=rev Log: Transform (extractvalue (load P), ...) to (load (gep P, 0, ...)) if the load has no other uses, shrinking the load. Modified: llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp llvm/trunk/test/Transforms/InstCombine/extractvalue.ll Modified: llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp?rev=120323&r1=120322&r2=120323&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp Mon Nov 29 15:56:20 2010 @@ -1171,10 +1171,37 @@ } } } - // Can't simplify extracts from other values. Note that nested extracts are - // already simplified implicitely by the above (extract ( extract (insert) ) + if (LoadInst *L = dyn_cast(Agg)) + // If the (non-volatile) load only has one use, we can rewrite this to a + // load from a GEP. This reduces the size of the load. + // FIXME: If a load is used only by extractvalue instructions then this + // could be done regardless of having multiple uses. + if (!L->isVolatile() && L->hasOneUse()) { + // extractvalue has integer indices, getelementptr has Value*s. Convert. + SmallVector Indices; + // Prefix an i32 0 since we need the first element. + Indices.push_back(Builder->getInt32(0)); + for (ExtractValueInst::idx_iterator I = EV.idx_begin(), E = EV.idx_end(); + I != E; ++I) + Indices.push_back(Builder->getInt32(*I)); + + // We need to insert these at the location of the old load, not at that of + // the extractvalue. + Builder->SetInsertPoint(L->getParent(), L); + Value *GEP = Builder->CreateInBoundsGEP(L->getPointerOperand(), + Indices.begin(), Indices.end()); + // Returning the load directly will cause the main loop to insert it in + // the wrong spot, so use ReplaceInstUsesWith(). + return ReplaceInstUsesWith(EV, Builder->CreateLoad(GEP)); + } + // We could simplify extracts from other values. Note that nested extracts may + // already be simplified implicitly by the above: extract (extract (insert) ) // will be translated into extract ( insert ( extract ) ) first and then just - // the value inserted, if appropriate). + // the value inserted, if appropriate. Similarly for extracts from single-use + // loads: extract (extract (load)) will be translated to extract (load (gep)) + // and if again single-use then via load (gep (gep)) to load (gep). + // However, double extracts from e.g. function arguments or return values + // aren't handled yet. return 0; } Modified: llvm/trunk/test/Transforms/InstCombine/extractvalue.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/extractvalue.ll?rev=120323&r1=120322&r2=120323&view=diff ============================================================================== --- llvm/trunk/test/Transforms/InstCombine/extractvalue.ll (original) +++ llvm/trunk/test/Transforms/InstCombine/extractvalue.ll Mon Nov 29 15:56:20 2010 @@ -1,10 +1,13 @@ -; RUN: opt < %s -instcombine -S | not grep extractvalue +; RUN: opt < %s -instcombine -S | FileCheck %s -; Instcombine should fold various combinations of insertvalue and extractvalue -; together declare void @bar({i32, i32} %a) +declare i32 @baz(i32 %a) +; CHECK: define i32 @foo +; CHECK-NOT: extractvalue define i32 @foo(i32 %a, i32 %b) { +; Instcombine should fold various combinations of insertvalue and extractvalue +; together ; Build a simple struct and pull values out again %s1.1 = insertvalue {i32, i32} undef, i32 %a, 0 %s1 = insertvalue {i32, i32} %s1.1, i32 %b, 1 @@ -36,3 +39,69 @@ ret i32 %v5 } +; CHECK: define i32 @extract2gep +; CHECK-NEXT: [[GEP:%[a-z0-9]+]] = getelementptr inbounds {{.*}}* %pair, i32 0, i32 1 +; CHECK-NEXT: [[LOAD:%[A-Za-z0-9]+]] = load i32* [[GEP]] +; CHECK-NEXT: store +; CHECK-NEXT: br label %loop +; CHECK-NOT: extractvalue +; CHECK: call {{.*}}(i32 [[LOAD]]) +; CHECK-NOT: extractvalue +; CHECK: ret i32 [[LOAD]] +define i32 @extract2gep({i32, i32}* %pair, i32* %P) { + ; The load + extractvalue should be converted + ; to an inbounds gep + smaller load. + ; The new load should be in the same spot as the old load. + %L = load {i32, i32}* %pair + store i32 0, i32* %P + br label %loop + +loop: + %E = extractvalue {i32, i32} %L, 1 + %C = call i32 @baz(i32 %E) + store i32 %C, i32* %P + %cond = icmp eq i32 %C, 0 + br i1 %cond, label %end, label %loop + +end: + ret i32 %E +} + +; CHECK: define i32 @doubleextract2gep +; CHECK-NEXT: [[GEP:%[a-z0-9]+]] = getelementptr inbounds {{.*}}* %arg, i32 0, i32 1, i32 1 +; CHECK-NEXT: [[LOAD:%[A-Za-z0-9]+]] = load i32* [[GEP]] +; CHECK-NEXT: ret i32 [[LOAD]] +define i32 @doubleextract2gep({i32, {i32, i32}}* %arg) { + ; The load + extractvalues should be converted + ; to a 3-index inbounds gep + smaller load. + %L = load {i32, {i32, i32}}* %arg + %E1 = extractvalue {i32, {i32, i32}} %L, 1 + %E2 = extractvalue {i32, i32} %E1, 1 + ret i32 %E2 +} + +; CHECK: define i32 @nogep-multiuse +; CHECK-NEXT: load {{.*}} %pair +; CHECK-NEXT: extractvalue +; CHECK-NEXT: extractvalue +; CHECK-NEXT: add +; CHECK-NEXT: ret +define i32 @nogep-multiuse({i32, i32}* %pair) { + ; The load should be left unchanged since both parts are needed. + %L = volatile load {i32, i32}* %pair + %LHS = extractvalue {i32, i32} %L, 0 + %RHS = extractvalue {i32, i32} %L, 1 + %R = add i32 %LHS, %RHS + ret i32 %R +} + +; CHECK: define i32 @nogep-volatile +; CHECK-NEXT: volatile load {{.*}} %pair +; CHECK-NEXT: extractvalue +; CHECK-NEXT: ret +define i32 @nogep-volatile({i32, i32}* %pair) { + ; The volatile load should be left unchanged. + %L = volatile load {i32, i32}* %pair + %E = extractvalue {i32, i32} %L, 1 + ret i32 %E +} From echristo at apple.com Mon Nov 29 15:56:23 2010 From: echristo at apple.com (Eric Christopher) Date: Mon, 29 Nov 2010 21:56:23 -0000 Subject: [llvm-commits] [llvm] r120324 - /llvm/trunk/lib/Target/ARM/ARMFastISel.cpp Message-ID: <20101129215623.4BDED2A6C12F@llvm.org> Author: echristo Date: Mon Nov 29 15:56:23 2010 New Revision: 120324 URL: http://llvm.org/viewvc/llvm-project?rev=120324&view=rev Log: Update fastisel for the changes in r120272. Modified: llvm/trunk/lib/Target/ARM/ARMFastISel.cpp Modified: llvm/trunk/lib/Target/ARM/ARMFastISel.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMFastISel.cpp?rev=120324&r1=120323&r2=120324&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMFastISel.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMFastISel.cpp Mon Nov 29 15:56:23 2010 @@ -1740,7 +1740,9 @@ CallOpc = Subtarget->isTargetDarwin() ? ARM::tBLXi_r9 : ARM::tBLXi; else CallOpc = Subtarget->isTargetDarwin() ? ARM::BLr9 : ARM::BL; - MIB = BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(CallOpc)) + // Explicitly adding the predicate here. + MIB = AddDefaultPred(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, + TII.get(CallOpc))) .addExternalSymbol(TLI.getLibcallName(Call)); // Add implicit physical register uses to the call. @@ -1849,8 +1851,10 @@ CallOpc = Subtarget->isTargetDarwin() ? ARM::tBLXi_r9 : ARM::tBLXi; else CallOpc = Subtarget->isTargetDarwin() ? ARM::BLr9 : ARM::BL; - MIB = BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(CallOpc)) - .addGlobalAddress(GV, 0, 0); + // Explicitly adding the predicate here. + MIB = AddDefaultPred(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, + TII.get(CallOpc))) + .addGlobalAddress(GV, 0, 0); // Add implicit physical register uses to the call. for (unsigned i = 0, e = RegArgs.size(); i != e; ++i) From geek4civic at gmail.com Mon Nov 29 15:59:16 2010 From: geek4civic at gmail.com (NAKAMURA Takumi) Date: Tue, 30 Nov 2010 06:59:16 +0900 Subject: [llvm-commits] [Review request] Add the feature "sh" for LLVM::Other/close-stderr.ll, for MSVC In-Reply-To: References: Message-ID: Good morning, Rafael. 2010/11/30 Rafael Esp?ndola : >> ?Activate the feature. > > A feature for one test? Isn't it better to use XFAIL? It *succeeds unexpected* on MSYS-mingw bash. :) IMHO I prefer to avoid XFAIL as possible. ps. my all proposals are; https://github.com/chapuni/llvm-mirror/tree/msys-shared (excuse me, some commits have Japanese logs) ...Takumi From sabre at nondot.org Mon Nov 29 15:59:31 2010 From: sabre at nondot.org (Chris Lattner) Date: Mon, 29 Nov 2010 21:59:31 -0000 Subject: [llvm-commits] [llvm] r120325 - in /llvm/trunk: lib/Transforms/Scalar/DeadStoreElimination.cpp test/Transforms/DeadStoreElimination/simple.ll Message-ID: <20101129215931.88D672A6C12D@llvm.org> Author: lattner Date: Mon Nov 29 15:59:31 2010 New Revision: 120325 URL: http://llvm.org/viewvc/llvm-project?rev=120325&view=rev Log: fix PR8677, patch by Jakub Staszak! Modified: llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp llvm/trunk/test/Transforms/DeadStoreElimination/simple.ll Modified: llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp?rev=120325&r1=120324&r2=120325&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp Mon Nov 29 15:59:31 2010 @@ -235,8 +235,10 @@ &BB); } - // If not a definite must-alias dependency, ignore it. - if (!InstDep.isDef()) + // If not a definite must-alias store dependency, ignore it. If this is a + // load from the same pointer, we don't want to transform load+store into + // a noop. + if (!InstDep.isDef() || !isa(InstDep.getInst())) continue; } Modified: llvm/trunk/test/Transforms/DeadStoreElimination/simple.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/DeadStoreElimination/simple.ll?rev=120325&r1=120324&r2=120325&view=diff ============================================================================== --- llvm/trunk/test/Transforms/DeadStoreElimination/simple.ll (original) +++ llvm/trunk/test/Transforms/DeadStoreElimination/simple.ll Mon Nov 29 15:59:31 2010 @@ -20,3 +20,17 @@ ; CHECK: @test2 ; CHECK-NEXT: store i32 20 } + + +; PR8677 + at g = global i32 1 + +define i32 @test3(i32* %g_addr) nounwind { +; CHECK: @test3 +; CHEcK: load i32* %g_addr + %g_value = load i32* %g_addr, align 4 + store i32 -1, i32* @g, align 4 + store i32 %g_value, i32* %g_addr, align 4 + %tmp3 = load i32* @g, align 4 + ret i32 %tmp3 +} From isanbard at gmail.com Mon Nov 29 16:15:03 2010 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 29 Nov 2010 22:15:03 -0000 Subject: [llvm-commits] [llvm] r120326 - /llvm/trunk/lib/Target/ARM/ARMInstrThumb.td Message-ID: <20101129221503.E88D02A6C12D@llvm.org> Author: void Date: Mon Nov 29 16:15:03 2010 New Revision: 120326 URL: http://llvm.org/viewvc/llvm-project?rev=120326&view=rev Log: Refactor some of the "disassembly-only" instructions into a base class. This reduces some code duplication. Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb.td Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrThumb.td?rev=120326&r1=120325&r2=120326&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrThumb.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrThumb.td Mon Nov 29 16:15:03 2010 @@ -136,45 +136,41 @@ Requires<[IsThumb, IsThumb1Only]>; } +class T1Disassembly op1, bits<8> op2> + : T1Encoding<0b101111> { + let Inst{9-8} = op1; + let Inst{7-0} = op2; +} + def tNOP : T1pI<(outs), (ins), NoItinerary, "nop", "", [/* For disassembly only; pattern left blank */]>, - T1Encoding<0b101111> { - // A8.6.110 - let Inst{9-8} = 0b11; - let Inst{7-0} = 0x00; -} + T1Disassembly<0b11, 0x00>; // A8.6.110 def tYIELD : T1pI<(outs), (ins), NoItinerary, "yield", "", [/* For disassembly only; pattern left blank */]>, - T1Encoding<0b101111> { - // A8.6.410 - let Inst{9-8} = 0b11; - let Inst{7-0} = 0x10; -} + T1Disassembly<0b11, 0x10>; // A8.6.410 def tWFE : T1pI<(outs), (ins), NoItinerary, "wfe", "", [/* For disassembly only; pattern left blank */]>, - T1Encoding<0b101111> { - // A8.6.408 - let Inst{9-8} = 0b11; - let Inst{7-0} = 0x20; -} + T1Disassembly<0b11, 0x20>; // A8.6.408 def tWFI : T1pI<(outs), (ins), NoItinerary, "wfi", "", [/* For disassembly only; pattern left blank */]>, - T1Encoding<0b101111> { - // A8.6.409 - let Inst{9-8} = 0b11; - let Inst{7-0} = 0x30; -} + T1Disassembly<0b11, 0x30>; // A8.6.409 def tSEV : T1pI<(outs), (ins), NoItinerary, "sev", "", [/* For disassembly only; pattern left blank */]>, - T1Encoding<0b101111> { - // A8.6.157 - let Inst{9-8} = 0b11; - let Inst{7-0} = 0x40; -} + T1Disassembly<0b11, 0x40>; // A8.6.157 + +// The i32imm operand $val can be used by a debugger to store more information +// about the breakpoint. +def tBKPT : T1I<(outs), (ins i32imm:$val), NoItinerary, "bkpt\t$val", + [/* For disassembly only; pattern left blank */]>, + T1Disassembly<0b10, {?,?,?,?,?,?,?,?}> { + // A8.6.22 + bits<8> val; + let Inst{7-0} = val; +} def tSETENDBE : T1I<(outs), (ins), NoItinerary, "setend\tbe", [/* For disassembly only; pattern left blank */]>, @@ -196,17 +192,6 @@ let Inst{2-0} = 0b000; } -// The i32imm operand $val can be used by a debugger to store more information -// about the breakpoint. -def tBKPT : T1I<(outs), (ins i32imm:$val), NoItinerary, "bkpt\t$val", - [/* For disassembly only; pattern left blank */]>, - T1Encoding<0b101111> { - // A8.6.22 - bits<8> val; - let Inst{9-8} = 0b10; - let Inst{7-0} = val; -} - // Change Processor State is a system instruction -- for disassembly only. // The singleton $opt operand contains the following information: // opt{4-0} = mode ==> don't care From fvbommel at gmail.com Mon Nov 29 16:21:00 2010 From: fvbommel at gmail.com (Frits van Bommel) Date: Mon, 29 Nov 2010 23:21:00 +0100 Subject: [llvm-commits] [Review request] Instcombine: extractvalue from load --> load from gep In-Reply-To: <7CBC704A-3752-4146-9B04-867EE9F3EDED@apple.com> References: <7CBC704A-3752-4146-9B04-867EE9F3EDED@apple.com> Message-ID: On Mon, Nov 29, 2010 at 10:30 PM, Chris Lattner wrote: > I think that Dan is pointing out that it is unwise for an frontend to generate a ton of aggregate values, because that will cause fastisel to be defeated and lead to slower compile times. ?However, despite Dan's objections, I think this is a perfectly reasonable xform for instcombine to do. I agree that it's probably not a very good thing to do, but apparently they do occur "in the wild" even with clang. Also, I've found aggregate values can really make a simple frontend easier to write sometimes when you can just assume that any expression will generate (at most) a single llvm::Value* even if the result logically has two fields, e.g. a pointer and length for a dynamic array. So if you prefer ease of implementation, this is at least a useful hack. One way extractvalues can enter the code, by the way, is return values of functions. For instance, on x86-64 9-16 byte structs are returned as a 2-field struct value. When such a function gets inlined, this optimization may fire if the frontend used a single load + ret instead of two loads + two insertvalues + ret to construct the return value. (The fact that using more instructions causes it to optimize better can be a bit counter-intuitive) We could also add a "load %struct*" --> load fields + construct %struct with insertvalues transform... > A comment on the patch: > > + ? ? ?return ReplaceInstUsesWith(EV, Builder->CreateLoad(GEP)); > > Please just use: "return new LoadInst(GEP);", assuming that it will be inserted in the correct place. ?If not, then your code is fine with an added comment explaining what is going on. That's what the first version did, and the exact reason it was horribly broken :). Doing that causes -instcombine to try to insert it at the current location, which is that of the extractvalue. Adding an explicit insert point causes an assert when trying to insert it because it's already in a basic block. I changed the last bit to // We need to insert these at the location of the old load, not at that of // the extractvalue. Builder->SetInsertPoint(L->getParent(), L); Value *GEP = Builder->CreateInBoundsGEP(L->getPointerOperand(), Indices.begin(), Indices.end()); // Returning the load directly will cause the main loop to insert it in // the wrong spot, so use ReplaceInstUsesWith(). return ReplaceInstUsesWith(EV, Builder->CreateLoad(GEP)); (only the comments have changed) Committed as r120323. From bigcheesegs at gmail.com Mon Nov 29 16:28:22 2010 From: bigcheesegs at gmail.com (Michael J. Spencer) Date: Mon, 29 Nov 2010 22:28:22 -0000 Subject: [llvm-commits] [llvm] r120327 - /llvm/trunk/include/llvm/Support/PathV2.h Message-ID: <20101129222822.430342A6C12D@llvm.org> Author: mspencer Date: Mon Nov 29 16:28:22 2010 New Revision: 120327 URL: http://llvm.org/viewvc/llvm-project?rev=120327&view=rev Log: Support/PathV2: Just about every function call requires the Twine header. Modified: llvm/trunk/include/llvm/Support/PathV2.h Modified: llvm/trunk/include/llvm/Support/PathV2.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/PathV2.h?rev=120327&r1=120326&r2=120327&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/PathV2.h (original) +++ llvm/trunk/include/llvm/Support/PathV2.h Mon Nov 29 16:28:22 2010 @@ -25,6 +25,7 @@ //===----------------------------------------------------------------------===// #include "llvm/ADT/SmallString.h" +#include "llvm/ADT/Twine.h" #include "llvm/Support/DataTypes.h" #include "llvm/Support/system_error.h" #include From bigcheesegs at gmail.com Mon Nov 29 16:28:32 2010 From: bigcheesegs at gmail.com (Michael J. Spencer) Date: Mon, 29 Nov 2010 22:28:32 -0000 Subject: [llvm-commits] [llvm] r120328 - /llvm/trunk/include/llvm/Support/system_error.h Message-ID: <20101129222832.BE6192A6C12D@llvm.org> Author: mspencer Date: Mon Nov 29 16:28:32 2010 New Revision: 120328 URL: http://llvm.org/viewvc/llvm-project?rev=120328&view=rev Log: system_error: Remove Windows headers. Modified: llvm/trunk/include/llvm/Support/system_error.h Modified: llvm/trunk/include/llvm/Support/system_error.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/system_error.h?rev=120328&r1=120327&r2=120328&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/system_error.h (original) +++ llvm/trunk/include/llvm/Support/system_error.h Mon Nov 29 16:28:32 2010 @@ -230,129 +230,127 @@ // This must be here instead of a .inc file because it is used in the definition // of the enum values below. #ifdef LLVM_ON_WIN32 - // VS 2008 needs this for some of the defines below. -# include // The following numbers were taken from VS2010. # ifndef EAFNOSUPPORT -# define EAFNOSUPPORT WSAEAFNOSUPPORT +# define EAFNOSUPPORT 102 # endif # ifndef EADDRINUSE -# define EADDRINUSE WSAEADDRINUSE +# define EADDRINUSE 100 # endif # ifndef EADDRNOTAVAIL -# define EADDRNOTAVAIL WSAEADDRNOTAVAIL +# define EADDRNOTAVAIL 101 # endif # ifndef EISCONN -# define EISCONN WSAEISCONN +# define EISCONN 113 # endif # ifndef E2BIG -# define E2BIG WSAE2BIG +# define E2BIG 7 # endif # ifndef EDOM -# define EDOM WSAEDOM +# define EDOM 33 # endif # ifndef EFAULT -# define EFAULT WSAEFAULT +# define EFAULT 14 # endif # ifndef EBADF -# define EBADF WSAEBADF +# define EBADF 9 # endif # ifndef EBADMSG # define EBADMSG 104 # endif # ifndef EPIPE -# define EPIPE WSAEPIPE +# define EPIPE 32 # endif # ifndef ECONNABORTED -# define ECONNABORTED WSAECONNABORTED +# define ECONNABORTED 106 # endif # ifndef EALREADY -# define EALREADY WSAEALREADY +# define EALREADY 103 # endif # ifndef ECONNREFUSED -# define ECONNREFUSED WSAECONNREFUSED +# define ECONNREFUSED 107 # endif # ifndef ECONNRESET -# define ECONNRESET WSAECONNRESET +# define ECONNRESET 108 # endif # ifndef EXDEV -# define EXDEV WSAEXDEV +# define EXDEV 18 # endif # ifndef EDESTADDRREQ -# define EDESTADDRREQ WSAEDESTADDRREQ +# define EDESTADDRREQ 109 # endif # ifndef EBUSY -# define EBUSY WSAEBUSY +# define EBUSY 16 # endif # ifndef ENOTEMPTY -# define ENOTEMPTY WSAENOTEMPTY +# define ENOTEMPTY 41 # endif # ifndef ENOEXEC -# define ENOEXEC WSAENOEXEC +# define ENOEXEC 8 # endif # ifndef EEXIST -# define EEXIST WSAEEXIST +# define EEXIST 17 # endif # ifndef EFBIG -# define EFBIG WSAEFBIG +# define EFBIG 27 # endif # ifndef ENAMETOOLONG -# define ENAMETOOLONG WSAENAMETOOLONG +# define ENAMETOOLONG 38 # endif # ifndef ENOSYS -# define ENOSYS WSAENOSYS +# define ENOSYS 40 # endif # ifndef EHOSTUNREACH -# define EHOSTUNREACH WSAEHOSTUNREACH +# define EHOSTUNREACH 110 # endif # ifndef EIDRM # define EIDRM 111 # endif # ifndef EILSEQ -# define EILSEQ WSAEILSEQ +# define EILSEQ 42 # endif # ifndef ENOTTY -# define ENOTTY WSAENOTTY +# define ENOTTY 25 # endif # ifndef EINTR -# define EINTR WSAEINTR +# define EINTR 4 # endif # ifndef EINVAL -# define EINVAL WSAEINVAL +# define EINVAL 22 # endif # ifndef ESPIPE -# define ESPIPE WSAESPIPE +# define ESPIPE 29 # endif # ifndef EIO -# define EIO WSAEIO +# define EIO 5 # endif # ifndef EISDIR -# define EISDIR WSAEISDIR +# define EISDIR 21 # endif # ifndef EMSGSIZE -# define EMSGSIZE WSAEMSGSIZE +# define EMSGSIZE 115 # endif # ifndef ENETDOWN -# define ENETDOWN WSAENETDOWN +# define ENETDOWN 116 # endif # ifndef ENETRESET -# define ENETRESET WSAENETRESET +# define ENETRESET 117 # endif # ifndef ENETUNREACH -# define ENETUNREACH WSAENETUNREACH +# define ENETUNREACH 118 # endif # ifndef ENOBUFS -# define ENOBUFS WSAENOBUFS +# define ENOBUFS 119 # endif # ifndef ECHILD -# define ECHILD WSAECHILD +# define ECHILD 10 # endif # ifndef ENOLINK # define ENOLINK 121 # endif # ifndef ENOLCK -# define ENOLCK WSAENOLCK +# define ENOLCK 39 # endif # ifndef ENODATA # define ENODATA 120 @@ -361,40 +359,40 @@ # define ENOMSG 122 # endif # ifndef ENOPROTOOPT -# define ENOPROTOOPT WSAENOPROTOOPT +# define ENOPROTOOPT 123 # endif # ifndef ENOSPC -# define ENOSPC WSAENOSPC +# define ENOSPC 28 # endif # ifndef ENOSR # define ENOSR 124 # endif # ifndef ENXIO -# define ENXIO WSAENXIO +# define ENXIO 6 # endif # ifndef ENODEV -# define ENODEV WSAENODEV +# define ENODEV 19 # endif # ifndef ENOENT -# define ENOENT WSAENOENT +# define ENOENT 2 # endif # ifndef ESRCH -# define ESRCH WSAESRCH +# define ESRCH 3 # endif # ifndef ENOTDIR -# define ENOTDIR WSAENOTDIR +# define ENOTDIR 20 # endif # ifndef ENOTSOCK -# define ENOTSOCK WSAENOTSOCK +# define ENOTSOCK 128 # endif # ifndef ENOSTR # define ENOSTR 125 # endif # ifndef ENOTCONN -# define ENOTCONN WSAENOTCONN +# define ENOTCONN 126 # endif # ifndef ENOMEM -# define ENOMEM WSAENOMEM +# define ENOMEM 12 # endif # ifndef ENOTSUP # define ENOTSUP 129 @@ -403,40 +401,40 @@ # define ECANCELED 105 # endif # ifndef EINPROGRESS -# define EINPROGRESS WSAEINPROGRESS +# define EINPROGRESS 112 # endif # ifndef EPERM -# define EPERM WSAEPERM +# define EPERM 1 # endif # ifndef EOPNOTSUPP -# define EOPNOTSUPP WSAEOPNOTSUPP +# define EOPNOTSUPP 130 # endif # ifndef EWOULDBLOCK -# define EWOULDBLOCK WSAEWOULDBLOCK +# define EWOULDBLOCK 140 # endif # ifndef EOWNERDEAD # define EOWNERDEAD 133 # endif # ifndef EACCES -# define EACCES WSAEACCES +# define EACCES 13 # endif # ifndef EPROTO # define EPROTO 134 # endif # ifndef EPROTONOSUPPORT -# define EPROTONOSUPPORT WSAEPROTONOSUPPORT +# define EPROTONOSUPPORT 135 # endif # ifndef EROFS -# define EROFS WSAEROFS +# define EROFS 30 # endif # ifndef EDEADLK -# define EDEADLK WSAEDEADLK +# define EDEADLK 36 # endif # ifndef EAGAIN -# define EAGAIN WSAEAGAIN +# define EAGAIN 11 # endif # ifndef ERANGE -# define ERANGE WSAERANGE +# define ERANGE 34 # endif # ifndef ENOTRECOVERABLE # define ENOTRECOVERABLE 127 @@ -448,25 +446,25 @@ # define ETXTBSY 139 # endif # ifndef ETIMEDOUT -# define ETIMEDOUT WSAETIMEDOUT +# define ETIMEDOUT 138 # endif # ifndef ENFILE -# define ENFILE WSAENFILE +# define ENFILE 23 # endif # ifndef EMFILE -# define EMFILE WSAEMFILE +# define EMFILE 24 # endif # ifndef EMLINK -# define EMLINK WSAEMLINK +# define EMLINK 31 # endif # ifndef ELOOP -# define ELOOP WSAELOOP +# define ELOOP 114 # endif # ifndef EOVERFLOW # define EOVERFLOW 132 # endif # ifndef EPROTOTYPE -# define EPROTOTYPE WSAEPROTOTYPE +# define EPROTOTYPE 136 # endif #endif @@ -815,19 +813,7 @@ return !(_x == _y); } -// system_error - -} // end namespace llvm - -// This needs to stay here for KillTheDoctor. -#ifdef LLVM_ON_WIN32 -// FIXME: These two headers really really really need to be removed from here. -// Not only is it a violation of System, they define the stupid min and -// max macros :(. -#include -#include - -namespace llvm { +// Windows errors. // To construct an error_code after an API error: // @@ -835,63 +821,65 @@ struct windows_error { enum _ { success = 0, - // These names and values are based on Windows winerror.h - // This is not a complete list. - invalid_function = ERROR_INVALID_FUNCTION, - file_not_found = ERROR_FILE_NOT_FOUND, - path_not_found = ERROR_PATH_NOT_FOUND, - too_many_open_files = ERROR_TOO_MANY_OPEN_FILES, - access_denied = ERROR_ACCESS_DENIED, - invalid_handle = ERROR_INVALID_HANDLE, - arena_trashed = ERROR_ARENA_TRASHED, - not_enough_memory = ERROR_NOT_ENOUGH_MEMORY, - invalid_block = ERROR_INVALID_BLOCK, - bad_environment = ERROR_BAD_ENVIRONMENT, - bad_format = ERROR_BAD_FORMAT, - invalid_access = ERROR_INVALID_ACCESS, - outofmemory = ERROR_OUTOFMEMORY, - invalid_drive = ERROR_INVALID_DRIVE, - current_directory = ERROR_CURRENT_DIRECTORY, - not_same_device = ERROR_NOT_SAME_DEVICE, - no_more_files = ERROR_NO_MORE_FILES, - write_protect = ERROR_WRITE_PROTECT, - bad_unit = ERROR_BAD_UNIT, - not_ready = ERROR_NOT_READY, - bad_command = ERROR_BAD_COMMAND, - crc = ERROR_CRC, - bad_length = ERROR_BAD_LENGTH, - seek = ERROR_SEEK, - not_dos_disk = ERROR_NOT_DOS_DISK, - sector_not_found = ERROR_SECTOR_NOT_FOUND, - out_of_paper = ERROR_OUT_OF_PAPER, - write_fault = ERROR_WRITE_FAULT, - read_fault = ERROR_READ_FAULT, - gen_failure = ERROR_GEN_FAILURE, - sharing_violation = ERROR_SHARING_VIOLATION, - lock_violation = ERROR_LOCK_VIOLATION, - wrong_disk = ERROR_WRONG_DISK, - sharing_buffer_exceeded = ERROR_SHARING_BUFFER_EXCEEDED, - handle_eof = ERROR_HANDLE_EOF, - handle_disk_full = ERROR_HANDLE_DISK_FULL, - rem_not_list = ERROR_REM_NOT_LIST, - dup_name = ERROR_DUP_NAME, - bad_net_path = ERROR_BAD_NETPATH, - network_busy = ERROR_NETWORK_BUSY, - file_exists = ERROR_FILE_EXISTS, - cannot_make = ERROR_CANNOT_MAKE, - broken_pipe = ERROR_BROKEN_PIPE, - open_failed = ERROR_OPEN_FAILED, - buffer_overflow = ERROR_BUFFER_OVERFLOW, - disk_full = ERROR_DISK_FULL, - lock_failed = ERROR_LOCK_FAILED, - busy = ERROR_BUSY, - cancel_violation = ERROR_CANCEL_VIOLATION, - already_exists = ERROR_ALREADY_EXISTS + // These names and values are based on Windows WinError.h + // This is not a complete list. Add to this list if you need to explicitly + // check for it. + invalid_function = 1, // ERROR_INVALID_FUNCTION, + file_not_found = 2, // ERROR_FILE_NOT_FOUND, + path_not_found = 3, // ERROR_PATH_NOT_FOUND, + too_many_open_files = 4, // ERROR_TOO_MANY_OPEN_FILES, + access_denied = 5, // ERROR_ACCESS_DENIED, + invalid_handle = 6, // ERROR_INVALID_HANDLE, + arena_trashed = 7, // ERROR_ARENA_TRASHED, + not_enough_memory = 8, // ERROR_NOT_ENOUGH_MEMORY, + invalid_block = 9, // ERROR_INVALID_BLOCK, + bad_environment = 10, // ERROR_BAD_ENVIRONMENT, + bad_format = 11, // ERROR_BAD_FORMAT, + invalid_access = 12, // ERROR_INVALID_ACCESS, + outofmemory = 14, // ERROR_OUTOFMEMORY, + invalid_drive = 15, // ERROR_INVALID_DRIVE, + current_directory = 16, // ERROR_CURRENT_DIRECTORY, + not_same_device = 17, // ERROR_NOT_SAME_DEVICE, + no_more_files = 18, // ERROR_NO_MORE_FILES, + write_protect = 19, // ERROR_WRITE_PROTECT, + bad_unit = 20, // ERROR_BAD_UNIT, + not_ready = 21, // ERROR_NOT_READY, + bad_command = 22, // ERROR_BAD_COMMAND, + crc = 23, // ERROR_CRC, + bad_length = 24, // ERROR_BAD_LENGTH, + seek = 25, // ERROR_SEEK, + not_dos_disk = 26, // ERROR_NOT_DOS_DISK, + sector_not_found = 27, // ERROR_SECTOR_NOT_FOUND, + out_of_paper = 28, // ERROR_OUT_OF_PAPER, + write_fault = 29, // ERROR_WRITE_FAULT, + read_fault = 30, // ERROR_READ_FAULT, + gen_failure = 31, // ERROR_GEN_FAILURE, + sharing_violation = 32, // ERROR_SHARING_VIOLATION, + lock_violation = 33, // ERROR_LOCK_VIOLATION, + wrong_disk = 34, // ERROR_WRONG_DISK, + sharing_buffer_exceeded = 36, // ERROR_SHARING_BUFFER_EXCEEDED, + handle_eof = 38, // ERROR_HANDLE_EOF, + handle_disk_full = 39, // ERROR_HANDLE_DISK_FULL, + rem_not_list = 51, // ERROR_REM_NOT_LIST, + dup_name = 52, // ERROR_DUP_NAME, + bad_net_path = 53, // ERROR_BAD_NETPATH, + network_busy = 54, // ERROR_NETWORK_BUSY, + file_exists = 80, // ERROR_FILE_EXISTS, + cannot_make = 82, // ERROR_CANNOT_MAKE, + broken_pipe = 109, // ERROR_BROKEN_PIPE, + open_failed = 110, // ERROR_OPEN_FAILED, + buffer_overflow = 111, // ERROR_BUFFER_OVERFLOW, + disk_full = 112, // ERROR_DISK_FULL, + insufficient_buffer = 122, // ERROR_INSUFFICIENT_BUFFER, + lock_failed = 167, // ERROR_LOCK_FAILED, + busy = 170, // ERROR_BUSY, + cancel_violation = 173, // ERROR_CANCEL_VIOLATION, + already_exists = 183 // ERROR_ALREADY_EXISTS }; _ v_; windows_error(_ v) : v_(v) {} - explicit windows_error(DWORD v) : v_(_(v)) {} + explicit windows_error(int v) : v_(_(v)) {} operator int() const {return v_;} }; @@ -906,6 +894,4 @@ } // end namespace llvm -#endif // LLVM_ON_WINDOWS - #endif From bigcheesegs at gmail.com Mon Nov 29 16:28:52 2010 From: bigcheesegs at gmail.com (Michael J. Spencer) Date: Mon, 29 Nov 2010 22:28:52 -0000 Subject: [llvm-commits] [llvm] r120329 - in /llvm/trunk: include/llvm/Support/PathV2.h lib/Support/CMakeLists.txt lib/Support/PathV2.cpp lib/Support/Unix/PathV2.inc lib/Support/Windows/PathV2.inc unittests/System/Path.cpp Message-ID: <20101129222852.257B82A6C12D@llvm.org> Author: mspencer Date: Mon Nov 29 16:28:51 2010 New Revision: 120329 URL: http://llvm.org/viewvc/llvm-project?rev=120329&view=rev Log: Support: Add PathV2 implementation. Added: llvm/trunk/lib/Support/PathV2.cpp llvm/trunk/lib/Support/Unix/PathV2.inc llvm/trunk/lib/Support/Windows/PathV2.inc Modified: llvm/trunk/include/llvm/Support/PathV2.h llvm/trunk/lib/Support/CMakeLists.txt llvm/trunk/unittests/System/Path.cpp Modified: llvm/trunk/include/llvm/Support/PathV2.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/PathV2.h?rev=120329&r1=120328&r2=120329&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/PathV2.h (original) +++ llvm/trunk/include/llvm/Support/PathV2.h Mon Nov 29 16:28:51 2010 @@ -24,6 +24,9 @@ // //===----------------------------------------------------------------------===// +#ifndef LLVM_SYSTEM_PATHV2_H +#define LLVM_SYSTEM_PATHV2_H + #include "llvm/ADT/SmallString.h" #include "llvm/ADT/Twine.h" #include "llvm/Support/DataTypes.h" @@ -64,13 +67,20 @@ /// class const_iterator { StringRef Path; //< The entire path. - StringRef Component; //< The current component. + StringRef Component; //< The current component. Not necessarily in Path. + size_t Position; //< The iterators current position within Path. + + // An end iterator has Position = Path.size() + 1. + friend const_iterator begin(const StringRef &path); + friend const_iterator end(const StringRef &path); public: typedef const StringRef value_type; + typedef ptrdiff_t difference_type; typedef value_type &reference; typedef value_type *pointer; typedef std::bidirectional_iterator_tag iterator_category; + reference operator*() const; pointer operator->() const; const_iterator &operator++(); // preincrement @@ -79,11 +89,18 @@ const_iterator &operator--(int); // postdecrement bool operator==(const const_iterator &RHS) const; bool operator!=(const const_iterator &RHS) const; - - const_iterator(); //< Default construct end iterator. - const_iterator(const StringRef &path); }; +/// @brief Get begin iterator over \a path. +/// @param path Input path. +/// @returns Iterator initialized with the first component of \a path. +const_iterator begin(const StringRef &path); + +/// @brief Get end iterator over \a path. +/// @param path Input path. +/// @returns Iterator initialized to the end of \a path. +const_iterator end(const StringRef &path); + /// @} /// @name Lexical Modifiers /// @{ @@ -136,7 +153,10 @@ /// @param component The component to be appended to \a path. /// @returns errc::success if \a component has been appended to \a path, /// otherwise a platform specific error_code. -error_code append(SmallVectorImpl &path, const Twine &component); +error_code append(SmallVectorImpl &path, const Twine &a, + const Twine &b = "", + const Twine &c = "", + const Twine &d = ""); /// @brief Append to path. /// @@ -978,3 +998,5 @@ } // end namespace fs } // end namespace sys } // end namespace llvm + +#endif Modified: llvm/trunk/lib/Support/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/CMakeLists.txt?rev=120329&r1=120328&r2=120329&view=diff ============================================================================== --- llvm/trunk/lib/Support/CMakeLists.txt (original) +++ llvm/trunk/lib/Support/CMakeLists.txt Mon Nov 29 16:28:51 2010 @@ -64,6 +64,7 @@ Memory.cpp Mutex.cpp Path.cpp + PathV2.cpp Process.cpp Program.cpp RWMutex.cpp @@ -79,6 +80,7 @@ Unix/Memory.inc Unix/Mutex.inc Unix/Path.inc + Unix/PathV2.inc Unix/Process.inc Unix/Program.inc Unix/RWMutex.inc @@ -92,6 +94,7 @@ Windows/Memory.inc Windows/Mutex.inc Windows/Path.inc + Windows/PathV2.inc Windows/Process.inc Windows/Program.inc Windows/RWMutex.inc Added: llvm/trunk/lib/Support/PathV2.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/PathV2.cpp?rev=120329&view=auto ============================================================================== --- llvm/trunk/lib/Support/PathV2.cpp (added) +++ llvm/trunk/lib/Support/PathV2.cpp Mon Nov 29 16:28:51 2010 @@ -0,0 +1,409 @@ +//===-- PathV2.cpp - Implement OS Path Concept ------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file implements the operating system PathV2 API. +// +//===----------------------------------------------------------------------===// + +#include "llvm/Support/PathV2.h" +#include "llvm/Support/ErrorHandling.h" +#include + +namespace { + using llvm::StringRef; + + bool is_separator(const char value) { + switch(value) { +#ifdef LLVM_ON_WIN32 + case '\\': // fall through +#endif + case '/': return true; + default: return false; + } + } + +#ifdef LLVM_ON_WIN32 + const StringRef separators = "\\/"; + const char prefered_separator = '\\'; +#else + const StringRef separators = "/"; + const char prefered_separator = '/'; +#endif + + StringRef find_first_component(const StringRef &path) { + // Look for this first component in the following order. + // * empty (in this case we return an empty string) + // * either C: or {//,\\}net. + // * {/,\} + // * {.,..} + // * {file,directory}name + + if (path.empty()) + return path; + + // C: + if (path.size() >= 2 && std::isalpha(path[0]) && path[1] == ':') + return StringRef(path.begin(), 2); + + // //net + if ((path.size() > 2) && + (path.startswith("\\\\") || path.startswith("//")) && + (path[2] != '\\' && path[2] != '/')) { + // Find the next directory separator. + size_t end = path.find_first_of("\\/", 2); + if (end == StringRef::npos) + return path; + else + return StringRef(path.begin(), end); + } + + // {/,\} + if (path[0] == '\\' || path[0] == '/') + return StringRef(path.begin(), 1); + + if (path.startswith("..")) + return StringRef(path.begin(), 2); + + if (path[0] == '.') + return StringRef(path.begin(), 1); + + // * {file,directory}name + size_t end = path.find_first_of("\\/", 2); + if (end == StringRef::npos) + return path; + else + return StringRef(path.begin(), end); + + return StringRef(); + } +} + +namespace llvm { +namespace sys { +namespace path { + +const_iterator begin(const StringRef &path) { + const_iterator i; + i.Path = path; + i.Component = find_first_component(path); + i.Position = 0; + return i; +} + +const_iterator end(const StringRef &path) { + const_iterator i; + i.Path = path; + i.Position = path.size(); + return i; +} + +const_iterator::reference const_iterator::operator*() const { + return Component; +} + +const_iterator::pointer const_iterator::operator->() const { + return &Component; +} + +const_iterator &const_iterator::operator++() { + assert(Position < Path.size() && "Tried to increment past end!"); + + // Increment Position to past the current component + Position += Component.size(); + + // Check for end. + if (Position == Path.size()) { + Component = StringRef(); + return *this; + } + + // Both POSIX and Windows treat paths that begin with exactly two separators + // specially. + bool was_net = Component.size() > 2 && + is_separator(Component[0]) && + Component[1] == Component[0] && + !is_separator(Component[2]); + + // Handle separators. + if (is_separator(Path[Position])) { + // Root dir. + if (was_net +#ifdef LLVM_ON_WIN32 + // c:/ + || Component.endswith(":") +#endif + ) { + Component = StringRef(Path.begin() + Position, 1); + return *this; + } + + // Skip extra separators. + while (Position != Path.size() && + is_separator(Path[Position])) { + ++Position; + } + + // Treat trailing '/' as a '.'. + if (Position == Path.size()) { + --Position; + Component = "."; + return *this; + } + } + + // Find next component. + size_t end_pos = Path.find_first_of(separators, Position); + if (end_pos == StringRef::npos) + end_pos = Path.size(); + Component = StringRef(Path.begin() + Position, end_pos - Position); + + return *this; +} + +bool const_iterator::operator==(const const_iterator &RHS) const { + return Path.begin() == RHS.Path.begin() && + Position == RHS.Position; +} + +bool const_iterator::operator!=(const const_iterator &RHS) const { + return !(*this == RHS); +} + +error_code root_path(const StringRef &path, StringRef &result) { + const_iterator b = begin(path), + pos = b, + e = end(path); + if (b != e) { + bool has_net = b->size() > 2 && is_separator((*b)[0]) && (*b)[1] == (*b)[0]; + bool has_drive = +#ifdef LLVM_ON_WIN32 + b->endswith(":"); +#else + false; +#endif + + if (has_net || has_drive) { + if ((++pos != e) && is_separator((*pos)[0])) { + // {C:/,//net/}, so get the first two components. + result = StringRef(path.begin(), b->size() + pos->size()); + return make_error_code(errc::success); + } else { + // just {C:,//net}, return the first component. + result = *b; + return make_error_code(errc::success); + } + } + + // POSIX style root directory. + if (is_separator((*b)[0])) { + result = *b; + return make_error_code(errc::success); + } + + // No root_path. + result = StringRef(); + return make_error_code(errc::success); + } + + // No path :(. + result = StringRef(); + return make_error_code(errc::success); +} + +error_code root_name(const StringRef &path, StringRef &result) { + const_iterator b = begin(path), + e = end(path); + if (b != e) { + bool has_net = b->size() > 2 && is_separator((*b)[0]) && (*b)[1] == (*b)[0]; + bool has_drive = +#ifdef LLVM_ON_WIN32 + b->endswith(":"); +#else + false; +#endif + + if (has_net || has_drive) { + // just {C:,//net}, return the first component. + result = *b; + return make_error_code(errc::success); + } + } + + // No path or no name. + result = StringRef(); + return make_error_code(errc::success); +} + +error_code root_directory(const StringRef &path, StringRef &result) { + const_iterator b = begin(path), + pos = b, + e = end(path); + if (b != e) { + bool has_net = b->size() > 2 && is_separator((*b)[0]) && (*b)[1] == (*b)[0]; + bool has_drive = +#ifdef LLVM_ON_WIN32 + b->endswith(":"); +#else + false; +#endif + + if ((has_net || has_drive) && + // {C:,//net}, skip to the next component. + (++pos != e) && is_separator((*pos)[0])) { + result = *pos; + return make_error_code(errc::success); + } + + // POSIX style root directory. + if (!has_net && is_separator((*b)[0])) { + result = *b; + return make_error_code(errc::success); + } + } + + // No path or no root. + result = StringRef(); + return make_error_code(errc::success); +} + +error_code has_root_name(const Twine &path, bool &result) { + SmallString<128> storage; + StringRef p = path.toStringRef(storage); + + if (error_code ec = root_name(p, p)) return ec; + result = !p.empty(); + return make_error_code(errc::success); +} + +error_code has_root_directory(const Twine &path, bool &result) { + SmallString<128> storage; + StringRef p = path.toStringRef(storage); + + if (error_code ec = root_directory(p, p)) return ec; + result = !p.empty(); + return make_error_code(errc::success); +} + +error_code relative_path(const StringRef &path, StringRef &result) { + StringRef root; + if (error_code ec = root_path(path, root)) return ec; + result = StringRef(path.begin() + root.size(), path.size() - root.size()); + return make_error_code(errc::success); +} + +error_code append(SmallVectorImpl &path, const Twine &a, + const Twine &b, + const Twine &c, + const Twine &d) { + SmallString<32> a_storage; + SmallString<32> b_storage; + SmallString<32> c_storage; + SmallString<32> d_storage; + + SmallVector components; + if (!a.isTriviallyEmpty()) components.push_back(a.toStringRef(a_storage)); + if (!b.isTriviallyEmpty()) components.push_back(b.toStringRef(b_storage)); + if (!c.isTriviallyEmpty()) components.push_back(c.toStringRef(c_storage)); + if (!d.isTriviallyEmpty()) components.push_back(d.toStringRef(d_storage)); + + for (SmallVectorImpl::const_iterator i = components.begin(), + e = components.end(); + i != e; ++i) { + bool path_has_sep = !path.empty() && is_separator(path[path.size() - 1]); + bool component_has_sep = !i->empty() && is_separator((*i)[0]); + bool is_root_name; + if (error_code ec = has_root_name(*i, is_root_name)) return ec; + + if (path_has_sep) { + // Strip separators from beginning of component. + size_t loc = i->find_first_not_of(separators); + StringRef c = StringRef(i->begin() + loc, i->size() - loc); + + // Append it. + path.append(c.begin(), c.end()); + continue; + } + + if (!component_has_sep && !(path.empty() && is_root_name)) { + // Add a separator. + path.push_back(prefered_separator); + } + + path.append(i->begin(), i->end()); + } + + return make_error_code(errc::success); +} + +error_code make_absolute(SmallVectorImpl &path) { + StringRef p(path.data(), path.size()); + + bool rootName, rootDirectory; + if (error_code ec = has_root_name(p, rootName)) return ec; + if (error_code ec = has_root_directory(p, rootDirectory)) return ec; + + // Already absolute. + if (rootName && rootDirectory) + return make_error_code(errc::success); + + // All of the following conditions will need the current directory. + SmallString<128> current_dir; + if (error_code ec = current_path(current_dir)) return ec; + + // Relative path. Prepend the current directory. + if (!rootName && !rootDirectory) { + // Append path to the current directory. + if (error_code ec = append(current_dir, p)) return ec; + // Set path to the result. + path.swap(current_dir); + return make_error_code(errc::success); + } + + if (!rootName && rootDirectory) { + StringRef cdrn; + if (error_code ec = root_name(current_dir, cdrn)) return ec; + SmallString<128> curDirRootName(cdrn.begin(), cdrn.end()); + if (error_code ec = append(curDirRootName, p)) return ec; + // Set path to the result. + path.swap(curDirRootName); + return make_error_code(errc::success); + } + + if (rootName && !rootDirectory) { + StringRef pRootName; + StringRef bRootDirectory; + StringRef bRelativePath; + StringRef pRelativePath; + if (error_code ec = root_name(p, pRootName)) return ec; + if (error_code ec = root_directory(current_dir, bRootDirectory)) return ec; + if (error_code ec = relative_path(current_dir, bRelativePath)) return ec; + if (error_code ec = relative_path(p, pRelativePath)) return ec; + + SmallString<128> res; + if (error_code ec = append(res, pRootName, bRootDirectory, + bRelativePath, pRelativePath)) return ec; + path.swap(res); + return make_error_code(errc::success); + } + + llvm_unreachable("All rootName and rootDirectory combinations should have " + "occurred above!"); +} + +} +} +} + +// Include the truly platform-specific parts. +#if defined(LLVM_ON_UNIX) +#include "Unix/PathV2.inc" +#endif +#if defined(LLVM_ON_WIN32) +#include "Windows/PathV2.inc" +#endif Added: llvm/trunk/lib/Support/Unix/PathV2.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/PathV2.inc?rev=120329&view=auto ============================================================================== --- llvm/trunk/lib/Support/Unix/PathV2.inc (added) +++ llvm/trunk/lib/Support/Unix/PathV2.inc Mon Nov 29 16:28:51 2010 @@ -0,0 +1,39 @@ +//===- llvm/Support/Unix/PathV2.cpp - Unix Path Implementation --*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file implements the Unix specific implementation of the PathV2 API. +// +//===----------------------------------------------------------------------===// + +//===----------------------------------------------------------------------===// +//=== WARNING: Implementation here must contain only generic UNIX code that +//=== is guaranteed to work on *all* UNIX variants. +//===----------------------------------------------------------------------===// + +#include "Unix.h" + +namespace llvm { +namespace sys { +namespace path { + +error_code current_path(SmallVectorImpl &result) { + long size = ::pathconf(".", _PC_PATH_MAX); + result.reserve(size + 1); + result.set_size(size + 1); + + if (::getcwd(result.data(), result.size()) == 0) + return error_code(errno, system_category()); + + result.set_size(strlen(result.data())); + return make_error_code(errc::success); +} + +} // end namespace path +} // end namespace sys +} // end namespace llvm Added: llvm/trunk/lib/Support/Windows/PathV2.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/PathV2.inc?rev=120329&view=auto ============================================================================== --- llvm/trunk/lib/Support/Windows/PathV2.inc (added) +++ llvm/trunk/lib/Support/Windows/PathV2.inc Mon Nov 29 16:28:51 2010 @@ -0,0 +1,71 @@ +//===- llvm/Support/Win32/PathV2.cpp - Windows Path Impl --------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file implements the Windows specific implementation of the PathV2 API. +// +//===----------------------------------------------------------------------===// + +//===----------------------------------------------------------------------===// +//=== WARNING: Implementation here must contain only generic Windows code that +//=== is guaranteed to work on *all* Windows variants. +//===----------------------------------------------------------------------===// + +#include "Windows.h" + +namespace llvm { +namespace sys { +namespace path { + +error_code current_path(SmallVectorImpl &result) { + SmallVector cur_path; + cur_path.reserve(128); +retry_cur_dir: + DWORD len = ::GetCurrentDirectoryW(cur_path.capacity(), cur_path.data()); + + // A zero return value indicates a failure other than insufficient space. + if (len == 0) + return make_error_code(windows_error(::GetLastError())); + + // If there's insufficient space, the len returned is larger than the len + // given. + if (len > cur_path.capacity()) { + cur_path.reserve(len); + goto retry_cur_dir; + } + + cur_path.set_size(len); + // cur_path now holds the current directory in utf-16. Convert to utf-8. + + // Find out how much space we need. Sadly, this function doesn't return the + // size needed unless you tell it the result size is 0, which means you + // _always_ have to call it twice. + len = ::WideCharToMultiByte(CP_UTF8, NULL, + cur_path.data(), cur_path.size(), + result.data(), 0, + NULL, NULL); + + if (len == 0) + return make_error_code(windows_error(::GetLastError())); + + result.reserve(len); + result.set_size(len); + // Now do the actual conversion. + len = ::WideCharToMultiByte(CP_UTF8, NULL, + cur_path.data(), cur_path.size(), + result.data(), result.size(), + NULL, NULL); + if (len == 0) + return make_error_code(windows_error(::GetLastError())); + + return make_error_code(errc::success); +} + +} // end namespace path +} // end namespace sys +} // end namespace llvm Modified: llvm/trunk/unittests/System/Path.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/System/Path.cpp?rev=120329&r1=120328&r2=120329&view=diff ============================================================================== --- llvm/trunk/unittests/System/Path.cpp (original) +++ llvm/trunk/unittests/System/Path.cpp Mon Nov 29 16:28:51 2010 @@ -7,15 +7,85 @@ // //===----------------------------------------------------------------------===// -// For now, just test that the header file parses. #include "llvm/Support/PathV2.h" #include "gtest/gtest.h" +using namespace llvm; + namespace { TEST(System, Path) { - // TODO: Add tests! + SmallVector paths; + paths.push_back(""); + paths.push_back("."); + paths.push_back(".."); + paths.push_back("foo"); + paths.push_back("/"); + paths.push_back("/foo"); + paths.push_back("foo/"); + paths.push_back("/foo/"); + paths.push_back("foo/bar"); + paths.push_back("/foo/bar"); + paths.push_back("//net"); + paths.push_back("//net/foo"); + paths.push_back("///foo///"); + paths.push_back("///foo///bar"); + paths.push_back("/."); + paths.push_back("./"); + paths.push_back("/.."); + paths.push_back("../"); + paths.push_back("foo/."); + paths.push_back("foo/.."); + paths.push_back("foo/./"); + paths.push_back("foo/./bar"); + paths.push_back("foo/.."); + paths.push_back("foo/../"); + paths.push_back("foo/../bar"); + paths.push_back("c:"); + paths.push_back("c:/"); + paths.push_back("c:foo"); + paths.push_back("c:/foo"); + paths.push_back("c:foo/"); + paths.push_back("c:/foo/"); + paths.push_back("c:/foo/bar"); + paths.push_back("prn:"); + paths.push_back("c:\\"); + paths.push_back("c:foo"); + paths.push_back("c:\\foo"); + paths.push_back("c:foo\\"); + paths.push_back("c:\\foo\\"); + paths.push_back("c:\\foo/"); + paths.push_back("c:/foo\\bar"); + + for (SmallVector::const_iterator i = paths.begin(), + e = paths.end(); + i != e; + ++i) { + outs() << *i << " =>\n Iteration: ["; + for (sys::path::const_iterator ci = sys::path::begin(*i), + ce = sys::path::end(*i); + ci != ce; + ++ci) { + outs() << *ci << ','; + } + outs() << "]\n"; + + StringRef res; + SmallString<16> temp_store; + if (error_code ec = sys::path::root_path(*i, res)) ASSERT_FALSE(ec.message().c_str()); + outs() << " root_path: " << res << '\n'; + if (error_code ec = sys::path::root_name(*i, res)) ASSERT_FALSE(ec.message().c_str()); + outs() << " root_name: " << res << '\n'; + if (error_code ec = sys::path::root_directory(*i, res)) ASSERT_FALSE(ec.message().c_str()); + outs() << " root_directory: " << res << '\n'; + + temp_store = *i; + if (error_code ec = sys::path::make_absolute(temp_store)) ASSERT_FALSE(ec.message().c_str()); + outs() << " make_absolute: " << temp_store << '\n'; + + outs().flush(); + } } } // anonymous namespace From bigcheesegs at gmail.com Mon Nov 29 16:29:04 2010 From: bigcheesegs at gmail.com (Michael J. Spencer) Date: Mon, 29 Nov 2010 22:29:04 -0000 Subject: [llvm-commits] [llvm] r120330 - in /llvm/trunk/unittests: CMakeLists.txt Support/Path.cpp Support/TimeValue.cpp System/Makefile System/Path.cpp System/TimeValue.cpp Message-ID: <20101129222904.9399B2A6C12D@llvm.org> Author: mspencer Date: Mon Nov 29 16:29:04 2010 New Revision: 120330 URL: http://llvm.org/viewvc/llvm-project?rev=120330&view=rev Log: unittests: Merge SystemTests back into SupportTests. Added: llvm/trunk/unittests/Support/Path.cpp - copied, changed from r120329, llvm/trunk/unittests/System/Path.cpp llvm/trunk/unittests/Support/TimeValue.cpp - copied, changed from r120329, llvm/trunk/unittests/System/TimeValue.cpp Removed: llvm/trunk/unittests/System/Makefile llvm/trunk/unittests/System/Path.cpp llvm/trunk/unittests/System/TimeValue.cpp Modified: llvm/trunk/unittests/CMakeLists.txt Modified: llvm/trunk/unittests/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/CMakeLists.txt?rev=120330&r1=120329&r2=120330&view=diff ============================================================================== --- llvm/trunk/unittests/CMakeLists.txt (original) +++ llvm/trunk/unittests/CMakeLists.txt Mon Nov 29 16:29:04 2010 @@ -120,18 +120,11 @@ Support/EndianTest.cpp Support/LeakDetectorTest.cpp Support/MathExtrasTest.cpp + Support/Path.cpp Support/raw_ostream_test.cpp Support/RegexTest.cpp Support/SwapByteOrderTest.cpp + Support/TimeValue.cpp Support/TypeBuilderTest.cpp Support/ValueHandleTest.cpp ) - -set(LLVM_LINK_COMPONENTS - Support - ) - -add_llvm_unittest(System - System/Path.cpp - System/TimeValue.cpp - ) Copied: llvm/trunk/unittests/Support/Path.cpp (from r120329, llvm/trunk/unittests/System/Path.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/Path.cpp?p2=llvm/trunk/unittests/Support/Path.cpp&p1=llvm/trunk/unittests/System/Path.cpp&r1=120329&r2=120330&rev=120330&view=diff ============================================================================== --- llvm/trunk/unittests/System/Path.cpp (original) +++ llvm/trunk/unittests/Support/Path.cpp Mon Nov 29 16:29:04 2010 @@ -1,4 +1,4 @@ -//===- llvm/unittest/System/Path.cpp - Path tests -------------------------===// +//===- llvm/unittest/Support/Path.cpp - Path tests ------------------------===// // // The LLVM Compiler Infrastructure // @@ -15,7 +15,7 @@ namespace { -TEST(System, Path) { +TEST(Support, Path) { SmallVector paths; paths.push_back(""); paths.push_back("."); Copied: llvm/trunk/unittests/Support/TimeValue.cpp (from r120329, llvm/trunk/unittests/System/TimeValue.cpp) URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/TimeValue.cpp?p2=llvm/trunk/unittests/Support/TimeValue.cpp&p1=llvm/trunk/unittests/System/TimeValue.cpp&r1=120329&r2=120330&rev=120330&view=diff ============================================================================== --- llvm/trunk/unittests/System/TimeValue.cpp (original) +++ llvm/trunk/unittests/Support/TimeValue.cpp Mon Nov 29 16:29:04 2010 @@ -1,4 +1,4 @@ -//===- llvm/unittest/System/TimeValue.cpp - Time Vlaue tests --------------===// +//===- llvm/unittest/Support/TimeValue.cpp - Time Value tests -------------===// // // The LLVM Compiler Infrastructure // @@ -14,7 +14,7 @@ using namespace llvm; namespace { -TEST(System, TimeValue) { +TEST(Support, TimeValue) { sys::TimeValue now = sys::TimeValue::now(); time_t now_t = time(NULL); EXPECT_TRUE(abs(static_cast(now_t - now.toEpochTime())) < 2); Removed: llvm/trunk/unittests/System/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/System/Makefile?rev=120329&view=auto ============================================================================== --- llvm/trunk/unittests/System/Makefile (original) +++ llvm/trunk/unittests/System/Makefile (removed) @@ -1,15 +0,0 @@ -##===- unittests/System/Makefile ---------------------------*- Makefile -*-===## -# -# The LLVM Compiler Infrastructure -# -# This file is distributed under the University of Illinois Open Source -# License. See LICENSE.TXT for details. -# -##===----------------------------------------------------------------------===## - -LEVEL = ../.. -TESTNAME = System -LINK_COMPONENTS := support - -include $(LEVEL)/Makefile.config -include $(LLVM_SRC_ROOT)/unittests/Makefile.unittest Removed: llvm/trunk/unittests/System/Path.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/System/Path.cpp?rev=120329&view=auto ============================================================================== --- llvm/trunk/unittests/System/Path.cpp (original) +++ llvm/trunk/unittests/System/Path.cpp (removed) @@ -1,91 +0,0 @@ -//===- llvm/unittest/System/Path.cpp - Path tests -------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "llvm/Support/PathV2.h" - -#include "gtest/gtest.h" - -using namespace llvm; - -namespace { - -TEST(System, Path) { - SmallVector paths; - paths.push_back(""); - paths.push_back("."); - paths.push_back(".."); - paths.push_back("foo"); - paths.push_back("/"); - paths.push_back("/foo"); - paths.push_back("foo/"); - paths.push_back("/foo/"); - paths.push_back("foo/bar"); - paths.push_back("/foo/bar"); - paths.push_back("//net"); - paths.push_back("//net/foo"); - paths.push_back("///foo///"); - paths.push_back("///foo///bar"); - paths.push_back("/."); - paths.push_back("./"); - paths.push_back("/.."); - paths.push_back("../"); - paths.push_back("foo/."); - paths.push_back("foo/.."); - paths.push_back("foo/./"); - paths.push_back("foo/./bar"); - paths.push_back("foo/.."); - paths.push_back("foo/../"); - paths.push_back("foo/../bar"); - paths.push_back("c:"); - paths.push_back("c:/"); - paths.push_back("c:foo"); - paths.push_back("c:/foo"); - paths.push_back("c:foo/"); - paths.push_back("c:/foo/"); - paths.push_back("c:/foo/bar"); - paths.push_back("prn:"); - paths.push_back("c:\\"); - paths.push_back("c:foo"); - paths.push_back("c:\\foo"); - paths.push_back("c:foo\\"); - paths.push_back("c:\\foo\\"); - paths.push_back("c:\\foo/"); - paths.push_back("c:/foo\\bar"); - - for (SmallVector::const_iterator i = paths.begin(), - e = paths.end(); - i != e; - ++i) { - outs() << *i << " =>\n Iteration: ["; - for (sys::path::const_iterator ci = sys::path::begin(*i), - ce = sys::path::end(*i); - ci != ce; - ++ci) { - outs() << *ci << ','; - } - outs() << "]\n"; - - StringRef res; - SmallString<16> temp_store; - if (error_code ec = sys::path::root_path(*i, res)) ASSERT_FALSE(ec.message().c_str()); - outs() << " root_path: " << res << '\n'; - if (error_code ec = sys::path::root_name(*i, res)) ASSERT_FALSE(ec.message().c_str()); - outs() << " root_name: " << res << '\n'; - if (error_code ec = sys::path::root_directory(*i, res)) ASSERT_FALSE(ec.message().c_str()); - outs() << " root_directory: " << res << '\n'; - - temp_store = *i; - if (error_code ec = sys::path::make_absolute(temp_store)) ASSERT_FALSE(ec.message().c_str()); - outs() << " make_absolute: " << temp_store << '\n'; - - outs().flush(); - } -} - -} // anonymous namespace Removed: llvm/trunk/unittests/System/TimeValue.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/System/TimeValue.cpp?rev=120329&view=auto ============================================================================== --- llvm/trunk/unittests/System/TimeValue.cpp (original) +++ llvm/trunk/unittests/System/TimeValue.cpp (removed) @@ -1,23 +0,0 @@ -//===- llvm/unittest/System/TimeValue.cpp - Time Vlaue tests --------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "gtest/gtest.h" -#include "llvm/Support/TimeValue.h" -#include - -using namespace llvm; -namespace { - -TEST(System, TimeValue) { - sys::TimeValue now = sys::TimeValue::now(); - time_t now_t = time(NULL); - EXPECT_TRUE(abs(static_cast(now_t - now.toEpochTime())) < 2); -} - -} From benny.kra at googlemail.com Mon Nov 29 16:34:56 2010 From: benny.kra at googlemail.com (Benjamin Kramer) Date: Mon, 29 Nov 2010 22:34:56 -0000 Subject: [llvm-commits] [llvm] r120332 - in /llvm/trunk/test: CodeGen/X86/atomic_op.ll MC/ELF/relocation.s Transforms/DeadStoreElimination/simple.ll Transforms/SimplifyLibCalls/StrSpn.ll Message-ID: <20101129223456.304562A6C12D@llvm.org> Author: d0k Date: Mon Nov 29 16:34:55 2010 New Revision: 120332 URL: http://llvm.org/viewvc/llvm-project?rev=120332&view=rev Log: Fix some broken CHECK lines. Modified: llvm/trunk/test/CodeGen/X86/atomic_op.ll llvm/trunk/test/MC/ELF/relocation.s llvm/trunk/test/Transforms/DeadStoreElimination/simple.ll llvm/trunk/test/Transforms/SimplifyLibCalls/StrSpn.ll Modified: llvm/trunk/test/CodeGen/X86/atomic_op.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/atomic_op.ll?rev=120332&r1=120331&r2=120332&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/atomic_op.ll (original) +++ llvm/trunk/test/CodeGen/X86/atomic_op.ll Mon Nov 29 16:34:55 2010 @@ -112,7 +112,7 @@ define void @test2(i32 addrspace(256)* nocapture %P) nounwind { entry: ; CHECK: lock -; CEHCK: cmpxchgl %{{.*}}, %gs:(%{{.*}}) +; CHECK: cmpxchgl %{{.*}}, %gs:(%{{.*}}) %0 = tail call i32 @llvm.atomic.cmp.swap.i32.p256i32(i32 addrspace(256)* %P, i32 0, i32 1) ret void Modified: llvm/trunk/test/MC/ELF/relocation.s URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/relocation.s?rev=120332&r1=120331&r2=120332&view=diff ============================================================================== --- llvm/trunk/test/MC/ELF/relocation.s (original) +++ llvm/trunk/test/MC/ELF/relocation.s Mon Nov 29 16:34:55 2010 @@ -21,7 +21,7 @@ // CHECK: # Symbol 0x00000002 // CHECK: (('st_name', 0x00000000) # '' // CHECK: ('st_bind', 0x00000000) -// CHECK ('st_type', 0x00000003) +// CHECK: ('st_type', 0x00000003) // CHECK: ('st_other', 0x00000000) // CHECK: ('st_shndx', 0x00000001) Modified: llvm/trunk/test/Transforms/DeadStoreElimination/simple.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/DeadStoreElimination/simple.ll?rev=120332&r1=120331&r2=120332&view=diff ============================================================================== --- llvm/trunk/test/Transforms/DeadStoreElimination/simple.ll (original) +++ llvm/trunk/test/Transforms/DeadStoreElimination/simple.ll Mon Nov 29 16:34:55 2010 @@ -27,7 +27,7 @@ define i32 @test3(i32* %g_addr) nounwind { ; CHECK: @test3 -; CHEcK: load i32* %g_addr +; CHECK: load i32* %g_addr %g_value = load i32* %g_addr, align 4 store i32 -1, i32* @g, align 4 store i32 %g_value, i32* %g_addr, align 4 Modified: llvm/trunk/test/Transforms/SimplifyLibCalls/StrSpn.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SimplifyLibCalls/StrSpn.ll?rev=120332&r1=120331&r2=120332&view=diff ============================================================================== --- llvm/trunk/test/Transforms/SimplifyLibCalls/StrSpn.ll (original) +++ llvm/trunk/test/Transforms/SimplifyLibCalls/StrSpn.ll Mon Nov 29 16:34:55 2010 @@ -19,7 +19,7 @@ %test4 = call i64 @strspn(i8* %s1, i8* %s2) ; CHECK: call i64 @strspn(i8* %s1, i8* %s2) ret i64 %test3 -; CHECK ret i64 5 +; CHECK: ret i64 5 } declare i64 @strcspn(i8*, i8*) From grosbach at apple.com Mon Nov 29 16:37:40 2010 From: grosbach at apple.com (Jim Grosbach) Date: Mon, 29 Nov 2010 22:37:40 -0000 Subject: [llvm-commits] [llvm] r120333 - in /llvm/trunk: lib/Target/ARM/ARMAsmPrinter.cpp lib/Target/ARM/ARMInstrInfo.td lib/Target/ARM/ARMInstrThumb2.td lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp lib/Target/ARM/Disassembler/ThumbDisassemblerCore.h lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp lib/Target/ARM/InstPrinter/ARMInstPrinter.h utils/TableGen/ARMDecoderEmitter.cpp Message-ID: <20101129223740.544822A6C12D@llvm.org> Author: grosbach Date: Mon Nov 29 16:37:40 2010 New Revision: 120333 URL: http://llvm.org/viewvc/llvm-project?rev=120333&view=rev Log: Pseudo-ize Thumb2 jump tables with explicit MC lowering to the raw instructions. This simplifies instruction printing and disassembly. Modified: llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp llvm/trunk/lib/Target/ARM/ARMInstrInfo.td llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp llvm/trunk/lib/Target/ARM/Disassembler/ThumbDisassemblerCore.h llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.h llvm/trunk/utils/TableGen/ARMDecoderEmitter.cpp Modified: llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp?rev=120333&r1=120332&r2=120333&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp Mon Nov 29 16:37:40 2010 @@ -774,11 +774,6 @@ OutContext); OutStreamer.EmitValue(Expr, OffsetWidth); } - - // Make sure the instruction that follows TBB is 2-byte aligned. - // FIXME: Constant island pass should insert an "ALIGN" instruction instead. - if (MI->getOpcode() == ARM::t2TBB_JT) - EmitAlignment(1); } void ARMAsmPrinter::PrintDebugValueComment(const MachineInstr *MI, @@ -924,15 +919,49 @@ return; } - case ARM::t2TBB_JT: - case ARM::t2TBH_JT: case ARM::t2BR_JT: { // Lower and emit the instruction itself, then the jump table following it. MCInst TmpInst; - // FIXME: The branch instruction is really a pseudo. We should xform it - // explicitly. - LowerARMMachineInstrToMCInst(MI, TmpInst, *this); + TmpInst.setOpcode(ARM::tMOVgpr2gpr); + TmpInst.addOperand(MCOperand::CreateReg(ARM::PC)); + TmpInst.addOperand(MCOperand::CreateReg(MI->getOperand(0).getReg())); + // Add predicate operands. + TmpInst.addOperand(MCOperand::CreateImm(ARMCC::AL)); + TmpInst.addOperand(MCOperand::CreateReg(0)); OutStreamer.EmitInstruction(TmpInst); + // Output the data for the jump table itself + EmitJump2Table(MI); + return; + } + case ARM::t2TBB_JT: { + // Lower and emit the instruction itself, then the jump table following it. + MCInst TmpInst; + + TmpInst.setOpcode(ARM::t2TBB); + TmpInst.addOperand(MCOperand::CreateReg(ARM::PC)); + TmpInst.addOperand(MCOperand::CreateReg(MI->getOperand(0).getReg())); + // Add predicate operands. + TmpInst.addOperand(MCOperand::CreateImm(ARMCC::AL)); + TmpInst.addOperand(MCOperand::CreateReg(0)); + OutStreamer.EmitInstruction(TmpInst); + // Output the data for the jump table itself + EmitJump2Table(MI); + // Make sure the next instruction is 2-byte aligned. + EmitAlignment(1); + return; + } + case ARM::t2TBH_JT: { + // Lower and emit the instruction itself, then the jump table following it. + MCInst TmpInst; + + TmpInst.setOpcode(ARM::t2TBH); + TmpInst.addOperand(MCOperand::CreateReg(ARM::PC)); + TmpInst.addOperand(MCOperand::CreateReg(MI->getOperand(0).getReg())); + // Add predicate operands. + TmpInst.addOperand(MCOperand::CreateImm(ARMCC::AL)); + TmpInst.addOperand(MCOperand::CreateReg(0)); + OutStreamer.EmitInstruction(TmpInst); + // Output the data for the jump table itself EmitJump2Table(MI); return; } @@ -941,7 +970,8 @@ // Lower and emit the instruction itself, then the jump table following it. // mov pc, target MCInst TmpInst; - unsigned Opc = MI->getOpcode() == ARM::BR_JTr ? ARM::MOVr : ARM::tMOVr; + unsigned Opc = MI->getOpcode() == ARM::BR_JTr ? + ARM::MOVr : ARM::tMOVgpr2gpr; TmpInst.setOpcode(Opc); TmpInst.addOperand(MCOperand::CreateReg(ARM::PC)); TmpInst.addOperand(MCOperand::CreateReg(MI->getOperand(0).getReg())); Modified: llvm/trunk/lib/Target/ARM/ARMInstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrInfo.td?rev=120333&r1=120332&r2=120333&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrInfo.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrInfo.td Mon Nov 29 16:37:40 2010 @@ -333,10 +333,6 @@ let PrintMethod = "printCPInstOperand"; } -def jt2block_operand : Operand { - let PrintMethod = "printJT2BlockOperand"; -} - // Local PC labels. def pclabel : Operand { let PrintMethod = "printPCLabel"; Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td?rev=120333&r1=120332&r2=120333&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Mon Nov 29 16:37:40 2010 @@ -21,11 +21,6 @@ let PrintMethod = "printThumbITMask"; } -// Table branch address -def tb_addrmode : Operand { - let PrintMethod = "printTBAddrMode"; -} - // Shifted operands. No register controlled shifts for Thumb2. // Note: We do not support rrx shifted operands yet. def t2_so_reg : Operand, // reg imm @@ -2933,59 +2928,40 @@ let isNotDuplicable = 1, isIndirectBranch = 1, isCodeGenOnly = 1 in { // $id doesn't exist in asmstring, should be lowered. def t2BR_JT : - T2JTI<(outs), - (ins GPR:$target, GPR:$index, jt2block_operand:$jt, i32imm:$id), - IIC_Br, "mov\tpc, $target$jt", - [(ARMbr2jt GPR:$target, GPR:$index, tjumptable:$jt, imm:$id)]> { - let Inst{31-27} = 0b11101; - let Inst{26-20} = 0b0100100; - let Inst{19-16} = 0b1111; - let Inst{14-12} = 0b000; - let Inst{11-8} = 0b1111; // Rd = pc - let Inst{7-4} = 0b0000; -} + tPseudoInst<(outs), + (ins GPR:$target, GPR:$index, i32imm:$jt, i32imm:$id), + SizeSpecial, IIC_Br,// "mov\tpc, $target$jt", + [(ARMbr2jt GPR:$target, GPR:$index, tjumptable:$jt, imm:$id)]>; // FIXME: Add a non-pc based case that can be predicated. -let isCodeGenOnly = 1 in // $id doesn't exist in asm string, should be lowered. -def t2TBB_JT : - T2JTI<(outs), - (ins tb_addrmode:$index, jt2block_operand:$jt, i32imm:$id), - IIC_Br, "tbb\t$index$jt", []> { - let Inst{31-27} = 0b11101; - let Inst{26-20} = 0b0001101; - let Inst{19-16} = 0b1111; // Rn = pc (table follows this instruction) - let Inst{15-8} = 0b11110000; - let Inst{7-4} = 0b0000; // B form -} - -let isCodeGenOnly = 1 in // $id doesn't exist in asm string, should be lowered. -def t2TBH_JT : - T2JTI<(outs), - (ins tb_addrmode:$index, jt2block_operand:$jt, i32imm:$id), - IIC_Br, "tbh\t$index$jt", []> { - let Inst{31-27} = 0b11101; - let Inst{26-20} = 0b0001101; - let Inst{19-16} = 0b1111; // Rn = pc (table follows this instruction) - let Inst{15-8} = 0b11110000; - let Inst{7-4} = 0b0001; // H form -} - -// Generic versions of the above two instructions, for disassembly only +def t2TBB_JT : tPseudoInst<(outs), + (ins GPR:$index, i32imm:$jt, i32imm:$id), + SizeSpecial, IIC_Br, []>; + +def t2TBH_JT : tPseudoInst<(outs), + (ins GPR:$index, i32imm:$jt, i32imm:$id), + SizeSpecial, IIC_Br, []>; -def t2TBBgen : T2I<(outs), (ins GPR:$a, GPR:$b), IIC_Br, - "tbb", "\t[$a, $b]", []>{ - let Inst{31-27} = 0b11101; - let Inst{26-20} = 0b0001101; - let Inst{15-8} = 0b11110000; - let Inst{7-4} = 0b0000; // B form +def t2TBB : T2I<(outs), (ins GPR:$Rn, GPR:$Rm), IIC_Br, + "tbb", "\t[$Rn, $Rm]", []> { + bits<4> Rn; + bits<4> Rm; + let Inst{27-20} = 0b10001101; + let Inst{19-16} = Rn; + let Inst{15-5} = 0b11110000000; + let Inst{4} = 0; // B form + let Inst{3-0} = Rm; } -def t2TBHgen : T2I<(outs), (ins GPR:$a, GPR:$b), IIC_Br, - "tbh", "\t[$a, $b, lsl #1]", []> { - let Inst{31-27} = 0b11101; - let Inst{26-20} = 0b0001101; - let Inst{15-8} = 0b11110000; - let Inst{7-4} = 0b0001; // H form +def t2TBH : T2I<(outs), (ins GPR:$Rn, GPR:$Rm), IIC_Br, + "tbh", "\t[$Rn, $Rm, lsl #1]", []> { + bits<4> Rn; + bits<4> Rm; + let Inst{27-20} = 0b10001101; + let Inst{19-16} = Rn; + let Inst{15-5} = 0b11110000000; + let Inst{4} = 1; // H form + let Inst{3-0} = Rm; } } // isNotDuplicable, isIndirectBranch Modified: llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp?rev=120333&r1=120332&r2=120333&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp (original) +++ llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp Mon Nov 29 16:37:40 2010 @@ -789,7 +789,6 @@ } // Misc. Branch Instructions. -// BR_JTadd, BR_JTr, BR_JTm // BLXr9, BXr9 // BRIND, BX_RET static bool DisassembleBrMiscFrm(MCInst &MI, unsigned Opcode, uint32_t insn, @@ -816,72 +815,6 @@ return true; } - // BR_JTadd is an ADD with Rd = PC, (Rn, Rm) as the target and index regs. - if (Opcode == ARM::BR_JTadd) { - // InOperandList with GPR:$target and GPR:$idx regs. - - assert(NumOps == 4 && "Expect 4 operands"); - MI.addOperand(MCOperand::CreateReg(getRegisterEnum(B, ARM::GPRRegClassID, - decodeRn(insn)))); - MI.addOperand(MCOperand::CreateReg(getRegisterEnum(B, ARM::GPRRegClassID, - decodeRm(insn)))); - - // Fill in the two remaining imm operands to signify build completion. - MI.addOperand(MCOperand::CreateImm(0)); - MI.addOperand(MCOperand::CreateImm(0)); - - OpIdx = 4; - return true; - } - - // BR_JTr is a MOV with Rd = PC, and Rm as the source register. - if (Opcode == ARM::BR_JTr) { - // InOperandList with GPR::$target reg. - - assert(NumOps == 3 && "Expect 3 operands"); - MI.addOperand(MCOperand::CreateReg(getRegisterEnum(B, ARM::GPRRegClassID, - decodeRm(insn)))); - - // Fill in the two remaining imm operands to signify build completion. - MI.addOperand(MCOperand::CreateImm(0)); - MI.addOperand(MCOperand::CreateImm(0)); - - OpIdx = 3; - return true; - } - - // BR_JTm is an LDR with Rt = PC. - if (Opcode == ARM::BR_JTm) { - // This is the reg/reg form, with base reg followed by +/- reg shop imm. - // See also ARMAddressingModes.h (Addressing Mode #2). - - assert(NumOps == 5 && getIBit(insn) == 1 && "Expect 5 operands && I-bit=1"); - MI.addOperand(MCOperand::CreateReg(getRegisterEnum(B, ARM::GPRRegClassID, - decodeRn(insn)))); - - ARM_AM::AddrOpc AddrOpcode = getUBit(insn) ? ARM_AM::add : ARM_AM::sub; - - // Disassemble the offset reg (Rm), shift type, and immediate shift length. - MI.addOperand(MCOperand::CreateReg(getRegisterEnum(B, ARM::GPRRegClassID, - decodeRm(insn)))); - // Inst{6-5} encodes the shift opcode. - ARM_AM::ShiftOpc ShOp = getShiftOpcForBits(slice(insn, 6, 5)); - // Inst{11-7} encodes the imm5 shift amount. - unsigned ShImm = slice(insn, 11, 7); - - // A8.4.1. Possible rrx or shift amount of 32... - getImmShiftSE(ShOp, ShImm); - MI.addOperand(MCOperand::CreateImm( - ARM_AM::getAM2Opc(AddrOpcode, ShImm, ShOp))); - - // Fill in the two remaining imm operands to signify build completion. - MI.addOperand(MCOperand::CreateImm(0)); - MI.addOperand(MCOperand::CreateImm(0)); - - OpIdx = 5; - return true; - } - return false; } Modified: llvm/trunk/lib/Target/ARM/Disassembler/ThumbDisassemblerCore.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/Disassembler/ThumbDisassemblerCore.h?rev=120333&r1=120332&r2=120333&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/Disassembler/ThumbDisassemblerCore.h (original) +++ llvm/trunk/lib/Target/ARM/Disassembler/ThumbDisassemblerCore.h Mon Nov 29 16:37:40 2010 @@ -1248,13 +1248,7 @@ return true; } -// PC-based defined for Codegen, which do not get decoded by design: -// -// t2TBB, t2TBH: Rm immDontCare immDontCare -// -// Generic version defined for disassembly: -// -// t2TBBgen, t2TBHgen: Rn Rm Pred-Imm Pred-CCR +// t2TBB, t2TBH: Rn Rm Pred-Imm Pred-CCR static bool DisassembleThumb2TB(MCInst &MI, unsigned Opcode, uint32_t insn, unsigned short NumOps, unsigned &NumOpsAdded, BO B) { @@ -2125,7 +2119,7 @@ return DisassembleThumb2LdStDual(MI, Opcode, insn, NumOps, NumOpsAdded, B); } - if (Opcode == ARM::t2TBBgen || Opcode == ARM::t2TBHgen) { + if (Opcode == ARM::t2TBB || Opcode == ARM::t2TBH) { // Table branch. return DisassembleThumb2TB(MI, Opcode, insn, NumOps, NumOpsAdded, B); } Modified: llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp?rev=120333&r1=120332&r2=120333&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp (original) +++ llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp Mon Nov 29 16:37:40 2010 @@ -528,14 +528,6 @@ O << "]"; } -void ARMInstPrinter::printTBAddrMode(const MCInst *MI, unsigned OpNum, - raw_ostream &O) { - O << "[pc, " << getRegisterName(MI->getOperand(OpNum).getReg()); - if (MI->getOpcode() == ARM::t2TBH_JT) - O << ", lsl #1"; - O << ']'; -} - // Constant shifts t2_so_reg is a 2-operand unit corresponding to the Thumb2 // register with shift forms. // REG 0 0 - e.g. R5 Modified: llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.h?rev=120333&r1=120332&r2=120333&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.h (original) +++ llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.h Mon Nov 29 16:37:40 2010 @@ -94,10 +94,6 @@ void printSBitModifierOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O); void printRegisterList(const MCInst *MI, unsigned OpNum, raw_ostream &O); - // The jump table instructions have custom handling in ARMAsmPrinter - // to output the jump table. Nothing further is necessary here. - void printJT2BlockOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O) {} - void printTBAddrMode(const MCInst *MI, unsigned OpNum, raw_ostream &O); void printNoHashImmediate(const MCInst *MI, unsigned OpNum, raw_ostream &O); void printVFPf32ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O); void printVFPf64ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O); Modified: llvm/trunk/utils/TableGen/ARMDecoderEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/ARMDecoderEmitter.cpp?rev=120333&r1=120332&r2=120333&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/ARMDecoderEmitter.cpp (original) +++ llvm/trunk/utils/TableGen/ARMDecoderEmitter.cpp Mon Nov 29 16:37:40 2010 @@ -1718,10 +1718,6 @@ if (Name == "t2LDRDpci") return false; - // Ignore t2TBB, t2TBH and prefer the generic t2TBBgen, t2TBHgen. - if (Name == "t2TBB_JT" || Name == "t2TBH_JT") - return false; - // Resolve conflicts: // // tBfar conflicts with tBLr9 @@ -1729,7 +1725,6 @@ // tPOP_RET/t2LDMIA_RET conflict with tPOP/t2LDM (ditto) // tMOVCCi conflicts with tMOVi8 // tMOVCCr conflicts with tMOVgpr2gpr - // tBR_JTr conflicts with tBRIND // tSpill conflicts with tSTRspi // tLDRcp conflicts with tLDRspi // tRestore conflicts with tLDRspi @@ -1740,7 +1735,7 @@ Name == "tCMPzhir" || /* Name == "t2CMNzrr" || Name == "t2CMNzrs" || Name == "t2CMNzri" || */ Name == "t2CMPzrr" || Name == "t2CMPzrs" || Name == "t2CMPzri" || Name == "tPOP_RET" || Name == "t2LDMIA_RET" || - Name == "tMOVCCi" || Name == "tMOVCCr" || Name == "tBR_JTr" || + Name == "tMOVCCi" || Name == "tMOVCCr" || Name == "tSpill" || Name == "tLDRcp" || Name == "tRestore" || Name == "t2LEApcrelJT" || Name == "t2MOVCCi16") return false; From isanbard at gmail.com Mon Nov 29 16:37:47 2010 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 29 Nov 2010 22:37:47 -0000 Subject: [llvm-commits] [llvm] r120334 - /llvm/trunk/lib/Target/ARM/ARMInstrThumb.td Message-ID: <20101129223747.1B22D2A6C12F@llvm.org> Author: void Date: Mon Nov 29 16:37:46 2010 New Revision: 120334 URL: http://llvm.org/viewvc/llvm-project?rev=120334&view=rev Log: Thumb encodings for conditional moves. Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb.td Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrThumb.td?rev=120334&r1=120333&r2=120334&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrThumb.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrThumb.td Mon Nov 29 16:37:46 2010 @@ -1210,12 +1210,24 @@ let neverHasSideEffects = 1 in { def tMOVCCr : T1pIt<(outs GPR:$dst), (ins GPR:$lhs, GPR:$rhs), IIC_iCMOVr, "mov", "\t$dst, $rhs", []>, - T1Special<{1,0,?,?}>; + T1Special<{1,0,?,?}> { + bits<4> rhs; + bits<4> dst; + let Inst{7} = dst{3}; + let Inst{6-3} = rhs; + let Inst{2-0} = dst{2-0}; +} let isMoveImm = 1 in def tMOVCCi : T1pIt<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs), IIC_iCMOVi, "mov", "\t$dst, $rhs", []>, - T1General<{1,0,0,?,?}>; + T1General<{1,0,0,?,?}> { + bits<8> rhs; + bits<3> dst; + let Inst{10-8} = dst; + let Inst{7-0} = rhs; +} + } // neverHasSideEffects // tLEApcrel - Load a pc-relative address into a register without offending the From grosbach at apple.com Mon Nov 29 16:38:48 2010 From: grosbach at apple.com (Jim Grosbach) Date: Mon, 29 Nov 2010 22:38:48 -0000 Subject: [llvm-commits] [llvm] r120335 - /llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Message-ID: <20101129223848.54BAB2A6C12D@llvm.org> Author: grosbach Date: Mon Nov 29 16:38:48 2010 New Revision: 120335 URL: http://llvm.org/viewvc/llvm-project?rev=120335&view=rev Log: tidy up. Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td?rev=120335&r1=120334&r2=120335&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Mon Nov 29 16:38:48 2010 @@ -2927,8 +2927,7 @@ let isNotDuplicable = 1, isIndirectBranch = 1, isCodeGenOnly = 1 in { // $id doesn't exist in asmstring, should be lowered. -def t2BR_JT : - tPseudoInst<(outs), +def t2BR_JT : tPseudoInst<(outs), (ins GPR:$target, GPR:$index, i32imm:$jt, i32imm:$id), SizeSpecial, IIC_Br,// "mov\tpc, $target$jt", [(ARMbr2jt GPR:$target, GPR:$index, tjumptable:$jt, imm:$id)]>; From benny.kra at googlemail.com Mon Nov 29 16:39:38 2010 From: benny.kra at googlemail.com (Benjamin Kramer) Date: Mon, 29 Nov 2010 22:39:38 -0000 Subject: [llvm-commits] [llvm] r120336 - /llvm/trunk/test/CodeGen/ARM/vbits.ll Message-ID: <20101129223938.46E622A6C12D@llvm.org> Author: d0k Date: Mon Nov 29 16:39:38 2010 New Revision: 120336 URL: http://llvm.org/viewvc/llvm-project?rev=120336&view=rev Log: Add missing colon. Modified: llvm/trunk/test/CodeGen/ARM/vbits.ll Modified: llvm/trunk/test/CodeGen/ARM/vbits.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/vbits.ll?rev=120336&r1=120335&r2=120336&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/ARM/vbits.ll (original) +++ llvm/trunk/test/CodeGen/ARM/vbits.ll Mon Nov 29 16:39:38 2010 @@ -529,7 +529,7 @@ define <8 x i8> @v_bicimm(<8 x i8>* %A) nounwind { ; CHECK: v_bicimm: ; CHECK-NOT: vmov -; CHECK-NOT vmvn +; CHECK-NOT: vmvn ; CHECK: vbic %tmp1 = load <8 x i8>* %A %tmp3 = and <8 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0 > From dalej at apple.com Mon Nov 29 16:40:26 2010 From: dalej at apple.com (Dale Johannesen) Date: Mon, 29 Nov 2010 22:40:26 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r120337 - in /llvm-gcc-4.2/trunk/gcc: llvm-backend.cpp llvm-convert.cpp Message-ID: <20101129224026.3F6652A6C12D@llvm.org> Author: johannes Date: Mon Nov 29 16:40:26 2010 New Revision: 120337 URL: http://llvm.org/viewvc/llvm-project?rev=120337&view=rev Log: Catch up with some header files that moved, unbreaking the build. Modified: llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Modified: llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp?rev=120337&r1=120336&r2=120337&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Mon Nov 29 16:40:26 2010 @@ -49,7 +49,7 @@ #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/StandardPasses.h" #include "llvm/Support/FormattedStream.h" -#include "llvm/System/Program.h" +#include "llvm/Support/Program.h" #include extern "C" { Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=120337&r1=120336&r2=120337&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Mon Nov 29 16:40:26 2010 @@ -33,7 +33,7 @@ #include "llvm/LLVMContext.h" #include "llvm/Module.h" #include "llvm/Analysis/ConstantFolding.h" -#include "llvm/System/Host.h" +#include "llvm/Support/Host.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Target/TargetLowering.h" From grosbach at apple.com Mon Nov 29 16:40:58 2010 From: grosbach at apple.com (Jim Grosbach) Date: Mon, 29 Nov 2010 22:40:58 -0000 Subject: [llvm-commits] [llvm] r120338 - /llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Message-ID: <20101129224058.B34612A6C12D@llvm.org> Author: grosbach Date: Mon Nov 29 16:40:58 2010 New Revision: 120338 URL: http://llvm.org/viewvc/llvm-project?rev=120338&view=rev Log: Nuke dead isCodeGenOnly annotation and extraneous comment. Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td?rev=120338&r1=120337&r2=120338&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Mon Nov 29 16:40:58 2010 @@ -2925,11 +2925,10 @@ let Inst{10-0} = target{10-0}; } -let isNotDuplicable = 1, isIndirectBranch = 1, - isCodeGenOnly = 1 in { // $id doesn't exist in asmstring, should be lowered. +let isNotDuplicable = 1, isIndirectBranch = 1 in { def t2BR_JT : tPseudoInst<(outs), (ins GPR:$target, GPR:$index, i32imm:$jt, i32imm:$id), - SizeSpecial, IIC_Br,// "mov\tpc, $target$jt", + SizeSpecial, IIC_Br, [(ARMbr2jt GPR:$target, GPR:$index, tjumptable:$jt, imm:$id)]>; // FIXME: Add a non-pc based case that can be predicated. From evan.cheng at apple.com Mon Nov 29 16:43:27 2010 From: evan.cheng at apple.com (Evan Cheng) Date: Mon, 29 Nov 2010 22:43:27 -0000 Subject: [llvm-commits] [llvm] r120339 - in /llvm/trunk: lib/Target/ARM/ARMInstrInfo.td lib/Target/ARM/ARMInstrThumb.td lib/Target/ARM/ARMInstrThumb2.td test/CodeGen/ARM/2010-11-29-PrologueBug.ll Message-ID: <20101129224327.F02842A6C12D@llvm.org> Author: evancheng Date: Mon Nov 29 16:43:27 2010 New Revision: 120339 URL: http://llvm.org/viewvc/llvm-project?rev=120339&view=rev Log: Mark Darwin call instructions as using "r7" to prevent the frame-register assignment instructions from being moved below / above calls. rdar://8690640 Added: llvm/trunk/test/CodeGen/ARM/2010-11-29-PrologueBug.ll Modified: llvm/trunk/lib/Target/ARM/ARMInstrInfo.td llvm/trunk/lib/Target/ARM/ARMInstrThumb.td llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Modified: llvm/trunk/lib/Target/ARM/ARMInstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrInfo.td?rev=120339&r1=120338&r2=120339&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrInfo.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrInfo.td Mon Nov 29 16:43:27 2010 @@ -1232,12 +1232,16 @@ } } -// On non-Darwin platforms R9 is callee-saved. +// All calls clobber the non-callee saved registers. SP is marked as +// a use to prevent stack-pointer assignments that appear immediately +// before calls from potentially appearing dead. let isCall = 1, + // On non-Darwin platforms R9 is callee-saved. Defs = [R0, R1, R2, R3, R12, LR, D0, D1, D2, D3, D4, D5, D6, D7, D16, D17, D18, D19, D20, D21, D22, D23, - D24, D25, D26, D27, D28, D29, D30, D31, CPSR, FPSCR] in { + D24, D25, D26, D27, D28, D29, D30, D31, CPSR, FPSCR], + Uses = [SP] in { def BL : ABXI<0b1011, (outs), (ins bltarget:$func, variable_ops), IIC_Br, "bl\t$func", [(ARMcall tglobaladdr:$func)]>, @@ -1288,12 +1292,15 @@ } } -// On Darwin R9 is call-clobbered. let isCall = 1, + // On Darwin R9 is call-clobbered. + // R7 is marked as a use to prevent frame-pointer assignments from being + // moved above / below calls. Defs = [R0, R1, R2, R3, R9, R12, LR, D0, D1, D2, D3, D4, D5, D6, D7, D16, D17, D18, D19, D20, D21, D22, D23, - D24, D25, D26, D27, D28, D29, D30, D31, CPSR, FPSCR] in { + D24, D25, D26, D27, D28, D29, D30, D31, CPSR, FPSCR], + Uses = [R7, SP] in { def BLr9 : ABXI<0b1011, (outs), (ins bltarget:$func, variable_ops), IIC_Br, "bl\t$func", [(ARMcall tglobaladdr:$func)]>, Requires<[IsARM, IsDarwin]> { @@ -1473,7 +1480,7 @@ } // Supervisor Call (Software Interrupt) -- for disassembly only -let isCall = 1 in { +let isCall = 1, Uses = [SP] in { def SVC : ABI<0b1111, (outs), (ins i32imm:$svc), IIC_Br, "svc", "\t$svc", [/* For disassembly only; pattern left blank */]> { bits<24> svc; @@ -3241,7 +3248,7 @@ // FIXME: This needs to be a pseudo of some sort so that we can get the // encoding right, complete with fixup for the aeabi_read_tp function. let isCall = 1, - Defs = [R0, R12, LR, CPSR] in { + Defs = [R0, R12, LR, CPSR], Uses = [SP] in { def TPsoft : ABXI<0b1011, (outs), (ins), IIC_Br, "bl\t__aeabi_read_tp", [(set R0, ARMthread_pointer)]>; Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrThumb.td?rev=120339&r1=120338&r2=120339&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrThumb.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrThumb.td Mon Nov 29 16:43:27 2010 @@ -336,11 +336,16 @@ let Inst{7-0} = regs{7-0}; } +// All calls clobber the non-callee saved registers. SP is marked as +// a use to prevent stack-pointer assignments that appear immediately +// before calls from potentially appearing dead. let isCall = 1, + // On non-Darwin platforms R9 is callee-saved. Defs = [R0, R1, R2, R3, R12, LR, D0, D1, D2, D3, D4, D5, D6, D7, D16, D17, D18, D19, D20, D21, D22, D23, - D24, D25, D26, D27, D28, D29, D30, D31, CPSR, FPSCR] in { + D24, D25, D26, D27, D28, D29, D30, D31, CPSR, FPSCR], + Uses = [SP] in { // Also used for Thumb2 def tBL : TIx2<0b11110, 0b11, 1, (outs), (ins i32imm:$func, variable_ops), IIC_Br, @@ -371,12 +376,15 @@ Requires<[IsThumb, IsThumb1Only, IsNotDarwin]>; } -// On Darwin R9 is call-clobbered. let isCall = 1, + // On Darwin R9 is call-clobbered. + // R7 is marked as a use to prevent frame-pointer assignments from being + // moved above / below calls. Defs = [R0, R1, R2, R3, R9, R12, LR, D0, D1, D2, D3, D4, D5, D6, D7, D16, D17, D18, D19, D20, D21, D22, D23, - D24, D25, D26, D27, D28, D29, D30, D31, CPSR, FPSCR] in { + D24, D25, D26, D27, D28, D29, D30, D31, CPSR, FPSCR], + Uses = [R7, SP] in { // Also used for Thumb2 def tBLr9 : TIx2<0b11110, 0b11, 1, (outs), (ins pred:$p, i32imm:$func, variable_ops), IIC_Br, @@ -469,7 +477,7 @@ // A8.6.218 Supervisor Call (Software Interrupt) -- for disassembly only // A8.6.16 B: Encoding T1 // If Inst{11-8} == 0b1111 then SEE SVC -let isCall = 1 in +let isCall = 1, Uses = [SP] in def tSVC : T1pI<(outs), (ins i32imm:$imm), IIC_Br, "svc", "\t$imm", []>, Encoding16 { bits<8> imm; @@ -1250,7 +1258,7 @@ // __aeabi_read_tp preserves the registers r1-r3. let isCall = 1, - Defs = [R0, LR] in { + Defs = [R0, LR], Uses = [SP] in { def tTPsoft : TIx2<0b11110, 0b11, 1, (outs), (ins), IIC_Br, "bl\t__aeabi_read_tp", [(set R0, ARMthread_pointer)]>; Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td?rev=120339&r1=120338&r2=120339&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Mon Nov 29 16:43:27 2010 @@ -2836,7 +2836,7 @@ // __aeabi_read_tp preserves the registers r1-r3. let isCall = 1, - Defs = [R0, R12, LR, CPSR] in { + Defs = [R0, R12, LR, CPSR], Uses = [SP] in { def t2TPsoft : T2XI<(outs), (ins), IIC_Br, "bl\t__aeabi_read_tp", [(set R0, ARMthread_pointer)]> { Added: llvm/trunk/test/CodeGen/ARM/2010-11-29-PrologueBug.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/2010-11-29-PrologueBug.ll?rev=120339&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/ARM/2010-11-29-PrologueBug.ll (added) +++ llvm/trunk/test/CodeGen/ARM/2010-11-29-PrologueBug.ll Mon Nov 29 16:43:27 2010 @@ -0,0 +1,28 @@ +; RUN: llc < %s -mtriple=armv7-apple-darwin | FileCheck %s --check-prefix=ARM +; RUN: llc < %s -mtriple=thumbv7-apple-darwin | FileCheck %s --check-prefix=THUMB2 +; rdar://8690640 + +define i32* @t(i32* %x) nounwind { +entry: +; ARM: t: +; ARM: push +; ARM: mov r7, sp +; ARM: bl _foo +; ARM: bl _foo +; ARM: bl _foo +; ARM: ldmia sp!, {r7, pc} + +; THUMB2: t: +; THUMB2: push +; THUMB2: mov r7, sp +; THUMB2: blx _foo +; THUMB2: blx _foo +; THUMB2: blx _foo +; THUMB2: pop + %0 = tail call i32* @foo(i32* %x) nounwind + %1 = tail call i32* @foo(i32* %0) nounwind + %2 = tail call i32* @foo(i32* %1) nounwind + ret i32* %2 +} + +declare i32* @foo(i32*) From resistor at mac.com Mon Nov 29 16:44:32 2010 From: resistor at mac.com (Owen Anderson) Date: Mon, 29 Nov 2010 22:44:32 -0000 Subject: [llvm-commits] [llvm] r120340 - in /llvm/trunk: lib/Target/ARM/ARMCodeEmitter.cpp lib/Target/ARM/ARMInstrThumb2.td lib/Target/ARM/ARMMCCodeEmitter.cpp test/MC/ARM/thumb2.s Message-ID: <20101129224432.C02C32A6C12D@llvm.org> Author: resistor Date: Mon Nov 29 16:44:32 2010 New Revision: 120340 URL: http://llvm.org/viewvc/llvm-project?rev=120340&view=rev Log: Provide Thumb2 encodings for basic loads and stores. Modified: llvm/trunk/lib/Target/ARM/ARMCodeEmitter.cpp llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td llvm/trunk/lib/Target/ARM/ARMMCCodeEmitter.cpp llvm/trunk/test/MC/ARM/thumb2.s Modified: llvm/trunk/lib/Target/ARM/ARMCodeEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMCodeEmitter.cpp?rev=120340&r1=120339&r2=120340&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMCodeEmitter.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMCodeEmitter.cpp Mon Nov 29 16:44:32 2010 @@ -177,6 +177,12 @@ const { return 0; } unsigned getSORegOpValue(const MachineInstr &MI, unsigned Op) const { return 0; } + unsigned getT2AddrModeImm12OpValue(const MachineInstr &MI, unsigned Op) + const { return 0; } + unsigned getT2AddrModeImm8OpValue(const MachineInstr &MI, unsigned Op) + const { return 0; } + unsigned getT2AddrModeSORegOpValue(const MachineInstr &MI, unsigned Op) + const { return 0; } unsigned getT2SORegOpValue(const MachineInstr &MI, unsigned Op) const { return 0; } unsigned getRotImmOpValue(const MachineInstr &MI, unsigned Op) Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td?rev=120340&r1=120339&r2=120340&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Mon Nov 29 16:44:32 2010 @@ -127,6 +127,7 @@ def t2addrmode_imm12 : Operand, ComplexPattern { let PrintMethod = "printAddrModeImm12Operand"; + string EncoderMethod = "getT2AddrModeImm12OpValue"; let MIOperandInfo = (ops GPR:$base, i32imm:$offsimm); } @@ -134,6 +135,7 @@ def t2addrmode_imm8 : Operand, ComplexPattern { let PrintMethod = "printT2AddrModeImm8Operand"; + string EncoderMethod = "getT2AddrModeImm8OpValue"; let MIOperandInfo = (ops GPR:$base, i32imm:$offsimm); } @@ -157,6 +159,7 @@ def t2addrmode_so_reg : Operand, ComplexPattern { let PrintMethod = "printT2AddrModeSoRegOperand"; + string EncoderMethod = "getT2AddrModeSORegOpValue"; let MIOperandInfo = (ops GPR:$base, rGPR:$offsreg, i32imm:$offsimm); } @@ -823,19 +826,26 @@ /// T2I_ld - Defines a set of (op r, {imm12|imm8|so_reg}) load patterns. multiclass T2I_ld opcod, string opc, InstrItinClass iii, InstrItinClass iis, PatFrag opnode> { - def i12 : T2Ii12<(outs GPR:$dst), (ins t2addrmode_imm12:$addr), iii, - opc, ".w\t$dst, $addr", - [(set GPR:$dst, (opnode t2addrmode_imm12:$addr))]> { + def i12 : T2Ii12<(outs GPR:$Rt), (ins t2addrmode_imm12:$addr), iii, + opc, ".w\t$Rt, $addr", + [(set GPR:$Rt, (opnode t2addrmode_imm12:$addr))]> { let Inst{31-27} = 0b11111; let Inst{26-25} = 0b00; let Inst{24} = signed; let Inst{23} = 1; let Inst{22-21} = opcod; let Inst{20} = 1; // load - } - def i8 : T2Ii8 <(outs GPR:$dst), (ins t2addrmode_imm8:$addr), iii, - opc, "\t$dst, $addr", - [(set GPR:$dst, (opnode t2addrmode_imm8:$addr))]> { + + bits<4> Rt; + let Inst{15-12} = Rt{3-0}; + + bits<16> addr; + let Inst{19-16} = addr{15-12}; // Rn + let Inst{11-0} = addr{11-0}; // imm + } + def i8 : T2Ii8 <(outs GPR:$Rt), (ins t2addrmode_imm8:$addr), iii, + opc, "\t$Rt, $addr", + [(set GPR:$Rt, (opnode t2addrmode_imm8:$addr))]> { let Inst{31-27} = 0b11111; let Inst{26-25} = 0b00; let Inst{24} = signed; @@ -846,10 +856,18 @@ // Offset: index==TRUE, wback==FALSE let Inst{10} = 1; // The P bit. let Inst{8} = 0; // The W bit. - } - def s : T2Iso <(outs GPR:$dst), (ins t2addrmode_so_reg:$addr), iis, - opc, ".w\t$dst, $addr", - [(set GPR:$dst, (opnode t2addrmode_so_reg:$addr))]> { + + bits<4> Rt; + let Inst{15-12} = Rt{3-0}; + + bits<13> addr; + let Inst{19-16} = addr{12-9}; // Rn + let Inst{9} = addr{8}; // U + let Inst{7-0} = addr{7-0}; // imm + } + def s : T2Iso <(outs GPR:$Rt), (ins t2addrmode_so_reg:$addr), iis, + opc, ".w\t$Rt, $addr", + [(set GPR:$Rt, (opnode t2addrmode_so_reg:$addr))]> { let Inst{31-27} = 0b11111; let Inst{26-25} = 0b00; let Inst{24} = signed; @@ -857,12 +875,20 @@ let Inst{22-21} = opcod; let Inst{20} = 1; // load let Inst{11-6} = 0b000000; + + bits<4> Rt; + let Inst{15-12} = Rt{3-0}; + + bits<10> addr; + let Inst{19-16} = addr{9-6}; // Rn + let Inst{3-0} = addr{5-2}; // Rm + let Inst{5-4} = addr{1-0}; // imm } // FIXME: Is the pci variant actually needed? - def pci : T2Ipc <(outs GPR:$dst), (ins i32imm:$addr), iii, - opc, ".w\t$dst, $addr", - [(set GPR:$dst, (opnode (ARMWrapper tconstpool:$addr)))]> { + def pci : T2Ipc <(outs GPR:$Rt), (ins i32imm:$addr), iii, + opc, ".w\t$Rt, $addr", + [(set GPR:$Rt, (opnode (ARMWrapper tconstpool:$addr)))]> { let isReMaterializable = 1; let Inst{31-27} = 0b11111; let Inst{26-25} = 0b00; @@ -871,23 +897,35 @@ let Inst{22-21} = opcod; let Inst{20} = 1; // load let Inst{19-16} = 0b1111; // Rn + + bits<4> Rt; + bits<12> addr; + let Inst{15-12} = Rt{3-0}; + let Inst{11-0} = addr{11-0}; } } /// T2I_st - Defines a set of (op r, {imm12|imm8|so_reg}) store patterns. multiclass T2I_st opcod, string opc, InstrItinClass iii, InstrItinClass iis, PatFrag opnode> { - def i12 : T2Ii12<(outs), (ins GPR:$src, t2addrmode_imm12:$addr), iii, - opc, ".w\t$src, $addr", - [(opnode GPR:$src, t2addrmode_imm12:$addr)]> { + def i12 : T2Ii12<(outs), (ins GPR:$Rt, t2addrmode_imm12:$addr), iii, + opc, ".w\t$Rt, $addr", + [(opnode GPR:$Rt, t2addrmode_imm12:$addr)]> { let Inst{31-27} = 0b11111; let Inst{26-23} = 0b0001; let Inst{22-21} = opcod; let Inst{20} = 0; // !load - } - def i8 : T2Ii8 <(outs), (ins GPR:$src, t2addrmode_imm8:$addr), iii, - opc, "\t$src, $addr", - [(opnode GPR:$src, t2addrmode_imm8:$addr)]> { + + bits<4> Rt; + let Inst{19-16} = Rt{3-0}; + + bits<16> addr; + let Inst{19-16} = addr{15-12}; // Rn + let Inst{11-0} = addr{11-0}; // imm + } + def i8 : T2Ii8 <(outs), (ins GPR:$Rt, t2addrmode_imm8:$addr), iii, + opc, "\t$Rt, $addr", + [(opnode GPR:$Rt, t2addrmode_imm8:$addr)]> { let Inst{31-27} = 0b11111; let Inst{26-23} = 0b0000; let Inst{22-21} = opcod; @@ -896,15 +934,31 @@ // Offset: index==TRUE, wback==FALSE let Inst{10} = 1; // The P bit. let Inst{8} = 0; // The W bit. - } - def s : T2Iso <(outs), (ins GPR:$src, t2addrmode_so_reg:$addr), iis, - opc, ".w\t$src, $addr", - [(opnode GPR:$src, t2addrmode_so_reg:$addr)]> { + + bits<4> Rt; + let Inst{19-16} = Rt{3-0}; + + bits<13> addr; + let Inst{19-16} = addr{12-9}; // Rn + let Inst{9} = addr{8}; // U + let Inst{7-0} = addr{7-0}; // imm + } + def s : T2Iso <(outs), (ins GPR:$Rt, t2addrmode_so_reg:$addr), iis, + opc, ".w\t$Rt, $addr", + [(opnode GPR:$Rt, t2addrmode_so_reg:$addr)]> { let Inst{31-27} = 0b11111; let Inst{26-23} = 0b0000; let Inst{22-21} = opcod; let Inst{20} = 0; // !load let Inst{11-6} = 0b000000; + + bits<4> Rt; + let Inst{15-12} = Rt{3-0}; + + bits<10> addr; + let Inst{19-16} = addr{9-6}; // Rn + let Inst{3-0} = addr{5-2}; // Rm + let Inst{5-4} = addr{1-0}; // imm } } Modified: llvm/trunk/lib/Target/ARM/ARMMCCodeEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMMCCodeEmitter.cpp?rev=120340&r1=120339&r2=120340&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMMCCodeEmitter.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMMCCodeEmitter.cpp Mon Nov 29 16:44:32 2010 @@ -173,6 +173,13 @@ return Encoded; } + unsigned getT2AddrModeSORegOpValue(const MCInst &MI, unsigned OpNum, + SmallVectorImpl &Fixups) const; + unsigned getT2AddrModeImm8OpValue(const MCInst &MI, unsigned OpNum, + SmallVectorImpl &Fixups) const; + unsigned getT2AddrModeImm12OpValue(const MCInst &MI, unsigned OpNum, + SmallVectorImpl &Fixups) const; + /// getSORegOpValue - Return an encoded so_reg shifted register value. unsigned getSORegOpValue(const MCInst &MI, unsigned Op, SmallVectorImpl &Fixups) const; @@ -633,6 +640,54 @@ } unsigned ARMMCCodeEmitter:: +getT2AddrModeSORegOpValue(const MCInst &MI, unsigned OpNum, + SmallVectorImpl &Fixups) const { + const MCOperand &MO1 = MI.getOperand(OpNum); + const MCOperand &MO2 = MI.getOperand(OpNum+1); + const MCOperand &MO3 = MI.getOperand(OpNum+2); + + // Encoded as [Rn, Rm, imm]. + // FIXME: Needs fixup support. + unsigned Value = getARMRegisterNumbering(MO1.getReg()); + Value <<= 4; + Value |= getARMRegisterNumbering(MO2.getReg()); + Value <<= 2; + Value |= MO3.getImm(); + + return Value; +} + +unsigned ARMMCCodeEmitter:: +getT2AddrModeImm8OpValue(const MCInst &MI, unsigned OpNum, + SmallVectorImpl &Fixups) const { + const MCOperand &MO1 = MI.getOperand(OpNum); + const MCOperand &MO2 = MI.getOperand(OpNum+1); + + // FIXME: Needs fixup support. + unsigned Value = getARMRegisterNumbering(MO1.getReg()); + + // Even though the immediate is 8 bits long, we need 9 bits in order + // to represent the (inverse of the) sign bit. + Value <<= 9; + Value |= ((int32_t)MO2.getImm()) & 511; + Value ^= 256; // Invert the sign bit. + return Value; +} + +unsigned ARMMCCodeEmitter:: +getT2AddrModeImm12OpValue(const MCInst &MI, unsigned OpNum, + SmallVectorImpl &Fixups) const { + const MCOperand &MO1 = MI.getOperand(OpNum); + const MCOperand &MO2 = MI.getOperand(OpNum+1); + + // FIXME: Needs fixup support. + unsigned Value = getARMRegisterNumbering(MO1.getReg()); + Value <<= 12; + Value |= MO2.getImm() & 4095; + return Value; +} + +unsigned ARMMCCodeEmitter:: getT2SORegOpValue(const MCInst &MI, unsigned OpIdx, SmallVectorImpl &Fixups) const { // Sub-operands are [reg, imm]. The first register is Rm, the reg to be Modified: llvm/trunk/test/MC/ARM/thumb2.s URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/thumb2.s?rev=120340&r1=120339&r2=120340&view=diff ============================================================================== --- llvm/trunk/test/MC/ARM/thumb2.s (original) +++ llvm/trunk/test/MC/ARM/thumb2.s Mon Nov 29 16:44:32 2010 @@ -101,4 +101,17 @@ @ CHECK: dmb ish @ encoding: [0x5b,0x8f,0xbf,0xf3] dmb ish - \ No newline at end of file +@ CHECK: str.w r0, [r1, #4092] @ encoding: [0xfc,0x0f,0xc1,0xf8] + str.w r0, [r1, #4092] +@ CHECK: str r0, [r1, #-128] @ encoding: [0x80,0x0c,0x41,0xf8] + str r0, [r1, #-128] +@ CHECK: str.w r0, [r1, r2, lsl #2] @ encoding: [0x22,0x00,0x41,0xf8 + str.w r0, [r1, r2, lsl #2] + +@ CHECK: ldr.w r0, [r0, #4092] @ encoding: [0xfc,0x0f,0xd0,0xf8] + ldr.w r0, [r0, #4092] +@ CHECK: ldr r0, [r0, #-128] @ encoding: [0x80,0x0c,0x50,0xf8] + ldr r0, [r0, #-128] +@ CHECK: ldr.w r0, [r0, r1, lsl #2] @ encoding: [0x21,0x00,0x50,0xf8] + ldr.w r0, [r0, r1, lsl #2] + From clattner at apple.com Mon Nov 29 16:49:12 2010 From: clattner at apple.com (Chris Lattner) Date: Mon, 29 Nov 2010 14:49:12 -0800 Subject: [llvm-commits] [Review request] Instcombine: extractvalue from load --> load from gep In-Reply-To: References: <7CBC704A-3752-4146-9B04-867EE9F3EDED@apple.com> Message-ID: <775F6367-3D8F-4803-B91B-7AC19DACF8DC@apple.com> On Nov 29, 2010, at 2:21 PM, Frits van Bommel wrote: > On Mon, Nov 29, 2010 at 10:30 PM, Chris Lattner wrote: >> I think that Dan is pointing out that it is unwise for an frontend to generate a ton of aggregate values, because that will cause fastisel to be defeated and lead to slower compile times. However, despite Dan's objections, I think this is a perfectly reasonable xform for instcombine to do. > > I agree that it's probably not a very good thing to do, but apparently > they do occur "in the wild" even with clang. Yep, clang generates them on x86-64 for ABI reasons. > Also, I've found aggregate values can really make a simple frontend > easier to write sometimes when you can just assume that any expression > will generate (at most) a single llvm::Value* even if the result > logically has two fields, e.g. a pointer and length for a dynamic > array. > So if you prefer ease of implementation, this is at least a useful hack. Completely agreed. It's also useful for complex numbers and a variety of other things. > One way extractvalues can enter the code, by the way, is return values > of functions. For instance, on x86-64 9-16 byte structs are returned > as a 2-field struct value. When such a function gets inlined, this > optimization may fire if the frontend used a single load + ret instead > of two loads + two insertvalues + ret to construct the return value. > (The fact that using more instructions causes it to optimize better > can be a bit counter-intuitive) Yep. > We could also add a "load %struct*" --> load fields + construct > %struct with insertvalues transform... Not a bad idea, though probably not worth it. At -O0 (when fastisel kicks in) no optimization passes are run :) > That's what the first version did, and the exact reason it was > horribly broken :). Doing that causes -instcombine to try to insert it > at the current location, which is that of the extractvalue. Adding an > explicit insert point causes an assert when trying to insert it > because it's already in a basic block. Thanks again Frits, -Chris From evan.cheng at apple.com Mon Nov 29 16:57:32 2010 From: evan.cheng at apple.com (Evan Cheng) Date: Mon, 29 Nov 2010 14:57:32 -0800 Subject: [llvm-commits] [llvm] r119947 - /llvm/trunk/lib/Target/X86/README.txt In-Reply-To: <20101121185921.3269C2A6C12C@llvm.org> References: <20101121185921.3269C2A6C12C@llvm.org> Message-ID: <42812564-79B7-4366-8957-C9B8ABA4C5CB@apple.com> Actually, this doesn't appear to be working on Darwin either. The issue is the call is turned into a fsin node and the "tailcall" property is apparently lost by the time legalizer expands it back into a call. This needs to be fixed but I am not sure how. Evan On Nov 21, 2010, at 10:59 AM, Chris Lattner wrote: > Author: lattner > Date: Sun Nov 21 12:59:20 2010 > New Revision: 119947 > > URL: http://llvm.org/viewvc/llvm-project?rev=119947&view=rev > Log: > apparently tailcalls are better on darwin/x86-64 than on linux? > > Modified: > llvm/trunk/lib/Target/X86/README.txt > > Modified: llvm/trunk/lib/Target/X86/README.txt > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/README.txt?rev=119947&r1=119946&r2=119947&view=diff > ============================================================================== > --- llvm/trunk/lib/Target/X86/README.txt (original) > +++ llvm/trunk/lib/Target/X86/README.txt Sun Nov 21 12:59:20 2010 > @@ -895,6 +895,24 @@ > > //===---------------------------------------------------------------------===// > > +Linux is missing some basic tail call support: > + > +#include > +double foo(double a) { return sin(a); } > + > +This compiles into this on x86-64 Linux (but not darwin): > +foo: > + subq $8, %rsp > + call sin > + addq $8, %rsp > + ret > +vs: > + > +foo: > + jmp sin > + > +//===---------------------------------------------------------------------===// > + > Tail call optimization improvements: Tail call optimization currently > pushes all arguments on the top of the stack (their normal place for > non-tail call optimized calls) that source from the callers arguments > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20101129/ee939a6e/attachment.html From clattner at apple.com Mon Nov 29 17:00:15 2010 From: clattner at apple.com (Chris Lattner) Date: Mon, 29 Nov 2010 15:00:15 -0800 Subject: [llvm-commits] [llvm] r119947 - /llvm/trunk/lib/Target/X86/README.txt In-Reply-To: <42812564-79B7-4366-8957-C9B8ABA4C5CB@apple.com> References: <20101121185921.3269C2A6C12C@llvm.org> <42812564-79B7-4366-8957-C9B8ABA4C5CB@apple.com> Message-ID: <5735D164-6BF5-429A-8B72-F1950DA4A517@apple.com> On Nov 29, 2010, at 2:57 PM, Evan Cheng wrote: > Actually, this doesn't appear to be working on Darwin either. The issue is the call is turned into a fsin node and the "tailcall" property is apparently lost by the time legalizer expands it back into a call. This needs to be fixed but I am not sure how. Ah, I thought it was working for me. It should always be safe to add this for sin/cos/etc. The "tailcall" property just means that the callee is known to not access the callers stack frame. -Chris From sabre at nondot.org Mon Nov 29 17:02:20 2010 From: sabre at nondot.org (Chris Lattner) Date: Mon, 29 Nov 2010 23:02:20 -0000 Subject: [llvm-commits] [llvm] r120341 - in /llvm/trunk/tools: llvm-ar/llvm-ar.cpp llvm-ranlib/llvm-ranlib.cpp Message-ID: <20101129230220.CBBD32A6C12D@llvm.org> Author: lattner Date: Mon Nov 29 17:02:20 2010 New Revision: 120341 URL: http://llvm.org/viewvc/llvm-project?rev=120341&view=rev Log: convert llvm-ar and llvm-ranlib to raw_ostream from iostreams. Patch by Danil Malyshev! Modified: llvm/trunk/tools/llvm-ar/llvm-ar.cpp llvm/trunk/tools/llvm-ranlib/llvm-ranlib.cpp Modified: llvm/trunk/tools/llvm-ar/llvm-ar.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-ar/llvm-ar.cpp?rev=120341&r1=120340&r2=120341&view=diff ============================================================================== --- llvm/trunk/tools/llvm-ar/llvm-ar.cpp (original) +++ llvm/trunk/tools/llvm-ar/llvm-ar.cpp Mon Nov 29 17:02:20 2010 @@ -18,11 +18,10 @@ #include "llvm/Support/CommandLine.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/PrettyStackTrace.h" +#include "llvm/Support/Format.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Support/Signals.h" -#include #include -#include #include #include using namespace llvm; @@ -335,12 +334,12 @@ // printSymbolTable - print out the archive's symbol table. void printSymbolTable() { - std::cout << "\nArchive Symbol Table:\n"; + outs() << "\nArchive Symbol Table:\n"; const Archive::SymTabType& symtab = TheArchive->getSymbolTable(); for (Archive::SymTabType::const_iterator I=symtab.begin(), E=symtab.end(); I != E; ++I ) { unsigned offset = TheArchive->getFirstFileOffset() + I->second; - std::cout << " " << std::setw(9) << offset << "\t" << I->first <<"\n"; + outs() << " " << format("%9u", offset) << "\t" << I->first <<"\n"; } } @@ -365,10 +364,10 @@ continue; if (Verbose) - std::cout << "Printing " << I->getPath().str() << "\n"; + outs() << "Printing " << I->getPath().str() << "\n"; unsigned len = I->getSize(); - std::cout.write(data, len); + outs().write(data, len); } else { countDown--; } @@ -382,17 +381,17 @@ void printMode(unsigned mode) { if (mode & 004) - std::cout << "r"; + outs() << "r"; else - std::cout << "-"; + outs() << "-"; if (mode & 002) - std::cout << "w"; + outs() << "w"; else - std::cout << "-"; + outs() << "-"; if (mode & 001) - std::cout << "x"; + outs() << "x"; else - std::cout << "-"; + outs() << "-"; } // doDisplayTable - Implement the 't' operation. This function prints out just @@ -411,22 +410,22 @@ // FIXME: Output should be this format: // Zrw-r--r-- 500/ 500 525 Nov 8 17:42 2004 Makefile if (I->isBitcode()) - std::cout << "b"; + outs() << "b"; else if (I->isCompressed()) - std::cout << "Z"; + outs() << "Z"; else - std::cout << " "; + outs() << " "; unsigned mode = I->getMode(); printMode((mode >> 6) & 007); printMode((mode >> 3) & 007); printMode(mode & 007); - std::cout << " " << std::setw(4) << I->getUser(); - std::cout << "/" << std::setw(4) << I->getGroup(); - std::cout << " " << std::setw(8) << I->getSize(); - std::cout << " " << std::setw(20) << I->getModTime().str().substr(4); - std::cout << " " << I->getPath().str() << "\n"; + outs() << " " << format("%4u", I->getUser()); + outs() << "/" << format("%4u", I->getGroup()); + outs() << " " << format("%8u", I->getSize()); + outs() << " " << format("%20s", I->getModTime().str().substr(4).c_str()); + outs() << " " << I->getPath().str() << "\n"; } else { - std::cout << I->getPath().str() << "\n"; + outs() << I->getPath().str() << "\n"; } } } Modified: llvm/trunk/tools/llvm-ranlib/llvm-ranlib.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-ranlib/llvm-ranlib.cpp?rev=120341&r1=120340&r2=120341&view=diff ============================================================================== --- llvm/trunk/tools/llvm-ranlib/llvm-ranlib.cpp (original) +++ llvm/trunk/tools/llvm-ranlib/llvm-ranlib.cpp Mon Nov 29 17:02:20 2010 @@ -17,12 +17,10 @@ #include "llvm/Support/CommandLine.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/PrettyStackTrace.h" +#include "llvm/Support/Format.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Support/Signals.h" -#include -#include #include - using namespace llvm; // llvm-ar operation code and modifier flags @@ -35,12 +33,12 @@ // printSymbolTable - print out the archive's symbol table. void printSymbolTable(Archive* TheArchive) { - std::cout << "\nArchive Symbol Table:\n"; + outs() << "\nArchive Symbol Table:\n"; const Archive::SymTabType& symtab = TheArchive->getSymbolTable(); for (Archive::SymTabType::const_iterator I=symtab.begin(), E=symtab.end(); I != E; ++I ) { unsigned offset = TheArchive->getFirstFileOffset() + I->second; - std::cout << " " << std::setw(9) << offset << "\t" << I->first <<"\n"; + outs() << " " << format("%9u", offset) << "\t" << I->first <<"\n"; } } From clattner at apple.com Mon Nov 29 17:05:35 2010 From: clattner at apple.com (Chris Lattner) Date: Mon, 29 Nov 2010 15:05:35 -0800 Subject: [llvm-commits] Fix output stream opened in text instead of binary mode on MinGW In-Reply-To: <6AE1604EE3EC5F4296C096518C6B77EE1705A19B31@mail.accesssoftek.com> References: <6AE1604EE3EC5F4296C096518C6B77EE1705A19A78@mail.accesssoftek.com> <1D923093-7E74-457D-AF4E-CE879B273076@2pi.dk> <6AE1604EE3EC5F4296C096518C6B77EE1705A19B31@mail.accesssoftek.com> Message-ID: On Nov 29, 2010, at 11:38 AM, Danil Malyshev wrote: > Hello Jakob, > > > Can you find a way of doing this without increasing the size of the raw_ostream object, and without imposing any overhead on users that don't need it? > > Ok, I did it. > Attached file fix-cout-02.diff is the new patch. It change only llvm-ar, llvm-ranlib, and attributes of *.toc files in Archive tests. The llvm-ar and llvm-ranlib changes look great, committed in r120341. I also removed the #include of , saving us a static ctor. I don't understand or have an opinion on the archive tests though, can you explain it more? Can someone on windows review them? -Chris -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20101129/e50ad696/attachment.html From dalej at apple.com Mon Nov 29 17:07:23 2010 From: dalej at apple.com (Dale Johannesen) Date: Mon, 29 Nov 2010 23:07:23 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r120342 - /llvm-gcc-4.2/trunk/gcc/llvm-internal.h Message-ID: <20101129230723.951172A6C12D@llvm.org> Author: johannes Date: Mon Nov 29 17:07:23 2010 New Revision: 120342 URL: http://llvm.org/viewvc/llvm-project?rev=120342&view=rev Log: Track down one more moved header, so even a clean build will work. Modified: llvm-gcc-4.2/trunk/gcc/llvm-internal.h Modified: llvm-gcc-4.2/trunk/gcc/llvm-internal.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-internal.h?rev=120342&r1=120341&r2=120342&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-internal.h (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-internal.h Mon Nov 29 17:07:23 2010 @@ -37,7 +37,7 @@ #include "llvm/ADT/IndexedMap.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/SetVector.h" -#include "llvm/System/DataTypes.h" +#include "llvm/Support/DataTypes.h" #include "llvm/Support/IRBuilder.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/TargetFolder.h" From clattner at apple.com Mon Nov 29 17:10:09 2010 From: clattner at apple.com (Chris Lattner) Date: Mon, 29 Nov 2010 15:10:09 -0800 Subject: [llvm-commits] Patch for Bug7696 In-Reply-To: References: Message-ID: <3196F70D-8F3A-4836-940C-AB151333D0BD@apple.com> On Nov 23, 2010, at 1:39 PM, Villmow, Micah wrote: > Reposting bug report here, any chance that it can get reviewed? > Patch that adds a boolean where a backend can specify whether to disable > certain optimizations because jumps are expensive. Hi Micah, The patch looks ok, except for some minor issues: + void setSelectIsExpensive(bool isExpensive = true) { + SelectIsExpensive = isExpensive; Please avoid tabs. + /// isJumpExpensive() - Return true if true if Flow Control is an + /// expensive operation that should be avoided Please end the comment with a . + /// JumpIsExpensive - Tells the code generator not to expand operations + /// into sequences that increase the amount of flow control if possible + void setJumpIsExpensive(bool isExpensive = true) { + JumpIsExpensive = isExpensive; likewise ^2 + /// JumpIsExpensive - Tells the code generator that it shouldn't + /// generate extra flow control instructions and should attempt to + /// combine flow control instructions via predication end comment with a . I was planning to just apply this for you and tweak it, but your patch format isn't accepted by the 'patch' command. -Chris -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20101129/073bd0cd/attachment.html From grosbach at apple.com Mon Nov 29 17:09:21 2010 From: grosbach at apple.com (Jim Grosbach) Date: Mon, 29 Nov 2010 23:09:21 -0000 Subject: [llvm-commits] [llvm] r120343 - /llvm/trunk/lib/Target/ARM/ARMConstantPoolValue.h Message-ID: <20101129230921.1C11A2A6C12D@llvm.org> Author: grosbach Date: Mon Nov 29 17:09:20 2010 New Revision: 120343 URL: http://llvm.org/viewvc/llvm-project?rev=120343&view=rev Log: Nuke a FIXME. No need to be fancier here, as ARM handles constant pools locations and formatting specially. rdar://7353441 Modified: llvm/trunk/lib/Target/ARM/ARMConstantPoolValue.h Modified: llvm/trunk/lib/Target/ARM/ARMConstantPoolValue.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMConstantPoolValue.h?rev=120343&r1=120342&r2=120343&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMConstantPoolValue.h (original) +++ llvm/trunk/lib/Target/ARM/ARMConstantPoolValue.h Mon Nov 29 17:09:20 2010 @@ -96,11 +96,7 @@ bool isBlockAddress() { return Kind == ARMCP::CPBlockAddress; } bool isLSDA() { return Kind == ARMCP::CPLSDA; } - virtual unsigned getRelocationInfo() const { - // FIXME: This is conservatively claiming that these entries require a - // relocation, we may be able to do better than this. - return 2; - } + virtual unsigned getRelocationInfo() const { return 2; } virtual int getExistingMachineCPValue(MachineConstantPool *CP, unsigned Alignment); From clattner at apple.com Mon Nov 29 17:11:43 2010 From: clattner at apple.com (Chris Lattner) Date: Mon, 29 Nov 2010 15:11:43 -0800 Subject: [llvm-commits] [PATCH] Bug 5207: make APInt set(), clear() and flip() return void In-Reply-To: References: Message-ID: <83AE4010-3184-4075-8F82-2B006FDC0D12@apple.com> On Nov 29, 2010, at 2:51 AM, Jay Foad wrote: > http://llvm.org/bugs/show_bug.cgi?id=5207 > > The bug says, among other things, that APInt methods "that update in > place should return void to make it really clear that they do not > return a new APInt". The attached patch does this for the methods > set(), clear() and flip(). It passes "make check". I don't think any > changes are needed in cfe/trunk/ or llvm-gcc-4.2/trunk/. > > This does make some code more long-winded, e.g.: > > static APInt getMaxValue(unsigned numBits) { > - return APInt(numBits, 0).set(); > + APInt API(numBits, 0); > + API.set(); > + return API; > } > > Do you still think it's a good idea? If so, OK to commit? Looks great to me, please commit. I'd also suggest renaming the methods to "setAllBits()" "clearAllBits" "flipAllBits" etc. Thanks for working on this Jay! -Chris From evan.cheng at apple.com Mon Nov 29 17:11:15 2010 From: evan.cheng at apple.com (Evan Cheng) Date: Mon, 29 Nov 2010 15:11:15 -0800 Subject: [llvm-commits] [llvm] r119947 - /llvm/trunk/lib/Target/X86/README.txt In-Reply-To: <5735D164-6BF5-429A-8B72-F1950DA4A517@apple.com> References: <20101121185921.3269C2A6C12C@llvm.org> <42812564-79B7-4366-8957-C9B8ABA4C5CB@apple.com> <5735D164-6BF5-429A-8B72-F1950DA4A517@apple.com> Message-ID: On Nov 29, 2010, at 3:00 PM, Chris Lattner wrote: > > On Nov 29, 2010, at 2:57 PM, Evan Cheng wrote: > >> Actually, this doesn't appear to be working on Darwin either. The issue is the call is turned into a fsin node and the "tailcall" property is apparently lost by the time legalizer expands it back into a call. This needs to be fixed but I am not sure how. > > Ah, I thought it was working for me. It should always be safe to add this for sin/cos/etc. The "tailcall" property just means that the callee is known to not access the callers stack frame. Right, it should be safe to mark it tailcall when the node does not take a chain operand. Evan > > -Chris > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20101129/f09cdde4/attachment.html From clattner at apple.com Mon Nov 29 17:12:18 2010 From: clattner at apple.com (Chris Lattner) Date: Mon, 29 Nov 2010 15:12:18 -0800 Subject: [llvm-commits] [llvm] r119947 - /llvm/trunk/lib/Target/X86/README.txt In-Reply-To: References: <20101121185921.3269C2A6C12C@llvm.org> <42812564-79B7-4366-8957-C9B8ABA4C5CB@apple.com> <5735D164-6BF5-429A-8B72-F1950DA4A517@apple.com> Message-ID: <136FE9C8-A9B3-4F5C-86C6-7932C4AE525C@apple.com> On Nov 29, 2010, at 3:11 PM, Evan Cheng wrote: > > On Nov 29, 2010, at 3:00 PM, Chris Lattner wrote: > >> >> On Nov 29, 2010, at 2:57 PM, Evan Cheng wrote: >> >>> Actually, this doesn't appear to be working on Darwin either. The issue is the call is turned into a fsin node and the "tailcall" property is apparently lost by the time legalizer expands it back into a call. This needs to be fixed but I am not sure how. >> >> Ah, I thought it was working for me. It should always be safe to add this for sin/cos/etc. The "tailcall" property just means that the callee is known to not access the callers stack frame. > > Right, it should be safe to mark it tailcall when the node does not take a chain operand. Yes, certainly! -Chris From grosbach at apple.com Mon Nov 29 17:18:02 2010 From: grosbach at apple.com (Jim Grosbach) Date: Mon, 29 Nov 2010 23:18:02 -0000 Subject: [llvm-commits] [llvm] r120344 - /llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Message-ID: <20101129231802.1E9232A6C12D@llvm.org> Author: grosbach Date: Mon Nov 29 17:18:01 2010 New Revision: 120344 URL: http://llvm.org/viewvc/llvm-project?rev=120344&view=rev Log: Nuke trailing whitespace. Modified: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Modified: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp?rev=120344&r1=120343&r2=120344&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp (original) +++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Mon Nov 29 17:18:01 2010 @@ -521,7 +521,7 @@ SMLoc E = RCurlyTok.getLoc(); Parser.Lex(); // Eat right curly brace token. - + // Verify the register list. SmallVectorImpl >::const_iterator RI = Registers.begin(), RE = Registers.end(); @@ -605,7 +605,7 @@ E = RBracTok.getLoc(); Parser.Lex(); // Eat right bracket token. - + const AsmToken &ExclaimTok = Parser.getTok(); ARMOperand *WBOp = 0; if (ExclaimTok.is(AsmToken::Exclaim)) { @@ -639,7 +639,7 @@ const MCExpr *Offset = 0; const AsmToken &NextTok = Parser.getTok(); - + if (NextTok.isNot(AsmToken::EndOfStatement)) { Postindexed = true; Writeback = true; From gohman at apple.com Mon Nov 29 17:20:40 2010 From: gohman at apple.com (Dan Gohman) Date: Mon, 29 Nov 2010 15:20:40 -0800 Subject: [llvm-commits] [Review request] Instcombine: extractvalue from load --> load from gep In-Reply-To: References: <272A49D7-AFC1-4830-A1EB-CA05EB773B03@apple.com> Message-ID: On Nov 29, 2010, at 12:28 PM, Frits van Bommel wrote: > On Mon, Nov 29, 2010 at 8:20 PM, Dan Gohman wrote: >> On Nov 28, 2010, at 2:43 AM, Frits van Bommel wrote: >> >>> <006-instcombine-extractvalue-load-v3.patch><007-instcombine-extractvalue-load-test-v2.patch>_______________________________________________ >> >> Why is this needed? Front-ends should emit gep+load instead of >> load+extractvalue. > > Not all front ends might do that. For instance, it might load both > fields of a struct if thinks it's going to need them anyway but then > one gets optimized out. If it emits both fields as gep+load, then there's no problem. Basically, it's never desirable to actually do an aggregate load or store. It may be the case they they can be eliminated by optimization much of the time, but this can fail in various ways, and when it does, you can get quite unpleasant results. And even when it does work, the best you'll get is emit the same gep+load that the front-end could have emitted itself without any extra analysis. On Nov 29, 2010, at 12:34 PM, Frits van Bommel wrote: > On Mon, Nov 29, 2010 at 9:28 PM, Frits van Bommel wrote: >> Also, when I accidentally messed this up so it asserted every time it >> fired clang could no longer compile LLVM. I think the problem was in >> the passmanager, but I might be misremembering. > > Looks like I misremembered; I just found the file I bugpointed and > it's called PreAllocSplitting.ll. It doesn't contain any extractvalue > instructions, so they must've been generated by one or more of the > passes clang runs at -O3. This merits a bug report. Dan From clattner at apple.com Mon Nov 29 17:22:32 2010 From: clattner at apple.com (Chris Lattner) Date: Mon, 29 Nov 2010 15:22:32 -0800 Subject: [llvm-commits] [Review request] Instcombine: extractvalue from load --> load from gep In-Reply-To: References: <272A49D7-AFC1-4830-A1EB-CA05EB773B03@apple.com> Message-ID: <447B9721-968B-4AB0-9569-316F53E2C1D5@apple.com> On Nov 29, 2010, at 3:20 PM, Dan Gohman wrote: > If it emits both fields as gep+load, then there's no problem. > > Basically, it's never desirable to actually do an aggregate load or store. > It may be the case they they can be eliminated by optimization much of the > time, but this can fail in various ways, and when it does, you can get > quite unpleasant results. And even when it does work, the best you'll get > is emit the same gep+load that the front-end could have emitted itself > without any extra analysis. Dan, we require frontends to generate first class aggregates for ABI reasons in some cases. This happens on X86-64 for example. -Chris From sabre at nondot.org Mon Nov 29 17:29:54 2010 From: sabre at nondot.org (Chris Lattner) Date: Mon, 29 Nov 2010 23:29:54 -0000 Subject: [llvm-commits] [llvm] r120346 - /llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Message-ID: <20101129232955.012F12A6C12D@llvm.org> Author: lattner Date: Mon Nov 29 17:29:54 2010 New Revision: 120346 URL: http://llvm.org/viewvc/llvm-project?rev=120346&view=rev Log: Generalize the darwin wrapper hack to work with generic macho triples as well as darwin ones. Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp?rev=120346&r1=120345&r2=120346&view=diff ============================================================================== --- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original) +++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Mon Nov 29 17:29:54 2010 @@ -1642,9 +1642,12 @@ /// WriteBitcodeToStream - Write the specified module to the specified output /// stream. void llvm::WriteBitcodeToStream(const Module *M, BitstreamWriter &Stream) { - // If this is darwin, emit a file header and trailer if needed. - bool isDarwin = M->getTargetTriple().find("-darwin") != std::string::npos; - if (isDarwin) + // If this is darwin or another generic macho target, emit a file header and + // trailer if needed. + bool isMacho = + M->getTargetTriple().find("-darwin") != std::string::npos || + M->getTargetTriple().find("-macho") != std::string::npos; + if (isMacho) EmitDarwinBCHeader(Stream, M->getTargetTriple()); // Emit the file header. @@ -1658,6 +1661,6 @@ // Emit the module. WriteModule(M, Stream); - if (isDarwin) + if (isMacho) EmitDarwinBCTrailer(Stream, Stream.getBuffer().size()); } From fvbommel at gmail.com Mon Nov 29 17:33:42 2010 From: fvbommel at gmail.com (Frits van Bommel) Date: Tue, 30 Nov 2010 00:33:42 +0100 Subject: [llvm-commits] [Review request] Instcombine: extractvalue from load --> load from gep In-Reply-To: <447B9721-968B-4AB0-9569-316F53E2C1D5@apple.com> References: <272A49D7-AFC1-4830-A1EB-CA05EB773B03@apple.com> <447B9721-968B-4AB0-9569-316F53E2C1D5@apple.com> Message-ID: On Tue, Nov 30, 2010 at 12:22 AM, Chris Lattner wrote: > > On Nov 29, 2010, at 3:20 PM, Dan Gohman wrote: >> If it emits both fields as gep+load, then there's no problem. >> >> Basically, it's never desirable to actually do an aggregate load or store. >> It may be the case they they can be eliminated by optimization much of the >> time, but this can fail in various ways, and when it does, you can get >> quite unpleasant results. And even when it does work, the best you'll get >> is emit the same gep+load that the front-end could have emitted itself >> without any extra analysis. > > Dan, we require frontends to generate first class aggregates for ABI reasons in some cases. ?This happens on X86-64 for example. I think Dan is saying that even when they're generated, they should never be loaded / stored directly. Presumably, they should instead be assembled using insertvalue after being loaded piecewise / broken up into pieces using extractvalue before being stored. From clattner at apple.com Mon Nov 29 17:35:21 2010 From: clattner at apple.com (Chris Lattner) Date: Mon, 29 Nov 2010 15:35:21 -0800 Subject: [llvm-commits] [Review request] Instcombine: extractvalue from load --> load from gep In-Reply-To: References: <272A49D7-AFC1-4830-A1EB-CA05EB773B03@apple.com> <447B9721-968B-4AB0-9569-316F53E2C1D5@apple.com> Message-ID: On Nov 29, 2010, at 3:33 PM, Frits van Bommel wrote: >>> >>> Basically, it's never desirable to actually do an aggregate load or store. >>> It may be the case they they can be eliminated by optimization much of the >>> time, but this can fail in various ways, and when it does, you can get >>> quite unpleasant results. And even when it does work, the best you'll get >>> is emit the same gep+load that the front-end could have emitted itself >>> without any extra analysis. >> >> Dan, we require frontends to generate first class aggregates for ABI reasons in some cases. This happens on X86-64 for example. > > I think Dan is saying that even when they're generated, they should > never be loaded / stored directly. Presumably, they should instead be > assembled using insertvalue after being loaded piecewise / broken up > into pieces using extractvalue before being stored. Ah, that's a good point! It still doesn't hurt to have the code in instcombine though. -Chris From sabre at nondot.org Mon Nov 29 17:35:33 2010 From: sabre at nondot.org (Chris Lattner) Date: Mon, 29 Nov 2010 23:35:33 -0000 Subject: [llvm-commits] [llvm] r120347 - /llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp Message-ID: <20101129233533.37F522A6C12D@llvm.org> Author: lattner Date: Mon Nov 29 17:35:33 2010 New Revision: 120347 URL: http://llvm.org/viewvc/llvm-project?rev=120347&view=rev Log: prune an llvmcontext include and simplify some code. Modified: llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp Modified: llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp?rev=120347&r1=120346&r2=120347&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp Mon Nov 29 17:35:33 2010 @@ -16,7 +16,6 @@ #include "llvm/Transforms/Scalar.h" #include "llvm/IntrinsicInst.h" #include "llvm/Instructions.h" -#include "llvm/LLVMContext.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/Statistic.h" #include "llvm/Analysis/Dominators.h" @@ -39,8 +38,6 @@ /// i16 0xF0F0, double 0.0 etc. If the value can't be handled with a repeated /// byte store (e.g. i16 0x1234), return null. static Value *isBytewiseValue(Value *V) { - LLVMContext &Context = V->getContext(); - // All byte-wide stores are splatable, even of arbitrary variables. if (V->getType()->isIntegerTy(8)) return V; @@ -48,9 +45,9 @@ // corresponding integer value is "byteable". An important case is 0.0. if (ConstantFP *CFP = dyn_cast(V)) { if (CFP->getType()->isFloatTy()) - V = ConstantExpr::getBitCast(CFP, Type::getInt32Ty(Context)); + V = ConstantExpr::getBitCast(CFP, Type::getInt32Ty(V->getContext())); if (CFP->getType()->isDoubleTy()) - V = ConstantExpr::getBitCast(CFP, Type::getInt64Ty(Context)); + V = ConstantExpr::getBitCast(CFP, Type::getInt64Ty(V->getContext())); // Don't handle long double formats, which have strange constraints. } @@ -73,7 +70,7 @@ if (Val != Val2) return 0; } - return ConstantInt::get(Context, Val); + return ConstantInt::get(V->getContext(), Val); } } From bigcheesegs at gmail.com Mon Nov 29 17:35:35 2010 From: bigcheesegs at gmail.com (Michael J. Spencer) Date: Mon, 29 Nov 2010 23:35:35 -0000 Subject: [llvm-commits] [llvm] r120348 - /llvm/trunk/include/llvm/Support/PathV2.h Message-ID: <20101129233535.69BA02A6C12F@llvm.org> Author: mspencer Date: Mon Nov 29 17:35:35 2010 New Revision: 120348 URL: http://llvm.org/viewvc/llvm-project?rev=120348&view=rev Log: Support/PathV2: Update comments. Modified: llvm/trunk/include/llvm/Support/PathV2.h Modified: llvm/trunk/include/llvm/Support/PathV2.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/PathV2.h?rev=120348&r1=120347&r2=120348&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/PathV2.h (original) +++ llvm/trunk/include/llvm/Support/PathV2.h Mon Nov 29 17:35:35 2010 @@ -1,4 +1,4 @@ -//===- llvm/Support/PathV2.h - Path Operating System Concept -----*- C++ -*-===// +//===- llvm/Support/PathV2.h - Path Operating System Concept ----*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// // -// This file declares the llvm::sys::path namespace. It is designed after +// This file declares the llvm::sys::{path,fs} namespaces. It is designed after // TR2/boost filesystem (v3), but modified to remove exception handling and the // path class. // From bigcheesegs at gmail.com Mon Nov 29 17:35:49 2010 From: bigcheesegs at gmail.com (Michael J. Spencer) Date: Mon, 29 Nov 2010 23:35:49 -0000 Subject: [llvm-commits] [llvm] r120349 - /llvm/trunk/unittests/Support/Path.cpp Message-ID: <20101129233549.77DB62A6C12D@llvm.org> Author: mspencer Date: Mon Nov 29 17:35:49 2010 New Revision: 120349 URL: http://llvm.org/viewvc/llvm-project?rev=120349&view=rev Log: Support/PathV2: Fix 80 col. Modified: llvm/trunk/unittests/Support/Path.cpp Modified: llvm/trunk/unittests/Support/Path.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/Path.cpp?rev=120349&r1=120348&r2=120349&view=diff ============================================================================== --- llvm/trunk/unittests/Support/Path.cpp (original) +++ llvm/trunk/unittests/Support/Path.cpp Mon Nov 29 17:35:49 2010 @@ -73,15 +73,19 @@ StringRef res; SmallString<16> temp_store; - if (error_code ec = sys::path::root_path(*i, res)) ASSERT_FALSE(ec.message().c_str()); + if (error_code ec = sys::path::root_path(*i, res)) + ASSERT_FALSE(ec.message().c_str()); outs() << " root_path: " << res << '\n'; - if (error_code ec = sys::path::root_name(*i, res)) ASSERT_FALSE(ec.message().c_str()); + if (error_code ec = sys::path::root_name(*i, res)) + ASSERT_FALSE(ec.message().c_str()); outs() << " root_name: " << res << '\n'; - if (error_code ec = sys::path::root_directory(*i, res)) ASSERT_FALSE(ec.message().c_str()); + if (error_code ec = sys::path::root_directory(*i, res)) + ASSERT_FALSE(ec.message().c_str()); outs() << " root_directory: " << res << '\n'; temp_store = *i; - if (error_code ec = sys::path::make_absolute(temp_store)) ASSERT_FALSE(ec.message().c_str()); + if (error_code ec = sys::path::make_absolute(temp_store)) + ASSERT_FALSE(ec.message().c_str()); outs() << " make_absolute: " << temp_store << '\n'; outs().flush(); From Micah.Villmow at amd.com Mon Nov 29 17:42:45 2010 From: Micah.Villmow at amd.com (Villmow, Micah) Date: Mon, 29 Nov 2010 17:42:45 -0600 Subject: [llvm-commits] Patch for Bug7696 In-Reply-To: <3196F70D-8F3A-4836-940C-AB151333D0BD@apple.com> References: <3196F70D-8F3A-4836-940C-AB151333D0BD@apple.com> Message-ID: Thanks for the tips, I'll regenerate the patch, what is the command you usually use to generate a patch? Thanks, Micah From: Chris Lattner [mailto:clattner at apple.com] Sent: Monday, November 29, 2010 3:10 PM To: Villmow, Micah Cc: llvm-commits Subject: Re: [llvm-commits] Patch for Bug7696 On Nov 23, 2010, at 1:39 PM, Villmow, Micah wrote: Reposting bug report here, any chance that it can get reviewed? Patch that adds a boolean where a backend can specify whether to disable certain optimizations because jumps are expensive. Hi Micah, The patch looks ok, except for some minor issues: + void setSelectIsExpensive(bool isExpensive = true) { + SelectIsExpensive = isExpensive; Please avoid tabs. + /// isJumpExpensive() - Return true if true if Flow Control is an + /// expensive operation that should be avoided Please end the comment with a . + /// JumpIsExpensive - Tells the code generator not to expand operations + /// into sequences that increase the amount of flow control if possible + void setJumpIsExpensive(bool isExpensive = true) { + JumpIsExpensive = isExpensive; likewise ^2 + /// JumpIsExpensive - Tells the code generator that it shouldn't + /// generate extra flow control instructions and should attempt to + /// combine flow control instructions via predication end comment with a . I was planning to just apply this for you and tweak it, but your patch format isn't accepted by the 'patch' command. -Chris -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20101129/edd6cc73/attachment-0001.html From grosbach at apple.com Mon Nov 29 17:41:11 2010 From: grosbach at apple.com (Jim Grosbach) Date: Mon, 29 Nov 2010 23:41:11 -0000 Subject: [llvm-commits] [llvm] r120350 - /llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Message-ID: <20101129234111.0E7C22A6C12D@llvm.org> Author: grosbach Date: Mon Nov 29 17:41:10 2010 New Revision: 120350 URL: http://llvm.org/viewvc/llvm-project?rev=120350&view=rev Log: Add a few missing initializers. Modified: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Modified: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp?rev=120350&r1=120349&r2=120350&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp (original) +++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Mon Nov 29 17:41:10 2010 @@ -634,8 +634,8 @@ int OffsetRegNum = 0; bool OffsetRegShifted = false; - enum ShiftType ShiftType; - const MCExpr *ShiftAmount; + enum ShiftType ShiftType = Lsl; + const MCExpr *ShiftAmount = 0; const MCExpr *Offset = 0; const AsmToken &NextTok = Parser.getTok(); From echristo at apple.com Mon Nov 29 17:46:15 2010 From: echristo at apple.com (Eric Christopher) Date: Mon, 29 Nov 2010 15:46:15 -0800 Subject: [llvm-commits] Patch for Bug7696 In-Reply-To: References: <3196F70D-8F3A-4836-940C-AB151333D0BD@apple.com> Message-ID: On Nov 29, 2010, at 3:42 PM, Villmow, Micah wrote: > Thanks for the tips, I'll regenerate the patch, what is the command you usually use to generate a patch? > > 'svn diff' usually, what were you using? -eric -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20101129/1dedf0bd/attachment.html From Micah.Villmow at amd.com Mon Nov 29 17:50:42 2010 From: Micah.Villmow at amd.com (Villmow, Micah) Date: Mon, 29 Nov 2010 17:50:42 -0600 Subject: [llvm-commits] Patch for Bug7696 In-Reply-To: References: <3196F70D-8F3A-4836-940C-AB151333D0BD@apple.com> Message-ID: p4 diff :) From: Eric Christopher [mailto:echristo at apple.com] Sent: Monday, November 29, 2010 3:46 PM To: Villmow, Micah Cc: llvm-commits Subject: Re: [llvm-commits] Patch for Bug7696 On Nov 29, 2010, at 3:42 PM, Villmow, Micah wrote: Thanks for the tips, I'll regenerate the patch, what is the command you usually use to generate a patch? 'svn diff' usually, what were you using? -eric -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20101129/34254857/attachment.html From grosbach at apple.com Mon Nov 29 17:48:41 2010 From: grosbach at apple.com (Jim Grosbach) Date: Mon, 29 Nov 2010 23:48:41 -0000 Subject: [llvm-commits] [llvm] r120353 - in /llvm/trunk/lib/Target/ARM: ARMInstrFormats.td ARMInstrInfo.td Message-ID: <20101129234841.600D72A6C12D@llvm.org> Author: grosbach Date: Mon Nov 29 17:48:41 2010 New Revision: 120353 URL: http://llvm.org/viewvc/llvm-project?rev=120353&view=rev Log: Parameterize ARMPseudoInst size property. Modified: llvm/trunk/lib/Target/ARM/ARMInstrFormats.td llvm/trunk/lib/Target/ARM/ARMInstrInfo.td Modified: llvm/trunk/lib/Target/ARM/ARMInstrFormats.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrFormats.td?rev=120353&r1=120352&r2=120353&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrFormats.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrFormats.td Mon Nov 29 17:48:41 2010 @@ -246,12 +246,10 @@ } // PseudoInst that's ARM-mode only. -class ARMPseudoInst pattern> : PseudoInst { - // Default these to 4byte size, as they're almost always expanded to a - // single instruction. Any exceptions can override the SZ field value. - let SZ = Size4Bytes; + let SZ = sz; list Predicates = [IsARM]; } Modified: llvm/trunk/lib/Target/ARM/ARMInstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrInfo.td?rev=120353&r1=120352&r2=120353&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrInfo.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrInfo.td Mon Nov 29 17:48:41 2010 @@ -1128,40 +1128,40 @@ // Address computation and loads and stores in PIC mode. let isNotDuplicable = 1 in { -def PICADD : ARMPseudoInst<(outs GPR:$dst), (ins GPR:$a, pclabel:$cp, pred:$p), - IIC_iALUr, - [(set GPR:$dst, (ARMpic_add GPR:$a, imm:$cp))]>; +def PICADD : ARMPseudoInst<(outs GPR:$dst), (ins GPR:$a, pclabel:$cp, pred:$p), + Size4Bytes, IIC_iALUr, + [(set GPR:$dst, (ARMpic_add GPR:$a, imm:$cp))]>; let AddedComplexity = 10 in { def PICLDR : ARMPseudoInst<(outs GPR:$dst), (ins addrmodepc:$addr, pred:$p), - IIC_iLoad_r, + Size4Bytes, IIC_iLoad_r, [(set GPR:$dst, (load addrmodepc:$addr))]>; def PICLDRH : ARMPseudoInst<(outs GPR:$Rt), (ins addrmodepc:$addr, pred:$p), - IIC_iLoad_bh_r, + Size4Bytes, IIC_iLoad_bh_r, [(set GPR:$Rt, (zextloadi16 addrmodepc:$addr))]>; def PICLDRB : ARMPseudoInst<(outs GPR:$Rt), (ins addrmodepc:$addr, pred:$p), - IIC_iLoad_bh_r, + Size4Bytes, IIC_iLoad_bh_r, [(set GPR:$Rt, (zextloadi8 addrmodepc:$addr))]>; def PICLDRSH : ARMPseudoInst<(outs GPR:$Rt), (ins addrmodepc:$addr, pred:$p), - IIC_iLoad_bh_r, + Size4Bytes, IIC_iLoad_bh_r, [(set GPR:$Rt, (sextloadi16 addrmodepc:$addr))]>; def PICLDRSB : ARMPseudoInst<(outs GPR:$Rt), (ins addrmodepc:$addr, pred:$p), - IIC_iLoad_bh_r, + Size4Bytes, IIC_iLoad_bh_r, [(set GPR:$Rt, (sextloadi8 addrmodepc:$addr))]>; } let AddedComplexity = 10 in { def PICSTR : ARMPseudoInst<(outs), (ins GPR:$src, addrmodepc:$addr, pred:$p), - IIC_iStore_r, [(store GPR:$src, addrmodepc:$addr)]>; + Size4Bytes, IIC_iStore_r, [(store GPR:$src, addrmodepc:$addr)]>; def PICSTRH : ARMPseudoInst<(outs), (ins GPR:$src, addrmodepc:$addr, pred:$p), - IIC_iStore_bh_r, [(truncstorei16 GPR:$src, addrmodepc:$addr)]>; + Size4Bytes, IIC_iStore_bh_r, [(truncstorei16 GPR:$src, addrmodepc:$addr)]>; def PICSTRB : ARMPseudoInst<(outs), (ins GPR:$src, addrmodepc:$addr, pred:$p), - IIC_iStore_bh_r, [(truncstorei8 GPR:$src, addrmodepc:$addr)]>; + Size4Bytes, IIC_iStore_bh_r, [(truncstorei8 GPR:$src, addrmodepc:$addr)]>; } } // isNotDuplicable = 1 @@ -1430,26 +1430,20 @@ let isNotDuplicable = 1, isIndirectBranch = 1 in { def BR_JTr : ARMPseudoInst<(outs), (ins GPR:$target, i32imm:$jt, i32imm:$id), - IIC_Br, - [(ARMbrjt GPR:$target, tjumptable:$jt, imm:$id)]> { - let SZ = SizeSpecial; - } + SizeSpecial, IIC_Br, + [(ARMbrjt GPR:$target, tjumptable:$jt, imm:$id)]>; // FIXME: This shouldn't use the generic "addrmode2," but rather be split // into i12 and rs suffixed versions. def BR_JTm : ARMPseudoInst<(outs), (ins addrmode2:$target, i32imm:$jt, i32imm:$id), - IIC_Br, + SizeSpecial, IIC_Br, [(ARMbrjt (i32 (load addrmode2:$target)), tjumptable:$jt, - imm:$id)]> { - let SZ = SizeSpecial; - } + imm:$id)]>; def BR_JTadd : ARMPseudoInst<(outs), (ins GPR:$target, GPR:$idx, i32imm:$jt, i32imm:$id), - IIC_Br, + SizeSpecial, IIC_Br, [(ARMbrjt (add GPR:$target, GPR:$idx), tjumptable:$jt, - imm:$id)]> { - let SZ = SizeSpecial; - } + imm:$id)]>; } // isNotDuplicable = 1, isIndirectBranch = 1 } // isBarrier = 1 From echristo at apple.com Mon Nov 29 17:52:08