[llvm-commits] CVS: reopt/docs/ReoptUsersGuide.rtf

Brian Gaeke gaeke at cs.uiuc.edu
Fri Oct 15 12:48:12 PDT 2004



Changes in directory reopt/docs:

ReoptUsersGuide.rtf updated: 1.3 -> 1.4
---
Log message:

Add to-do item; expand on descr. of -count-trace-cycles; add
-disable-* options in LLVM_REOPT section; other minor edits.


---
Diffs of the changes:  (+55 -53)

Index: reopt/docs/ReoptUsersGuide.rtf
diff -u reopt/docs/ReoptUsersGuide.rtf:1.3 reopt/docs/ReoptUsersGuide.rtf:1.4
--- reopt/docs/ReoptUsersGuide.rtf:1.3	Tue Oct 12 14:56:17 2004
+++ reopt/docs/ReoptUsersGuide.rtf	Fri Oct 15 14:48:02 2004
@@ -56,15 +56,14 @@
 		The Trace I/O library (
 \f3 reopt/lib/TraceIO
 \f0 )\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
-\f3 \cf0 		ttftest
-\f0 - a standalone TraceToFunction testing tool (
+\f3 		ttftest
+\f0  - a standalone TraceToFunction testing tool (
 \f3 reopt/tools/ttftest
 \f0 )\
 
 \f3 		dumptrace
-\f0 - list LLVM assembly for a trace's basic blocks (
+\f0  - list LLVM assembly for a trace's basic blocks (
 \f3 reopt/tools/dumptrace
 \f0 )\
 	Known problems with the current implementation\
@@ -73,40 +72,37 @@
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
-\f1\b \cf0 \ul \ulc0 Introduction to the reoptimizer\
+\f1\b \cf0 \ul Introduction to the reoptimizer\
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
 \f0\b0 \cf0 \ulnone \
 The reoptimizer is LLVM's dynamic optimization framework. It consists of three basic parts: a collection of compile-time profiling instrumentation passes, a runtime profiler and trace generator, and a runtime trace optimizer.\
 \
-The profiling instrumentation passes run at compile time are as follows: [FIXME]\
+The profiling instrumentation passes run at compile time are as follows: [
+\f1\b TO DO
+\f0\b0  - also need to explain basic terms like FLI, SLI; it would be nice to have a diagram here]\
 \
 For more information about the reoptimizer's instrumentation passes and runtime profiler, consult Anand Shukla's M.S. thesis, "Lightweight Cross-Procedure Tracing for Runtime Optimization", July 2003.\
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
-\f1\b \cf0 \ul \ulc0 Building the reoptimizer from source\
+\f1\b \cf0 \ul Building the reoptimizer from source\
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
 \f0\b0 \cf0 \ulnone \
 1. Check out a fresh llvm tree, along with the repository of test programs.\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
-\f3 \cf0 	% cvs -d /home/vadve/shared/PublicCVS co llvm\
+\f3 	% cvs -d /home/vadve/shared/PublicCVS co llvm\
 	% cd llvm/projects\
 	% cvs -d /home/vadve/shared/PublicCVS co llvm-test\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
-\f0 \cf0 2. Check out the reopt module from the internal CVS repository into the llvm/projects subdirectory, creating llvm/projects/reopt.\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
+\f0 2. Check out the reopt module from the internal CVS repository into the llvm/projects subdirectory, creating llvm/projects/reopt.\
 
-\f3 \cf0 	% cvs -d /home/vadve/shared/InternalCVS co reopt\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
+\f3 	% cvs -d /home/vadve/shared/InternalCVS co reopt\
 
-\f0 \cf0 3. Configure and build the system in release mode (or debug mode if you want to try to fix bugs).\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
+\f0 3. Configure and build the system in release mode (or debug mode if you want to try to fix bugs).\
 
-\f3 \cf0 	% cd ../..\
+\f3 	% cd ../..\
 	% ./configure
 \f4\i  [configure args]
 \f0\i0 \
@@ -119,12 +115,11 @@
 \f0\i0 \
 
 \f3 	% gmake\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
-\f0 \cf0 \
+\f0 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
-\f1\b \cf0 \ul \ulc0 Running the reoptimizer on a program in the llvm-test module\
+\f1\b \cf0 \ul Running the reoptimizer on a program in the llvm-test module\
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
 \f0\b0 \cf0 \ulnone \
@@ -142,20 +137,18 @@
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
 \f3\i0 \cf0 	% ./run-tests shootout\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
-\f0 \cf0 ...within the reopt/test directory. Both of these commands perform three tasks: first, run the ordinary llc-compiled, non-instrumented version of each Shootout program; second:  run the reoptimized version; third: compare the results.\
+\f0 ...within the reopt/test directory. Both of these commands perform three tasks: first, run the ordinary llc-compiled, non-instrumented version of each Shootout program; second:  run the reoptimized version; third: compare the results.\
 \
 You can get a list of the symbolic names known by the 
 \f3 "run-tests"
 \f0  script by typing:\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
-\f3 \cf0 	% ./run-tests -list\
+\f3 	% ./run-tests -list\
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
-\f1\b \cf0 \ul \ulc0 Options recognized by the 
+\f1\b \cf0 \ul Options recognized by the 
 \f6 \ul "run-tests"
 \f1 \ul  script
 \f0\b0 \ulnone \
@@ -247,12 +240,10 @@
 \f3 'prog.reopt.s'
 \f0 :\
 \
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
-\f3 \cf0 	% reopt-llc -enable-correct-eh-support -o=prog.reopt.s prog.llvm.bc\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
+\f3 	% reopt-llc -enable-correct-eh-support -o=prog.reopt.s prog.llvm.bc\
 
-\f0 \cf0 \
+\f0 \
 If you are sure that the program does not depend on the proper behavior of setjmp/longjmp calls or invoke/unwind instructions, you can omit the 
 \f3 '-enable-correct-eh-support'
 \f0  flag.\
@@ -263,9 +254,8 @@
 \f3 '-lcpc -lm -lrt -lmalloc -ldl'
 \f0 . You also need to link the program using the C++ compiler. So the link line will look like this:\
 \
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
-\f3 \cf0 	% g++ -o prog.reopt prog.reopt.s 
+\f3 	% g++ -o prog.reopt prog.reopt.s 
 \f4\i REOPTLIB
 \f3\i0 /libwholereoptimizer.a 
 \f4\i OTHERLIBS
@@ -300,7 +290,7 @@
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
-\f1\b \cf0 \ul \ulc0 The 
+\f1\b \cf0 \ul The 
 \f6 \ul LLVM_REOPT
 \f1 \ul  environment variable
 \f0\b0 \ulnone \
@@ -310,7 +300,7 @@
 \f0  environment variable. For a few of the tunable parameters relating to the trace cache and instrumentation, it may be helpful to look at Anand's thesis for guidance. The list of options that pertain to the reoptimizer is as follows:\
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
-\cf0 \ul \ulc0 Instrumentation/Tracing Framework options\
+\cf0 \ul Instrumentation/Tracing Framework options\
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 \cf0 \ulnone 	-fli-threshold=
 \f5\i count
@@ -320,7 +310,7 @@
 \f0\i0 		Number of iterations of SLI before path counters are sampled\
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
-\cf0 \ul \ulc0 Phase detection options\
+\cf0 \ul Phase detection options\
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 \cf0 \ulnone 	-enable-phase-detect		Use a timer interrupt to remove traces periodically from the trace cache\
 	-timer-int-s=
@@ -328,18 +318,25 @@
 \f0\i0 		Interval (in seconds) between phase detection sweeps\
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
-\cf0 \ul \ulc0 Trace layout engine options\
+\cf0 \ul Trace layout engine options\
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
-\cf0 \ulnone 	-count-trace-cycles			Count cycles in optimized trace, when using trace layout engine\
+\cf0 \ulnone 	-count-trace-cycles			Count cycles in optimized trace, when using trace layout engine.\
+						This facility uses the Solaris cpc library, and you can sample the\
+						data at a specified interval using the 
+\f3 cputrack
+\f0  command.\
+						For more information, see the 
+\f3 cputrack(1)
+\f0  man page.\
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
-\cf0 \ul \ulc0 Trace optimizer options\
+\cf0 \ul Trace optimizer options\
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 \cf0 \ulnone 	-enable-trace-opt			Use the new trace optimizer instead of the old trace layout engine\
 	-run-opt-passes			Run optimization passes before unpacking TraceFunction\
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
-\cf0 \ul \ulc0 Trace cache options\
+\cf0 \ul Trace cache options\
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 \cf0 \ulnone 	-inst-trace-cache-size=
 \f5\i size
@@ -349,7 +346,7 @@
 \f0\i0 	Trace cache size for optimized code\
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
-\cf0 \ul \ulc0 Debugging options\
+\cf0 \ul Debugging options\
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 \cf0 \ulnone 	-print-machineinstrs		Print generated machine code\
 	-skip-trace=
@@ -359,27 +356,32 @@
 \f0\i0 th trace, when using trace optimizer\
 	-debug				Turn on debugging printouts\
 	-dregalloc=y				Turn on SparcV9 register allocator debugging printouts\
-\
+	-disable-ttf				Disable TraceToFunction, UnpackTraceFunction and branch stitching\
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
+\cf0 	-disable-utf				Disable UnpackTraceFunction and branch stitching\
+	-disable-branch-stitch		Disable branch stitching\
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
+\cf0 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
-\cf0 \ul \ulc0 Statistics gathering options\
+\cf0 \ul Statistics gathering options\
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 \cf0 \ulnone 	-stats					Enable statistics output from program\
 	-time-passes				Time each pass, printing elapsed time for each on exit\
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
-\cf0 \ul \ulc0 Help options\
+\cf0 \ul Help options\
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 \cf0 \ulnone 	-version				Display the version of LLVM used\
 	-help					Display available options (-help-hidden for more)\
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
-\f1\b \cf0 \ul \ulc0 How the trace optimizer works\
+\f1\b \cf0 \ul How the trace optimizer works\
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
 \f0\b0 \cf0 \ulnone \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
-\cf0 \ul \ulc0 1. The trace optimizer\
+\cf0 \ul 1. The trace optimizer\
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 \cf0 \ulnone \
 The trace optimizer is the component of the reoptimizer (LLVM's runtime optimization framework) that consumes traces generated by the runtime profiler, converts them into functions, runs global optimizations on them, and then reattaches the optimized trace code back to the original function it came from.\
@@ -389,7 +391,7 @@
 Traces given to the trace optimizer should consist of a loop body with one or more side exits. In particular, there should be phi nodes at the beginning of the first trace BasicBlock for variables live across loop iterations; these are detected and handled specially by TraceToFunction.\
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
-\cf0 \ul \ulc0 2. TraceToFunction (
+\cf0 \ul 2. TraceToFunction (
 \f3 \ul reopt/lib/TraceToFunction
 \f0 \ul )\ulnone \
 \
@@ -427,7 +429,7 @@
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
-\f1\b \cf0 \ul \ulc0 Tips for debugging the reoptimizer\
+\f1\b \cf0 \ul Tips for debugging the reoptimizer\
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
 \f0\b0 \cf0 \ulnone \
@@ -457,12 +459,12 @@
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
-\f1\b \cf0 \ul \ulc0 Reoptimizer testing tools\
+\f1\b \cf0 \ul Reoptimizer testing tools\
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
 \f0\b0 \cf0 \ulnone \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
-\cf0 \ul \ulc0 The Trace I/O library (
+\cf0 \ul The Trace I/O library (
 \f3 \ul reopt/lib/TraceIO
 \f0 \ul )\ulnone \
 \
@@ -498,7 +500,7 @@
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
-\f3 \cf0 \ul \ulc0 ttftest
+\f3 \cf0 \ul ttftest
 \f0 \ul  - a standalone TraceToFunction testing tool (
 \f3 \ul reopt/tools/ttftest
 \f0 \ul )\ulnone \
@@ -528,7 +530,7 @@
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
-\f3 \cf0 \ul \ulc0 dumptrace
+\f3 \cf0 \ul dumptrace
 \f0 \ul  - list LLVM assembly for a trace's basic blocks (
 \f3 \ul reopt/tools/dumptrace
 \f0 \ul )\ulnone \
@@ -556,12 +558,12 @@
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
-\f1\b \cf0 \ul \ulc0 Known problems with the current implementation\
+\f1\b \cf0 \ul Known problems with the current implementation\
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 
 \f0\b0 \cf0 \ulnone \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
-\cf0 \ul \ulc0 UnpackTraceFunction generates inefficient code\
+\cf0 \ul UnpackTraceFunction generates inefficient code\
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 \cf0 \ulnone \
 The machine code generated by the JIT for a TraceFunction assumes that live-in values and pointers to live-out values will be passed in as arguments according to the SparcV9/Solaris ABI's standard calling conventions. Also, the registers allocated to values in the TraceFunction have no relation to the registers allocated to the same values in the matrix function. These two facts pose problems for the efficient integration of optimized trace machine code into the function from which the trace was extracted.\
@@ -573,7 +575,7 @@
 Also, UnpackTraceFunction must be careful to avoid read-after-write errors when copying trace live-in values from their matrix-function registers to their TraceFunction registers, if the two sets of registers overlap. We currently work around this problem by emitting stores of each trace live-in value onto the TraceFunction's stack, then (after all the loads) emitting loads of each live-in value into its TraceFunction register. This works correctly but is slow. A similar situation exists at trace exits (epilogs) with respect to live-out values.  It should be possible to use a temporary register to accomplish the same thing, if you are careful with the ordering of reads and writes.\
 \
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
-\cf0 \ul \ulc0 TraceJITEmitter is poorly integrated with the TraceCache\
+\cf0 \ul TraceJITEmitter is poorly integrated with the TraceCache\
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardeftab720\ql\qnatural
 \cf0 \ulnone \
 In the current implementation of the TraceJITEmitter, the TraceCache does not keep track of individual traces when the trace JIT emitter inserts them, and so it cannot evict them. This deficiency exists primarily for two reasons: (1) the TraceCache wants to accept a trace in the form of a vector of binary words of machine code, and then perform fixups (e.g., to the PC-relative immediate fields of branch instructions) on its own, and therefore (2) the TraceCache wants to know the addresses of all branch and call instructions, information which the TraceJITEmitter does not have handy. Strategy (1) does not interact well with the target-independent JIT, which uses callbacks into the TraceJITEmitter to fixup backward branches.\






More information about the llvm-commits mailing list