llvm-project/llvm/utils/TableGen/AsmWriterEmitter.cpp

1130 lines
39 KiB
C++
Raw Normal View History

//===- AsmWriterEmitter.cpp - Generate an assembly writer -----------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
2016-02-24 03:18:21 +08:00
// This tablegen backend emits an assembly printer for the current target.
// Note that this is currently fairly skeletal, but will grow over time.
//
//===----------------------------------------------------------------------===//
#include "AsmWriterInst.h"
#include "CodeGenInstruction.h"
#include "CodeGenRegisters.h"
#include "CodeGenTarget.h"
#include "SequenceToOffsetTable.h"
#include "Types.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/STLExtras.h"
2012-07-27 14:44:02 +08:00
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/TableGen/Error.h"
#include "llvm/TableGen/Record.h"
#include "llvm/TableGen/TableGenBackend.h"
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <cstdint>
#include <deque>
#include <iterator>
#include <map>
#include <set>
#include <string>
#include <tuple>
#include <utility>
#include <vector>
using namespace llvm;
[Modules] Make Support/Debug.h modular. This requires it to not change behavior based on other files defining DEBUG_TYPE, which means it cannot define DEBUG_TYPE at all. This is actually better IMO as it forces folks to define relevant DEBUG_TYPEs for their files. However, it requires all files that currently use DEBUG(...) to define a DEBUG_TYPE if they don't already. I've updated all such files in LLVM and will do the same for other upstream projects. This still leaves one important change in how LLVM uses the DEBUG_TYPE macro going forward: we need to only define the macro *after* header files have been #include-ed. Previously, this wasn't possible because Debug.h required the macro to be pre-defined. This commit removes that. By defining DEBUG_TYPE after the includes two things are fixed: - Header files that need to provide a DEBUG_TYPE for some inline code can do so by defining the macro before their inline code and undef-ing it afterward so the macro does not escape. - We no longer have rampant ODR violations due to including headers with different DEBUG_TYPE definitions. This may be mostly an academic violation today, but with modules these types of violations are easy to check for and potentially very relevant. Where necessary to suppor headers with DEBUG_TYPE, I have moved the definitions below the includes in this commit. I plan to move the rest of the DEBUG_TYPE macros in LLVM in subsequent commits; this one is big enough. The comments in Debug.h, which were hilariously out of date already, have been updated to reflect the recommended practice going forward. llvm-svn: 206822
2014-04-22 06:55:11 +08:00
#define DEBUG_TYPE "asm-writer-emitter"
namespace {
class AsmWriterEmitter {
RecordKeeper &Records;
CodeGenTarget Target;
ArrayRef<const CodeGenInstruction *> NumberedInstructions;
std::vector<AsmWriterInst> Instructions;
public:
AsmWriterEmitter(RecordKeeper &R);
void run(raw_ostream &o);
private:
void EmitPrintInstruction(raw_ostream &o);
void EmitGetRegisterName(raw_ostream &o);
void EmitPrintAliasInstruction(raw_ostream &O);
void FindUniqueOperandCommands(std::vector<std::string> &UOC,
std::vector<std::vector<unsigned>> &InstIdxs,
std::vector<unsigned> &InstOpsUsed,
bool PassSubtarget) const;
};
} // end anonymous namespace
This is the final big of factoring. This shares cases in suboperand differences, which means that identical instructions (after stripping off the first literal string) do not run any different code at all. On the X86, this turns this code: switch (MI->getOpcode()) { case X86::ADC32mi: printOperand(MI, 4, MVT::i32); break; case X86::ADC32mi8: printOperand(MI, 4, MVT::i8); break; case X86::ADC32mr: printOperand(MI, 4, MVT::i32); break; case X86::ADD32mi: printOperand(MI, 4, MVT::i32); break; case X86::ADD32mi8: printOperand(MI, 4, MVT::i8); break; case X86::ADD32mr: printOperand(MI, 4, MVT::i32); break; case X86::AND32mi: printOperand(MI, 4, MVT::i32); break; case X86::AND32mi8: printOperand(MI, 4, MVT::i8); break; case X86::AND32mr: printOperand(MI, 4, MVT::i32); break; case X86::CMP32mi: printOperand(MI, 4, MVT::i32); break; case X86::CMP32mr: printOperand(MI, 4, MVT::i32); break; case X86::MOV32mi: printOperand(MI, 4, MVT::i32); break; case X86::MOV32mr: printOperand(MI, 4, MVT::i32); break; case X86::OR32mi: printOperand(MI, 4, MVT::i32); break; case X86::OR32mi8: printOperand(MI, 4, MVT::i8); break; case X86::OR32mr: printOperand(MI, 4, MVT::i32); break; case X86::ROL32mi: printOperand(MI, 4, MVT::i8); break; case X86::ROR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SAR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SBB32mi: printOperand(MI, 4, MVT::i32); break; case X86::SBB32mi8: printOperand(MI, 4, MVT::i8); break; case X86::SBB32mr: printOperand(MI, 4, MVT::i32); break; case X86::SHL32mi: printOperand(MI, 4, MVT::i8); break; case X86::SHLD32mrCL: printOperand(MI, 4, MVT::i32); break; case X86::SHR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SHRD32mrCL: printOperand(MI, 4, MVT::i32); break; case X86::SUB32mi: printOperand(MI, 4, MVT::i32); break; case X86::SUB32mi8: printOperand(MI, 4, MVT::i8); break; case X86::SUB32mr: printOperand(MI, 4, MVT::i32); break; case X86::TEST32mi: printOperand(MI, 4, MVT::i32); break; case X86::TEST32mr: printOperand(MI, 4, MVT::i32); break; case X86::TEST8mi: printOperand(MI, 4, MVT::i8); break; case X86::XCHG32mr: printOperand(MI, 4, MVT::i32); break; case X86::XOR32mi: printOperand(MI, 4, MVT::i32); break; case X86::XOR32mi8: printOperand(MI, 4, MVT::i8); break; case X86::XOR32mr: printOperand(MI, 4, MVT::i32); break; } into this: switch (MI->getOpcode()) { case X86::ADC32mi: case X86::ADC32mr: case X86::ADD32mi: case X86::ADD32mr: case X86::AND32mi: case X86::AND32mr: case X86::CMP32mi: case X86::CMP32mr: case X86::MOV32mi: case X86::MOV32mr: case X86::OR32mi: case X86::OR32mr: case X86::SBB32mi: case X86::SBB32mr: case X86::SHLD32mrCL: case X86::SHRD32mrCL: case X86::SUB32mi: case X86::SUB32mr: case X86::TEST32mi: case X86::TEST32mr: case X86::XCHG32mr: case X86::XOR32mi: case X86::XOR32mr: printOperand(MI, 4, MVT::i32); break; case X86::ADC32mi8: case X86::ADD32mi8: case X86::AND32mi8: case X86::OR32mi8: case X86::ROL32mi: case X86::ROR32mi: case X86::SAR32mi: case X86::SBB32mi8: case X86::SHL32mi: case X86::SHR32mi: case X86::SUB32mi8: case X86::TEST8mi: case X86::XOR32mi8: printOperand(MI, 4, MVT::i8); break; } After this, the generated asmwriters look pretty much as though they were generated by hand. This shrinks the X86 asmwriter.inc files from 55101->39669 and 55429->39551 bytes each, and PPC from 16766->12859 bytes. llvm-svn: 19760
2005-01-23 04:31:17 +08:00
static void PrintCases(std::vector<std::pair<std::string,
AsmWriterOperand>> &OpsToPrint, raw_ostream &O,
bool PassSubtarget) {
O << " case " << OpsToPrint.back().first << ":";
This is the final big of factoring. This shares cases in suboperand differences, which means that identical instructions (after stripping off the first literal string) do not run any different code at all. On the X86, this turns this code: switch (MI->getOpcode()) { case X86::ADC32mi: printOperand(MI, 4, MVT::i32); break; case X86::ADC32mi8: printOperand(MI, 4, MVT::i8); break; case X86::ADC32mr: printOperand(MI, 4, MVT::i32); break; case X86::ADD32mi: printOperand(MI, 4, MVT::i32); break; case X86::ADD32mi8: printOperand(MI, 4, MVT::i8); break; case X86::ADD32mr: printOperand(MI, 4, MVT::i32); break; case X86::AND32mi: printOperand(MI, 4, MVT::i32); break; case X86::AND32mi8: printOperand(MI, 4, MVT::i8); break; case X86::AND32mr: printOperand(MI, 4, MVT::i32); break; case X86::CMP32mi: printOperand(MI, 4, MVT::i32); break; case X86::CMP32mr: printOperand(MI, 4, MVT::i32); break; case X86::MOV32mi: printOperand(MI, 4, MVT::i32); break; case X86::MOV32mr: printOperand(MI, 4, MVT::i32); break; case X86::OR32mi: printOperand(MI, 4, MVT::i32); break; case X86::OR32mi8: printOperand(MI, 4, MVT::i8); break; case X86::OR32mr: printOperand(MI, 4, MVT::i32); break; case X86::ROL32mi: printOperand(MI, 4, MVT::i8); break; case X86::ROR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SAR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SBB32mi: printOperand(MI, 4, MVT::i32); break; case X86::SBB32mi8: printOperand(MI, 4, MVT::i8); break; case X86::SBB32mr: printOperand(MI, 4, MVT::i32); break; case X86::SHL32mi: printOperand(MI, 4, MVT::i8); break; case X86::SHLD32mrCL: printOperand(MI, 4, MVT::i32); break; case X86::SHR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SHRD32mrCL: printOperand(MI, 4, MVT::i32); break; case X86::SUB32mi: printOperand(MI, 4, MVT::i32); break; case X86::SUB32mi8: printOperand(MI, 4, MVT::i8); break; case X86::SUB32mr: printOperand(MI, 4, MVT::i32); break; case X86::TEST32mi: printOperand(MI, 4, MVT::i32); break; case X86::TEST32mr: printOperand(MI, 4, MVT::i32); break; case X86::TEST8mi: printOperand(MI, 4, MVT::i8); break; case X86::XCHG32mr: printOperand(MI, 4, MVT::i32); break; case X86::XOR32mi: printOperand(MI, 4, MVT::i32); break; case X86::XOR32mi8: printOperand(MI, 4, MVT::i8); break; case X86::XOR32mr: printOperand(MI, 4, MVT::i32); break; } into this: switch (MI->getOpcode()) { case X86::ADC32mi: case X86::ADC32mr: case X86::ADD32mi: case X86::ADD32mr: case X86::AND32mi: case X86::AND32mr: case X86::CMP32mi: case X86::CMP32mr: case X86::MOV32mi: case X86::MOV32mr: case X86::OR32mi: case X86::OR32mr: case X86::SBB32mi: case X86::SBB32mr: case X86::SHLD32mrCL: case X86::SHRD32mrCL: case X86::SUB32mi: case X86::SUB32mr: case X86::TEST32mi: case X86::TEST32mr: case X86::XCHG32mr: case X86::XOR32mi: case X86::XOR32mr: printOperand(MI, 4, MVT::i32); break; case X86::ADC32mi8: case X86::ADD32mi8: case X86::AND32mi8: case X86::OR32mi8: case X86::ROL32mi: case X86::ROR32mi: case X86::SAR32mi: case X86::SBB32mi8: case X86::SHL32mi: case X86::SHR32mi: case X86::SUB32mi8: case X86::TEST8mi: case X86::XOR32mi8: printOperand(MI, 4, MVT::i8); break; } After this, the generated asmwriters look pretty much as though they were generated by hand. This shrinks the X86 asmwriter.inc files from 55101->39669 and 55429->39551 bytes each, and PPC from 16766->12859 bytes. llvm-svn: 19760
2005-01-23 04:31:17 +08:00
AsmWriterOperand TheOp = OpsToPrint.back().second;
OpsToPrint.pop_back();
// Check to see if any other operands are identical in this list, and if so,
// emit a case label for them.
for (unsigned i = OpsToPrint.size(); i != 0; --i)
if (OpsToPrint[i-1].second == TheOp) {
O << "\n case " << OpsToPrint[i-1].first << ":";
This is the final big of factoring. This shares cases in suboperand differences, which means that identical instructions (after stripping off the first literal string) do not run any different code at all. On the X86, this turns this code: switch (MI->getOpcode()) { case X86::ADC32mi: printOperand(MI, 4, MVT::i32); break; case X86::ADC32mi8: printOperand(MI, 4, MVT::i8); break; case X86::ADC32mr: printOperand(MI, 4, MVT::i32); break; case X86::ADD32mi: printOperand(MI, 4, MVT::i32); break; case X86::ADD32mi8: printOperand(MI, 4, MVT::i8); break; case X86::ADD32mr: printOperand(MI, 4, MVT::i32); break; case X86::AND32mi: printOperand(MI, 4, MVT::i32); break; case X86::AND32mi8: printOperand(MI, 4, MVT::i8); break; case X86::AND32mr: printOperand(MI, 4, MVT::i32); break; case X86::CMP32mi: printOperand(MI, 4, MVT::i32); break; case X86::CMP32mr: printOperand(MI, 4, MVT::i32); break; case X86::MOV32mi: printOperand(MI, 4, MVT::i32); break; case X86::MOV32mr: printOperand(MI, 4, MVT::i32); break; case X86::OR32mi: printOperand(MI, 4, MVT::i32); break; case X86::OR32mi8: printOperand(MI, 4, MVT::i8); break; case X86::OR32mr: printOperand(MI, 4, MVT::i32); break; case X86::ROL32mi: printOperand(MI, 4, MVT::i8); break; case X86::ROR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SAR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SBB32mi: printOperand(MI, 4, MVT::i32); break; case X86::SBB32mi8: printOperand(MI, 4, MVT::i8); break; case X86::SBB32mr: printOperand(MI, 4, MVT::i32); break; case X86::SHL32mi: printOperand(MI, 4, MVT::i8); break; case X86::SHLD32mrCL: printOperand(MI, 4, MVT::i32); break; case X86::SHR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SHRD32mrCL: printOperand(MI, 4, MVT::i32); break; case X86::SUB32mi: printOperand(MI, 4, MVT::i32); break; case X86::SUB32mi8: printOperand(MI, 4, MVT::i8); break; case X86::SUB32mr: printOperand(MI, 4, MVT::i32); break; case X86::TEST32mi: printOperand(MI, 4, MVT::i32); break; case X86::TEST32mr: printOperand(MI, 4, MVT::i32); break; case X86::TEST8mi: printOperand(MI, 4, MVT::i8); break; case X86::XCHG32mr: printOperand(MI, 4, MVT::i32); break; case X86::XOR32mi: printOperand(MI, 4, MVT::i32); break; case X86::XOR32mi8: printOperand(MI, 4, MVT::i8); break; case X86::XOR32mr: printOperand(MI, 4, MVT::i32); break; } into this: switch (MI->getOpcode()) { case X86::ADC32mi: case X86::ADC32mr: case X86::ADD32mi: case X86::ADD32mr: case X86::AND32mi: case X86::AND32mr: case X86::CMP32mi: case X86::CMP32mr: case X86::MOV32mi: case X86::MOV32mr: case X86::OR32mi: case X86::OR32mr: case X86::SBB32mi: case X86::SBB32mr: case X86::SHLD32mrCL: case X86::SHRD32mrCL: case X86::SUB32mi: case X86::SUB32mr: case X86::TEST32mi: case X86::TEST32mr: case X86::XCHG32mr: case X86::XOR32mi: case X86::XOR32mr: printOperand(MI, 4, MVT::i32); break; case X86::ADC32mi8: case X86::ADD32mi8: case X86::AND32mi8: case X86::OR32mi8: case X86::ROL32mi: case X86::ROR32mi: case X86::SAR32mi: case X86::SBB32mi8: case X86::SHL32mi: case X86::SHR32mi: case X86::SUB32mi8: case X86::TEST8mi: case X86::XOR32mi8: printOperand(MI, 4, MVT::i8); break; } After this, the generated asmwriters look pretty much as though they were generated by hand. This shrinks the X86 asmwriter.inc files from 55101->39669 and 55429->39551 bytes each, and PPC from 16766->12859 bytes. llvm-svn: 19760
2005-01-23 04:31:17 +08:00
OpsToPrint.erase(OpsToPrint.begin()+i-1);
}
// Finally, emit the code.
O << "\n " << TheOp.getCode(PassSubtarget);
O << "\n break;\n";
This is the final big of factoring. This shares cases in suboperand differences, which means that identical instructions (after stripping off the first literal string) do not run any different code at all. On the X86, this turns this code: switch (MI->getOpcode()) { case X86::ADC32mi: printOperand(MI, 4, MVT::i32); break; case X86::ADC32mi8: printOperand(MI, 4, MVT::i8); break; case X86::ADC32mr: printOperand(MI, 4, MVT::i32); break; case X86::ADD32mi: printOperand(MI, 4, MVT::i32); break; case X86::ADD32mi8: printOperand(MI, 4, MVT::i8); break; case X86::ADD32mr: printOperand(MI, 4, MVT::i32); break; case X86::AND32mi: printOperand(MI, 4, MVT::i32); break; case X86::AND32mi8: printOperand(MI, 4, MVT::i8); break; case X86::AND32mr: printOperand(MI, 4, MVT::i32); break; case X86::CMP32mi: printOperand(MI, 4, MVT::i32); break; case X86::CMP32mr: printOperand(MI, 4, MVT::i32); break; case X86::MOV32mi: printOperand(MI, 4, MVT::i32); break; case X86::MOV32mr: printOperand(MI, 4, MVT::i32); break; case X86::OR32mi: printOperand(MI, 4, MVT::i32); break; case X86::OR32mi8: printOperand(MI, 4, MVT::i8); break; case X86::OR32mr: printOperand(MI, 4, MVT::i32); break; case X86::ROL32mi: printOperand(MI, 4, MVT::i8); break; case X86::ROR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SAR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SBB32mi: printOperand(MI, 4, MVT::i32); break; case X86::SBB32mi8: printOperand(MI, 4, MVT::i8); break; case X86::SBB32mr: printOperand(MI, 4, MVT::i32); break; case X86::SHL32mi: printOperand(MI, 4, MVT::i8); break; case X86::SHLD32mrCL: printOperand(MI, 4, MVT::i32); break; case X86::SHR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SHRD32mrCL: printOperand(MI, 4, MVT::i32); break; case X86::SUB32mi: printOperand(MI, 4, MVT::i32); break; case X86::SUB32mi8: printOperand(MI, 4, MVT::i8); break; case X86::SUB32mr: printOperand(MI, 4, MVT::i32); break; case X86::TEST32mi: printOperand(MI, 4, MVT::i32); break; case X86::TEST32mr: printOperand(MI, 4, MVT::i32); break; case X86::TEST8mi: printOperand(MI, 4, MVT::i8); break; case X86::XCHG32mr: printOperand(MI, 4, MVT::i32); break; case X86::XOR32mi: printOperand(MI, 4, MVT::i32); break; case X86::XOR32mi8: printOperand(MI, 4, MVT::i8); break; case X86::XOR32mr: printOperand(MI, 4, MVT::i32); break; } into this: switch (MI->getOpcode()) { case X86::ADC32mi: case X86::ADC32mr: case X86::ADD32mi: case X86::ADD32mr: case X86::AND32mi: case X86::AND32mr: case X86::CMP32mi: case X86::CMP32mr: case X86::MOV32mi: case X86::MOV32mr: case X86::OR32mi: case X86::OR32mr: case X86::SBB32mi: case X86::SBB32mr: case X86::SHLD32mrCL: case X86::SHRD32mrCL: case X86::SUB32mi: case X86::SUB32mr: case X86::TEST32mi: case X86::TEST32mr: case X86::XCHG32mr: case X86::XOR32mi: case X86::XOR32mr: printOperand(MI, 4, MVT::i32); break; case X86::ADC32mi8: case X86::ADD32mi8: case X86::AND32mi8: case X86::OR32mi8: case X86::ROL32mi: case X86::ROR32mi: case X86::SAR32mi: case X86::SBB32mi8: case X86::SHL32mi: case X86::SHR32mi: case X86::SUB32mi8: case X86::TEST8mi: case X86::XOR32mi8: printOperand(MI, 4, MVT::i8); break; } After this, the generated asmwriters look pretty much as though they were generated by hand. This shrinks the X86 asmwriter.inc files from 55101->39669 and 55429->39551 bytes each, and PPC from 16766->12859 bytes. llvm-svn: 19760
2005-01-23 04:31:17 +08:00
}
/// EmitInstructions - Emit the last instruction in the vector and any other
/// instructions that are suitably similar to it.
static void EmitInstructions(std::vector<AsmWriterInst> &Insts,
raw_ostream &O, bool PassSubtarget) {
AsmWriterInst FirstInst = Insts.back();
Insts.pop_back();
std::vector<AsmWriterInst> SimilarInsts;
unsigned DifferingOperand = ~0;
for (unsigned i = Insts.size(); i != 0; --i) {
unsigned DiffOp = Insts[i-1].MatchesAllButOneOp(FirstInst);
if (DiffOp != ~1U) {
if (DifferingOperand == ~0U) // First match!
DifferingOperand = DiffOp;
// If this differs in the same operand as the rest of the instructions in
// this class, move it to the SimilarInsts list.
if (DifferingOperand == DiffOp || DiffOp == ~0U) {
SimilarInsts.push_back(Insts[i-1]);
Insts.erase(Insts.begin()+i-1);
}
}
}
O << " case " << FirstInst.CGI->Namespace << "::"
<< FirstInst.CGI->TheDef->getName() << ":\n";
for (const AsmWriterInst &AWI : SimilarInsts)
O << " case " << AWI.CGI->Namespace << "::"
<< AWI.CGI->TheDef->getName() << ":\n";
for (unsigned i = 0, e = FirstInst.Operands.size(); i != e; ++i) {
if (i != DifferingOperand) {
// If the operand is the same for all instructions, just print it.
O << " " << FirstInst.Operands[i].getCode(PassSubtarget);
} else {
// If this is the operand that varies between all of the instructions,
// emit a switch for just this operand now.
O << " switch (MI->getOpcode()) {\n";
O << " default: llvm_unreachable(\"Unexpected opcode.\");\n";
std::vector<std::pair<std::string, AsmWriterOperand>> OpsToPrint;
OpsToPrint.push_back(std::make_pair(FirstInst.CGI->Namespace + "::" +
FirstInst.CGI->TheDef->getName().str(),
This is the final big of factoring. This shares cases in suboperand differences, which means that identical instructions (after stripping off the first literal string) do not run any different code at all. On the X86, this turns this code: switch (MI->getOpcode()) { case X86::ADC32mi: printOperand(MI, 4, MVT::i32); break; case X86::ADC32mi8: printOperand(MI, 4, MVT::i8); break; case X86::ADC32mr: printOperand(MI, 4, MVT::i32); break; case X86::ADD32mi: printOperand(MI, 4, MVT::i32); break; case X86::ADD32mi8: printOperand(MI, 4, MVT::i8); break; case X86::ADD32mr: printOperand(MI, 4, MVT::i32); break; case X86::AND32mi: printOperand(MI, 4, MVT::i32); break; case X86::AND32mi8: printOperand(MI, 4, MVT::i8); break; case X86::AND32mr: printOperand(MI, 4, MVT::i32); break; case X86::CMP32mi: printOperand(MI, 4, MVT::i32); break; case X86::CMP32mr: printOperand(MI, 4, MVT::i32); break; case X86::MOV32mi: printOperand(MI, 4, MVT::i32); break; case X86::MOV32mr: printOperand(MI, 4, MVT::i32); break; case X86::OR32mi: printOperand(MI, 4, MVT::i32); break; case X86::OR32mi8: printOperand(MI, 4, MVT::i8); break; case X86::OR32mr: printOperand(MI, 4, MVT::i32); break; case X86::ROL32mi: printOperand(MI, 4, MVT::i8); break; case X86::ROR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SAR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SBB32mi: printOperand(MI, 4, MVT::i32); break; case X86::SBB32mi8: printOperand(MI, 4, MVT::i8); break; case X86::SBB32mr: printOperand(MI, 4, MVT::i32); break; case X86::SHL32mi: printOperand(MI, 4, MVT::i8); break; case X86::SHLD32mrCL: printOperand(MI, 4, MVT::i32); break; case X86::SHR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SHRD32mrCL: printOperand(MI, 4, MVT::i32); break; case X86::SUB32mi: printOperand(MI, 4, MVT::i32); break; case X86::SUB32mi8: printOperand(MI, 4, MVT::i8); break; case X86::SUB32mr: printOperand(MI, 4, MVT::i32); break; case X86::TEST32mi: printOperand(MI, 4, MVT::i32); break; case X86::TEST32mr: printOperand(MI, 4, MVT::i32); break; case X86::TEST8mi: printOperand(MI, 4, MVT::i8); break; case X86::XCHG32mr: printOperand(MI, 4, MVT::i32); break; case X86::XOR32mi: printOperand(MI, 4, MVT::i32); break; case X86::XOR32mi8: printOperand(MI, 4, MVT::i8); break; case X86::XOR32mr: printOperand(MI, 4, MVT::i32); break; } into this: switch (MI->getOpcode()) { case X86::ADC32mi: case X86::ADC32mr: case X86::ADD32mi: case X86::ADD32mr: case X86::AND32mi: case X86::AND32mr: case X86::CMP32mi: case X86::CMP32mr: case X86::MOV32mi: case X86::MOV32mr: case X86::OR32mi: case X86::OR32mr: case X86::SBB32mi: case X86::SBB32mr: case X86::SHLD32mrCL: case X86::SHRD32mrCL: case X86::SUB32mi: case X86::SUB32mr: case X86::TEST32mi: case X86::TEST32mr: case X86::XCHG32mr: case X86::XOR32mi: case X86::XOR32mr: printOperand(MI, 4, MVT::i32); break; case X86::ADC32mi8: case X86::ADD32mi8: case X86::AND32mi8: case X86::OR32mi8: case X86::ROL32mi: case X86::ROR32mi: case X86::SAR32mi: case X86::SBB32mi8: case X86::SHL32mi: case X86::SHR32mi: case X86::SUB32mi8: case X86::TEST8mi: case X86::XOR32mi8: printOperand(MI, 4, MVT::i8); break; } After this, the generated asmwriters look pretty much as though they were generated by hand. This shrinks the X86 asmwriter.inc files from 55101->39669 and 55429->39551 bytes each, and PPC from 16766->12859 bytes. llvm-svn: 19760
2005-01-23 04:31:17 +08:00
FirstInst.Operands[i]));
for (const AsmWriterInst &AWI : SimilarInsts) {
OpsToPrint.push_back(std::make_pair(AWI.CGI->Namespace+"::" +
AWI.CGI->TheDef->getName().str(),
This is the final big of factoring. This shares cases in suboperand differences, which means that identical instructions (after stripping off the first literal string) do not run any different code at all. On the X86, this turns this code: switch (MI->getOpcode()) { case X86::ADC32mi: printOperand(MI, 4, MVT::i32); break; case X86::ADC32mi8: printOperand(MI, 4, MVT::i8); break; case X86::ADC32mr: printOperand(MI, 4, MVT::i32); break; case X86::ADD32mi: printOperand(MI, 4, MVT::i32); break; case X86::ADD32mi8: printOperand(MI, 4, MVT::i8); break; case X86::ADD32mr: printOperand(MI, 4, MVT::i32); break; case X86::AND32mi: printOperand(MI, 4, MVT::i32); break; case X86::AND32mi8: printOperand(MI, 4, MVT::i8); break; case X86::AND32mr: printOperand(MI, 4, MVT::i32); break; case X86::CMP32mi: printOperand(MI, 4, MVT::i32); break; case X86::CMP32mr: printOperand(MI, 4, MVT::i32); break; case X86::MOV32mi: printOperand(MI, 4, MVT::i32); break; case X86::MOV32mr: printOperand(MI, 4, MVT::i32); break; case X86::OR32mi: printOperand(MI, 4, MVT::i32); break; case X86::OR32mi8: printOperand(MI, 4, MVT::i8); break; case X86::OR32mr: printOperand(MI, 4, MVT::i32); break; case X86::ROL32mi: printOperand(MI, 4, MVT::i8); break; case X86::ROR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SAR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SBB32mi: printOperand(MI, 4, MVT::i32); break; case X86::SBB32mi8: printOperand(MI, 4, MVT::i8); break; case X86::SBB32mr: printOperand(MI, 4, MVT::i32); break; case X86::SHL32mi: printOperand(MI, 4, MVT::i8); break; case X86::SHLD32mrCL: printOperand(MI, 4, MVT::i32); break; case X86::SHR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SHRD32mrCL: printOperand(MI, 4, MVT::i32); break; case X86::SUB32mi: printOperand(MI, 4, MVT::i32); break; case X86::SUB32mi8: printOperand(MI, 4, MVT::i8); break; case X86::SUB32mr: printOperand(MI, 4, MVT::i32); break; case X86::TEST32mi: printOperand(MI, 4, MVT::i32); break; case X86::TEST32mr: printOperand(MI, 4, MVT::i32); break; case X86::TEST8mi: printOperand(MI, 4, MVT::i8); break; case X86::XCHG32mr: printOperand(MI, 4, MVT::i32); break; case X86::XOR32mi: printOperand(MI, 4, MVT::i32); break; case X86::XOR32mi8: printOperand(MI, 4, MVT::i8); break; case X86::XOR32mr: printOperand(MI, 4, MVT::i32); break; } into this: switch (MI->getOpcode()) { case X86::ADC32mi: case X86::ADC32mr: case X86::ADD32mi: case X86::ADD32mr: case X86::AND32mi: case X86::AND32mr: case X86::CMP32mi: case X86::CMP32mr: case X86::MOV32mi: case X86::MOV32mr: case X86::OR32mi: case X86::OR32mr: case X86::SBB32mi: case X86::SBB32mr: case X86::SHLD32mrCL: case X86::SHRD32mrCL: case X86::SUB32mi: case X86::SUB32mr: case X86::TEST32mi: case X86::TEST32mr: case X86::XCHG32mr: case X86::XOR32mi: case X86::XOR32mr: printOperand(MI, 4, MVT::i32); break; case X86::ADC32mi8: case X86::ADD32mi8: case X86::AND32mi8: case X86::OR32mi8: case X86::ROL32mi: case X86::ROR32mi: case X86::SAR32mi: case X86::SBB32mi8: case X86::SHL32mi: case X86::SHR32mi: case X86::SUB32mi8: case X86::TEST8mi: case X86::XOR32mi8: printOperand(MI, 4, MVT::i8); break; } After this, the generated asmwriters look pretty much as though they were generated by hand. This shrinks the X86 asmwriter.inc files from 55101->39669 and 55429->39551 bytes each, and PPC from 16766->12859 bytes. llvm-svn: 19760
2005-01-23 04:31:17 +08:00
AWI.Operands[i]));
}
This is the final big of factoring. This shares cases in suboperand differences, which means that identical instructions (after stripping off the first literal string) do not run any different code at all. On the X86, this turns this code: switch (MI->getOpcode()) { case X86::ADC32mi: printOperand(MI, 4, MVT::i32); break; case X86::ADC32mi8: printOperand(MI, 4, MVT::i8); break; case X86::ADC32mr: printOperand(MI, 4, MVT::i32); break; case X86::ADD32mi: printOperand(MI, 4, MVT::i32); break; case X86::ADD32mi8: printOperand(MI, 4, MVT::i8); break; case X86::ADD32mr: printOperand(MI, 4, MVT::i32); break; case X86::AND32mi: printOperand(MI, 4, MVT::i32); break; case X86::AND32mi8: printOperand(MI, 4, MVT::i8); break; case X86::AND32mr: printOperand(MI, 4, MVT::i32); break; case X86::CMP32mi: printOperand(MI, 4, MVT::i32); break; case X86::CMP32mr: printOperand(MI, 4, MVT::i32); break; case X86::MOV32mi: printOperand(MI, 4, MVT::i32); break; case X86::MOV32mr: printOperand(MI, 4, MVT::i32); break; case X86::OR32mi: printOperand(MI, 4, MVT::i32); break; case X86::OR32mi8: printOperand(MI, 4, MVT::i8); break; case X86::OR32mr: printOperand(MI, 4, MVT::i32); break; case X86::ROL32mi: printOperand(MI, 4, MVT::i8); break; case X86::ROR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SAR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SBB32mi: printOperand(MI, 4, MVT::i32); break; case X86::SBB32mi8: printOperand(MI, 4, MVT::i8); break; case X86::SBB32mr: printOperand(MI, 4, MVT::i32); break; case X86::SHL32mi: printOperand(MI, 4, MVT::i8); break; case X86::SHLD32mrCL: printOperand(MI, 4, MVT::i32); break; case X86::SHR32mi: printOperand(MI, 4, MVT::i8); break; case X86::SHRD32mrCL: printOperand(MI, 4, MVT::i32); break; case X86::SUB32mi: printOperand(MI, 4, MVT::i32); break; case X86::SUB32mi8: printOperand(MI, 4, MVT::i8); break; case X86::SUB32mr: printOperand(MI, 4, MVT::i32); break; case X86::TEST32mi: printOperand(MI, 4, MVT::i32); break; case X86::TEST32mr: printOperand(MI, 4, MVT::i32); break; case X86::TEST8mi: printOperand(MI, 4, MVT::i8); break; case X86::XCHG32mr: printOperand(MI, 4, MVT::i32); break; case X86::XOR32mi: printOperand(MI, 4, MVT::i32); break; case X86::XOR32mi8: printOperand(MI, 4, MVT::i8); break; case X86::XOR32mr: printOperand(MI, 4, MVT::i32); break; } into this: switch (MI->getOpcode()) { case X86::ADC32mi: case X86::ADC32mr: case X86::ADD32mi: case X86::ADD32mr: case X86::AND32mi: case X86::AND32mr: case X86::CMP32mi: case X86::CMP32mr: case X86::MOV32mi: case X86::MOV32mr: case X86::OR32mi: case X86::OR32mr: case X86::SBB32mi: case X86::SBB32mr: case X86::SHLD32mrCL: case X86::SHRD32mrCL: case X86::SUB32mi: case X86::SUB32mr: case X86::TEST32mi: case X86::TEST32mr: case X86::XCHG32mr: case X86::XOR32mi: case X86::XOR32mr: printOperand(MI, 4, MVT::i32); break; case X86::ADC32mi8: case X86::ADD32mi8: case X86::AND32mi8: case X86::OR32mi8: case X86::ROL32mi: case X86::ROR32mi: case X86::SAR32mi: case X86::SBB32mi8: case X86::SHL32mi: case X86::SHR32mi: case X86::SUB32mi8: case X86::TEST8mi: case X86::XOR32mi8: printOperand(MI, 4, MVT::i8); break; } After this, the generated asmwriters look pretty much as though they were generated by hand. This shrinks the X86 asmwriter.inc files from 55101->39669 and 55429->39551 bytes each, and PPC from 16766->12859 bytes. llvm-svn: 19760
2005-01-23 04:31:17 +08:00
std::reverse(OpsToPrint.begin(), OpsToPrint.end());
while (!OpsToPrint.empty())
PrintCases(OpsToPrint, O, PassSubtarget);
O << " }";
}
O << "\n";
}
O << " break;\n";
}
void AsmWriterEmitter::
2010-09-30 06:32:50 +08:00
FindUniqueOperandCommands(std::vector<std::string> &UniqueOperandCommands,
std::vector<std::vector<unsigned>> &InstIdxs,
std::vector<unsigned> &InstOpsUsed,
bool PassSubtarget) const {
// This vector parallels UniqueOperandCommands, keeping track of which
// instructions each case are used for. It is a comma separated string of
// enums.
std::vector<std::string> InstrsForCase;
InstrsForCase.resize(UniqueOperandCommands.size());
InstOpsUsed.assign(UniqueOperandCommands.size(), 0);
2010-09-30 06:32:50 +08:00
for (size_t i = 0, e = Instructions.size(); i != e; ++i) {
const AsmWriterInst &Inst = Instructions[i];
if (Inst.Operands.empty())
continue; // Instruction already done.
std::string Command = " "+Inst.Operands[0].getCode(PassSubtarget)+"\n";
// Check to see if we already have 'Command' in UniqueOperandCommands.
// If not, add it.
auto I = llvm::find(UniqueOperandCommands, Command);
if (I != UniqueOperandCommands.end()) {
size_t idx = I - UniqueOperandCommands.begin();
InstrsForCase[idx] += ", ";
InstrsForCase[idx] += Inst.CGI->TheDef->getName();
InstIdxs[idx].push_back(i);
} else {
UniqueOperandCommands.push_back(std::move(Command));
InstrsForCase.push_back(Inst.CGI->TheDef->getName());
InstIdxs.emplace_back();
InstIdxs.back().push_back(i);
// This command matches one operand so far.
InstOpsUsed.push_back(1);
}
}
2010-09-30 06:32:50 +08:00
// For each entry of UniqueOperandCommands, there is a set of instructions
// that uses it. If the next command of all instructions in the set are
// identical, fold it into the command.
for (size_t CommandIdx = 0, e = UniqueOperandCommands.size();
CommandIdx != e; ++CommandIdx) {
2010-09-30 06:32:50 +08:00
const auto &Idxs = InstIdxs[CommandIdx];
for (unsigned Op = 1; ; ++Op) {
// Find the first instruction in the set.
const AsmWriterInst &FirstInst = Instructions[Idxs.front()];
// If this instruction has no more operands, we isn't anything to merge
// into this command.
if (FirstInst.Operands.size() == Op)
break;
// Otherwise, scan to see if all of the other instructions in this command
// set share the operand.
if (std::any_of(Idxs.begin()+1, Idxs.end(),
[&](unsigned Idx) {
const AsmWriterInst &OtherInst = Instructions[Idx];
return OtherInst.Operands.size() == Op ||
OtherInst.Operands[Op] != FirstInst.Operands[Op];
}))
break;
2010-09-30 06:32:50 +08:00
// Okay, everything in this command set has the same next operand. Add it
// to UniqueOperandCommands and remember that it was consumed.
std::string Command = " " +
FirstInst.Operands[Op].getCode(PassSubtarget) + "\n";
2010-09-30 06:32:50 +08:00
UniqueOperandCommands[CommandIdx] += Command;
InstOpsUsed[CommandIdx]++;
}
}
2010-09-30 06:32:50 +08:00
// Prepend some of the instructions each case is used for onto the case val.
for (unsigned i = 0, e = InstrsForCase.size(); i != e; ++i) {
std::string Instrs = InstrsForCase[i];
if (Instrs.size() > 70) {
Instrs.erase(Instrs.begin()+70, Instrs.end());
Instrs += "...";
}
2010-09-30 06:32:50 +08:00
if (!Instrs.empty())
2010-09-30 06:32:50 +08:00
UniqueOperandCommands[i] = " // " + Instrs + "\n" +
UniqueOperandCommands[i];
}
}
static void UnescapeString(std::string &Str) {
for (unsigned i = 0; i != Str.size(); ++i) {
if (Str[i] == '\\' && i != Str.size()-1) {
switch (Str[i+1]) {
default: continue; // Don't execute the code after the switch.
case 'a': Str[i] = '\a'; break;
case 'b': Str[i] = '\b'; break;
case 'e': Str[i] = 27; break;
case 'f': Str[i] = '\f'; break;
case 'n': Str[i] = '\n'; break;
case 'r': Str[i] = '\r'; break;
case 't': Str[i] = '\t'; break;
case 'v': Str[i] = '\v'; break;
case '"': Str[i] = '\"'; break;
case '\'': Str[i] = '\''; break;
case '\\': Str[i] = '\\'; break;
}
// Nuke the second character.
Str.erase(Str.begin()+i+1);
}
}
}
/// EmitPrintInstruction - Generate the code for the "printInstruction" method
/// implementation. Destroys all instances of AsmWriterInst information, by
/// clearing the Instructions vector.
void AsmWriterEmitter::EmitPrintInstruction(raw_ostream &O) {
Record *AsmWriter = Target.getAsmWriter();
std::string ClassName = AsmWriter->getValueAsString("AsmWriterClassName");
bool PassSubtarget = AsmWriter->getValueAsInt("PassSubtarget");
2010-09-30 06:32:50 +08:00
O <<
"/// printInstruction - This method is automatically generated by tablegen\n"
"/// from the instruction set description.\n"
"void " << Target.getName() << ClassName
<< "::printInstruction(const MCInst *MI, "
<< (PassSubtarget ? "const MCSubtargetInfo &STI, " : "")
<< "raw_ostream &O) {\n";
// Build an aggregate string, and build a table of offsets into it.
SequenceToOffsetTable<std::string> StringTable;
2010-09-30 06:32:50 +08:00
/// OpcodeInfo - This encodes the index of the string to use for the first
/// chunk of the output as well as indices used for operand printing.
std::vector<uint64_t> OpcodeInfo(NumberedInstructions.size());
const unsigned OpcodeInfoBits = 64;
2010-09-30 06:32:50 +08:00
// Add all strings to the string table upfront so it can generate an optimized
// representation.
for (AsmWriterInst &AWI : Instructions) {
if (AWI.Operands[0].OperandType ==
2012-04-19 02:56:33 +08:00
AsmWriterOperand::isLiteralTextOperand &&
!AWI.Operands[0].Str.empty()) {
std::string Str = AWI.Operands[0].Str;
UnescapeString(Str);
StringTable.add(Str);
}
}
StringTable.layout();
unsigned MaxStringIdx = 0;
for (AsmWriterInst &AWI : Instructions) {
unsigned Idx;
if (AWI.Operands[0].OperandType != AsmWriterOperand::isLiteralTextOperand ||
AWI.Operands[0].Str.empty()) {
// Something handled by the asmwriter printer, but with no leading string.
Idx = StringTable.get("");
} else {
std::string Str = AWI.Operands[0].Str;
UnescapeString(Str);
Idx = StringTable.get(Str);
MaxStringIdx = std::max(MaxStringIdx, Idx);
2010-09-30 06:32:50 +08:00
// Nuke the string from the operand list. It is now handled!
AWI.Operands.erase(AWI.Operands.begin());
}
2010-09-30 06:32:50 +08:00
// Bias offset by one since we want 0 as a sentinel.
OpcodeInfo[AWI.CGIIndex] = Idx+1;
}
2010-09-30 06:32:50 +08:00
// Figure out how many bits we used for the string index.
unsigned AsmStrBits = Log2_32_Ceil(MaxStringIdx+2);
2010-09-30 06:32:50 +08:00
// To reduce code size, we compactify common instructions into a few bits
// in the opcode-indexed table.
unsigned BitsLeft = OpcodeInfoBits-AsmStrBits;
std::vector<std::vector<std::string>> TableDrivenOperandPrinters;
2010-09-30 06:32:50 +08:00
while (true) {
std::vector<std::string> UniqueOperandCommands;
std::vector<std::vector<unsigned>> InstIdxs;
std::vector<unsigned> NumInstOpsHandled;
FindUniqueOperandCommands(UniqueOperandCommands, InstIdxs,
NumInstOpsHandled, PassSubtarget);
2010-09-30 06:32:50 +08:00
// If we ran out of operands to print, we're done.
if (UniqueOperandCommands.empty()) break;
2010-09-30 06:32:50 +08:00
// Compute the number of bits we need to represent these cases, this is
// ceil(log2(numentries)).
unsigned NumBits = Log2_32_Ceil(UniqueOperandCommands.size());
2010-09-30 06:32:50 +08:00
// If we don't have enough bits for this operand, don't include it.
if (NumBits > BitsLeft) {
2009-08-23 12:44:11 +08:00
DEBUG(errs() << "Not enough bits to densely encode " << NumBits
<< " more bits\n");
break;
}
2010-09-30 06:32:50 +08:00
// Otherwise, we can include this in the initial lookup table. Add it in.
for (size_t i = 0, e = InstIdxs.size(); i != e; ++i) {
unsigned NumOps = NumInstOpsHandled[i];
for (unsigned Idx : InstIdxs[i]) {
OpcodeInfo[Instructions[Idx].CGIIndex] |=
(uint64_t)i << (OpcodeInfoBits-BitsLeft);
// Remove the info about this operand from the instruction.
AsmWriterInst &Inst = Instructions[Idx];
if (!Inst.Operands.empty()) {
assert(NumOps <= Inst.Operands.size() &&
"Can't remove this many ops!");
Inst.Operands.erase(Inst.Operands.begin(),
Inst.Operands.begin()+NumOps);
}
}
}
BitsLeft -= NumBits;
2010-09-30 06:32:50 +08:00
// Remember the handlers for this set of operands.
TableDrivenOperandPrinters.push_back(std::move(UniqueOperandCommands));
}
2010-09-30 06:32:50 +08:00
// Emit the string table itself.
O << " static const char AsmStrs[] = {\n";
StringTable.emit(O, printChar);
O << " };\n\n";
2010-09-30 06:32:50 +08:00
// Emit the lookup tables in pieces to minimize wasted bytes.
unsigned BytesNeeded = ((OpcodeInfoBits - BitsLeft) + 7) / 8;
unsigned Table = 0, Shift = 0;
SmallString<128> BitsString;
raw_svector_ostream BitsOS(BitsString);
// If the total bits is more than 32-bits we need to use a 64-bit type.
BitsOS << " uint" << ((BitsLeft < (OpcodeInfoBits - 32)) ? 64 : 32)
<< "_t Bits = 0;\n";
while (BytesNeeded != 0) {
// Figure out how big this table section needs to be, but no bigger than 4.
unsigned TableSize = std::min(1 << Log2_32(BytesNeeded), 4);
BytesNeeded -= TableSize;
TableSize *= 8; // Convert to bits;
uint64_t Mask = (1ULL << TableSize) - 1;
O << " static const uint" << TableSize << "_t OpInfo" << Table
<< "[] = {\n";
for (unsigned i = 0, e = NumberedInstructions.size(); i != e; ++i) {
O << " " << ((OpcodeInfo[i] >> Shift) & Mask) << "U,\t// "
<< NumberedInstructions[i]->TheDef->getName() << "\n";
}
O << " };\n\n";
// Emit string to combine the individual table lookups.
BitsOS << " Bits |= ";
// If the total bits is more than 32-bits we need to use a 64-bit type.
if (BitsLeft < (OpcodeInfoBits - 32))
BitsOS << "(uint64_t)";
BitsOS << "OpInfo" << Table << "[MI->getOpcode()] << " << Shift << ";\n";
// Prepare the shift for the next iteration and increment the table count.
Shift += TableSize;
++Table;
}
// Emit the initial tab character.
O << " O << \"\\t\";\n\n";
O << " // Emit the opcode for the instruction.\n";
O << BitsString;
// Emit the starting string.
O << " assert(Bits != 0 && \"Cannot print this instruction.\");\n"
<< " O << AsmStrs+(Bits & " << (1 << AsmStrBits)-1 << ")-1;\n\n";
// Output the table driven operand information.
BitsLeft = OpcodeInfoBits-AsmStrBits;
for (unsigned i = 0, e = TableDrivenOperandPrinters.size(); i != e; ++i) {
std::vector<std::string> &Commands = TableDrivenOperandPrinters[i];
// Compute the number of bits we need to represent these cases, this is
// ceil(log2(numentries)).
unsigned NumBits = Log2_32_Ceil(Commands.size());
assert(NumBits <= BitsLeft && "consistency error");
2010-09-30 06:32:50 +08:00
// Emit code to extract this field from Bits.
O << "\n // Fragment " << i << " encoded into " << NumBits
<< " bits for " << Commands.size() << " unique commands.\n";
2010-09-30 06:32:50 +08:00
if (Commands.size() == 2) {
// Emit two possibilitys with if/else.
O << " if ((Bits >> "
<< (OpcodeInfoBits-BitsLeft) << ") & "
<< ((1 << NumBits)-1) << ") {\n"
<< Commands[1]
<< " } else {\n"
<< Commands[0]
<< " }\n\n";
} else if (Commands.size() == 1) {
// Emit a single possibility.
O << Commands[0] << "\n\n";
} else {
O << " switch ((Bits >> "
<< (OpcodeInfoBits-BitsLeft) << ") & "
<< ((1 << NumBits)-1) << ") {\n"
<< " default: llvm_unreachable(\"Invalid command number.\");\n";
2010-09-30 06:32:50 +08:00
// Print out all the cases.
for (unsigned j = 0, e = Commands.size(); j != e; ++j) {
O << " case " << j << ":\n";
O << Commands[j];
O << " break;\n";
}
O << " }\n\n";
}
BitsLeft -= NumBits;
}
2010-09-30 06:32:50 +08:00
// Okay, delete instructions with no operand info left.
auto I = llvm::remove_if(Instructions,
[](AsmWriterInst &Inst) { return Inst.Operands.empty(); });
Instructions.erase(I, Instructions.end());
2010-09-30 06:32:50 +08:00
// Because this is a vector, we want to emit from the end. Reverse all of the
// elements in the vector.
std::reverse(Instructions.begin(), Instructions.end());
2010-09-30 06:32:50 +08:00
// Now that we've emitted all of the operand info that fit into 64 bits, emit
2009-09-19 02:10:19 +08:00
// information for those instructions that are left. This is a less dense
// encoding, but we expect the main 64-bit table to handle the majority of
2009-09-19 02:10:19 +08:00
// instructions.
if (!Instructions.empty()) {
// Find the opcode # of inline asm.
O << " switch (MI->getOpcode()) {\n";
O << " default: llvm_unreachable(\"Unexpected opcode.\");\n";
while (!Instructions.empty())
EmitInstructions(Instructions, O, PassSubtarget);
O << " }\n";
}
Re-enable comment and operand padding. Compile times pre-change: ======================== Program | GCCAS Bytecode LLC compile LLC-BETA compile JIT codegen | GCC CBE LLC LLC-BETA JIT | GCC/CBE GCC/LLC GCC/LLC-BETA LLC/LLC-BETA MultiSource/Applications/Burg/burg | 0.4600 109848 0.8920 * 0.8760 | 0.00 0.00 0.00 * 0.91 | - - n/a n/a MultiSource/Applications/ClamAV/clamscan | 5.1563 1318528 6.8244 * 3.9042 | 0.20 0.20 0.21 * 4.32 | 1.00 0.95 n/a n/a MultiSource/Applications/JM/ldecod/ldecod | 3.3082 661960 2.5961 * 2.0801 | 0.08 0.07 0.06 * 2.30 | - - n/a n/a MultiSource/Applications/JM/lencod/lencod | 6.2883 1442696 6.5964 * 5.6723 | 8.51 8.65 8.37 * 14.76 | 0.98 1.02 n/a n/a MultiSource/Applications/SIBsim4/SIBsim4 | 0.4040 84528 0.4480 * 0.4440 | 4.33 * 4.76 * 5.43 | n/a 0.91 n/a n/a MultiSource/Applications/SPASS/SPASS | 6.3684 1594748 5.5563 * 4.0522 | 12.59 12.45 12.23 * 17.21 | 1.01 1.03 n/a n/a MultiSource/Applications/aha/aha | 0.0280 7104 0.0360 * 0.0280 | 2.23 2.86 2.98 * 3.09 | 0.78 0.75 n/a n/a MultiSource/Applications/d/make_dparser | 1.1040 299996 0.9440 * 0.8080 | 0.04 * 0.03 * 0.92 | n/a - n/a n/a MultiSource/Applications/hbd/hbd | 0.2280 82120 0.3880 * 0.3440 | 0.00 0.00 0.00 * 0.36 | - - n/a n/a MultiSource/Applications/hexxagon/hexxagon | 0.2040 49820 0.2160 * 0.1880 | 12.00 8.97 9.93 * 9.68 | 1.34 1.21 n/a n/a MultiSource/Applications/kimwitu++/kc | 5.3843 1725192 * * * | 0.00 * * * * | n/a n/a n/a n/a MultiSource/Applications/lambda-0.1.3/lambda | 0.2000 67120 0.3080 * 0.2440 | 6.12 5.55 5.76 * 6.85 | 1.10 1.06 n/a n/a MultiSource/Applications/lemon/lemon | 0.3240 104052 0.5440 * 0.0040 | 0.08 0.05 0.06 * 113.63 | - - n/a n/a MultiSource/Applications/lua/lua | 1.5400 557040 2.2561 * 1.7001 | 28.56 * 31.36 * 33.29 | n/a 0.91 n/a n/a MultiSource/Applications/minisat/minisat | 0.2440 45840 0.2040 * * | 12.85 * 12.41 * * | n/a 1.04 n/a n/a MultiSource/Applications/obsequi/Obsequi | 0.3480 59808 0.2800 * 0.2840 | 2.68 * 2.80 * 3.23 | n/a 0.96 n/a n/a MultiSource/Applications/oggenc/oggenc | 1.5480 803888 1.1800 * 0.9600 | 0.17 * 0.17 * 1.26 | n/a 1.00 n/a n/a MultiSource/Applications/sgefa/sgefa | 0.0880 16476 0.0840 * 0.0760 | 0.78 0.83 0.85 * 0.97 | 0.94 0.92 n/a n/a MultiSource/Applications/siod/siod | 0.7120 344048 1.8761 * 0.8120 | 3.62 3.88 3.69 * 4.76 | 0.93 0.98 n/a n/a MultiSource/Applications/spiff/spiff | 0.1600 50964 0.2440 * * | 1.08 1.10 1.14 * * | 0.98 0.95 n/a n/a MultiSource/Applications/sqlite3/sqlite3 | 3.9362 1133884 5.1683 * 3.7162 | 4.55 * 5.32 * 9.68 | n/a 0.86 n/a n/a MultiSource/Applications/treecc/treecc | 0.6800 292592 1.2160 * 0.3200 | 0.00 0.00 0.00 * 0.36 | - - n/a n/a MultiSource/Applications/viterbi/viterbi | 0.0280 5576 0.0240 * 0.0200 | 12.25 18.43 12.26 * 12.35 | 0.66 1.00 n/a n/a MultiSource/Benchmarks/ASCI_Purple/SMG2000/smg2000 | 3.1561 463676 2.5721 * 1.9081 | 7.60 8.29 9.01 * 9.90 | 0.92 0.84 n/a n/a MultiSource/Benchmarks/ASC_Sequoia/AMGmk/AMGmk | 0.1040 13992 0.0680 * 0.0720 | 31.04 23.70 21.64 * 22.44 | 1.31 1.43 n/a n/a MultiSource/Benchmarks/ASC_Sequoia/CrystalMk/CrystalMk | 0.0400 8248 0.0280 * 0.0280 | 12.10 12.64 11.93 * 12.18 | 0.96 1.01 n/a n/a MultiSource/Benchmarks/ASC_Sequoia/IRSmk/IRSmk | 0.0200 5592 0.0240 * 0.0240 | 0.00 0.00 0.00 * 0.03 | - - n/a n/a MultiSource/Benchmarks/BitBench/drop3/drop3 | 0.0200 3588 0.0160 * 0.0120 | 0.51 0.71 0.47 * 0.50 | 0.72 1.09 n/a n/a MultiSource/Benchmarks/BitBench/five11/five11 | 0.0160 2724 0.0120 * 0.0120 | 2.48 2.51 2.42 * 2.44 | 0.99 1.02 n/a n/a MultiSource/Benchmarks/BitBench/uudecode/uudecode | 0.0120 2864 0.0080 * 0.0120 | 0.11 0.15 0.14 * 0.15 | 0.73 0.79 n/a n/a MultiSource/Benchmarks/BitBench/uuencode/uuencode | 0.0120 2728 0.0120 * 0.0120 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a MultiSource/Benchmarks/Fhourstones-3.1/fhourstones3.1 | 0.0280 8072 0.0360 * 0.0360 | 2.00 1.86 1.85 * 1.88 | 1.08 1.08 n/a n/a MultiSource/Benchmarks/Fhourstones/fhourstones | 0.0480 10820 0.0440 * 0.0440 | 1.80 1.87 1.77 * 1.94 | 0.96 1.02 n/a n/a MultiSource/Benchmarks/FreeBench/analyzer/analyzer | 0.0400 10116 0.0480 * 0.0440 | 0.10 0.12 0.10 * 0.17 | 0.83 1.00 n/a n/a MultiSource/Benchmarks/FreeBench/distray/distray | 0.0120 6944 0.0280 * 0.0280 | 0.25 0.30 0.24 * 0.29 | 0.83 1.04 n/a n/a MultiSource/Benchmarks/FreeBench/fourinarow/fourinarow | 0.0880 18880 0.0840 * 0.0680 | 0.34 0.37 0.38 * 0.48 | 0.92 0.89 n/a n/a MultiSource/Benchmarks/FreeBench/mason/mason | 0.0160 6144 0.0200 * 0.0160 | 0.41 0.24 0.25 * 0.27 | 1.71 1.64 n/a n/a MultiSource/Benchmarks/FreeBench/neural/neural | 0.0560 8772 0.0480 * 0.0480 | 0.26 0.31 0.24 * 0.29 | 0.84 1.08 n/a n/a MultiSource/Benchmarks/FreeBench/pcompress2/pcompress2 | 0.0480 11040 0.0440 * 0.0480 | 0.29 0.30 0.26 * 0.32 | 0.97 1.12 n/a n/a MultiSource/Benchmarks/FreeBench/pifft/pifft | 0.2480 58904 0.2960 * 0.2800 | 0.12 0.14 0.15 * 0.45 | 0.86 0.80 n/a n/a MultiSource/Benchmarks/MallocBench/cfrac/cfrac | 0.2200 92136 0.3000 * 0.2800 | 1.78 * 1.66 * 1.95 | n/a 1.07 n/a n/a MultiSource/Benchmarks/MallocBench/espresso/espresso | 1.3760 407284 2.0041 * 1.3720 | 0.57 0.58 0.56 * 2.00 | 0.98 1.02 n/a n/a MultiSource/Benchmarks/MallocBench/gs/gs | 1.1400 376444 1.4400 * 0.6240 | 0.04 * 0.04 * 0.73 | n/a - n/a n/a MultiSource/Benchmarks/McCat/01-qbsort/qbsort | 0.0160 3456 0.0160 * 0.0160 | 0.07 0.06 0.06 * 0.09 | - - n/a n/a MultiSource/Benchmarks/McCat/03-testtrie/testtrie | 0.0160 3780 0.0160 * 0.0240 | 0.01 0.00 0.00 * 0.03 | - - n/a n/a MultiSource/Benchmarks/McCat/04-bisect/bisect | 0.0120 3984 0.0200 * 0.0160 | 0.16 0.25 0.18 * 0.21 | 0.64 0.89 n/a n/a MultiSource/Benchmarks/McCat/05-eks/eks | 0.1000 7532 0.0400 * 0.0360 | 0.00 0.00 0.00 * 0.05 | - - n/a n/a MultiSource/Benchmarks/McCat/08-main/main | 0.0600 12004 0.0360 * 0.0400 | 0.05 0.03 0.03 * 0.08 | - - n/a n/a MultiSource/Benchmarks/McCat/09-vor/vor | 0.0720 23092 0.0920 * 0.0960 | 0.15 0.13 0.14 * 0.25 | 1.15 1.07 n/a n/a MultiSource/Benchmarks/McCat/12-IOtest/iotest | 0.0160 2576 0.0120 * 0.0159 | 0.38 0.27 0.24 * 0.27 | 1.41 1.58 n/a n/a MultiSource/Benchmarks/McCat/15-trie/trie | 0.0080 3216 0.0160 * 0.0160 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a MultiSource/Benchmarks/McCat/17-bintr/bintr | 0.0160 3668 0.0160 * 0.0160 | 0.12 0.11 0.11 * 0.14 | 1.09 1.09 n/a n/a MultiSource/Benchmarks/McCat/18-imp/imp | 0.0680 21096 0.1000 * 0.0880 | 0.08 0.08 0.10 * 0.21 | - - n/a n/a MultiSource/Benchmarks/MiBench/automotive-basicmath/automotive-basicmath | 0.0160 4808 0.0280 * 0.0240 | 0.55 0.54 0.55 * 0.58 | 1.02 1.00 n/a n/a MultiSource/Benchmarks/MiBench/automotive-bitcount/automotive-bitcount | 0.0160 3532 0.0160 * 0.0200 | 0.11 0.16 0.14 * 0.16 | 0.69 0.79 n/a n/a MultiSource/Benchmarks/MiBench/automotive-susan/automotive-susan | 0.2720 64100 0.2840 * 0.2760 | 0.06 0.08 0.05 * 0.34 | - - n/a n/a MultiSource/Benchmarks/MiBench/consumer-jpeg/consumer-jpeg | 1.1640 201192 0.7360 * 0.3800 | 0.00 0.00 0.00 * 0.41 | - - n/a n/a MultiSource/Benchmarks/MiBench/consumer-lame/consumer-lame | 1.3200 331160 1.1360 * 0.9720 | 0.34 * 0.33 * 1.38 | n/a 1.03 n/a n/a MultiSource/Benchmarks/MiBench/consumer-typeset/consumer-typeset | 7.6004 1392340 5.9563 * 5.1283 | 0.23 * 0.22 * 5.57 | n/a 1.05 n/a n/a MultiSource/Benchmarks/MiBench/network-dijkstra/network-dijkstra | 0.0120 3456 0.0160 * 0.0120 | 0.05 0.05 0.05 * 0.07 | - - n/a n/a MultiSource/Benchmarks/MiBench/network-patricia/network-patricia | 0.0200 4268 0.0200 * 0.0200 | 0.16 0.17 0.16 * 0.19 | 0.94 1.00 n/a n/a MultiSource/Benchmarks/MiBench/office-ispell/office-ispell | 0.4920 128824 0.6520 * 0.2080 | 0.00 0.00 0.00 * 0.22 | - - n/a n/a MultiSource/Benchmarks/MiBench/office-stringsearch/office-stringsearch | 0.0240 13212 0.0080 * 0.0080 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a MultiSource/Benchmarks/MiBench/security-blowfish/security-blowfish | 0.1080 31024 0.0880 * 0.0520 | 0.00 0.00 0.00 * 0.05 | - - n/a n/a MultiSource/Benchmarks/MiBench/security-rijndael/security-rijndael | 0.1320 51332 0.0840 * 0.0560 | 0.05 0.04 0.07 * 0.14 | - - n/a n/a MultiSource/Benchmarks/MiBench/security-sha/security-sha | 0.0200 4764 0.0200 * 0.0200 | 0.01 0.02 0.02 * 0.05 | - - n/a n/a MultiSource/Benchmarks/MiBench/telecomm-CRC32/telecomm-CRC32 | 0.0080 3180 0.0080 * 0.0000 | 0.32 0.29 0.31 * 0.30 | 1.10 1.03 n/a n/a MultiSource/Benchmarks/MiBench/telecomm-FFT/telecomm-fft | 0.0120 4852 0.0240 * 0.0200 | 0.07 0.06 0.06 * 0.09 | - - n/a n/a MultiSource/Benchmarks/MiBench/telecomm-adpcm/telecomm-adpcm | 0.0080 2192 0.0080 * 0.0080 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a MultiSource/Benchmarks/MiBench/telecomm-gsm/telecomm-gsm | 0.3440 73804 0.2120 * 0.1520 | 0.23 0.21 0.22 * 0.39 | 1.10 1.05 n/a n/a MultiSource/Benchmarks/NPB-serial/is/is | 0.0080 5108 0.0200 * 0.3200 | 11.11 10.74 11.04 * 10.79 | 1.03 1.01 n/a n/a MultiSource/Benchmarks/Olden/bh/bh | 0.0840 15196 0.0680 * 0.0720 | 2.51 * 2.17 * 2.26 | n/a 1.16 n/a n/a MultiSource/Benchmarks/Olden/bisort/bisort | 0.0160 3672 0.0200 * 0.0240 | 1.02 1.13 1.06 * 1.12 | 0.90 0.96 n/a n/a MultiSource/Benchmarks/Olden/em3d/em3d | 0.0360 6424 0.0320 * 0.0280 | 3.61 4.85 3.42 * 3.43 | 0.74 1.06 n/a n/a MultiSource/Benchmarks/Olden/health/health | 0.0360 7576 0.0240 * 0.0320 | 0.63 * 0.61 * 0.67 | n/a 1.03 n/a n/a MultiSource/Benchmarks/Olden/mst/mst | 0.0320 4176 0.0200 * 0.0200 | 0.19 0.19 0.19 * 0.23 | 1.00 1.00 n/a n/a MultiSource/Benchmarks/Olden/perimeter/perimeter | 0.0160 12280 0.0680 * 0.0680 | 0.39 0.38 0.41 * 0.46 | 1.03 0.95 n/a n/a MultiSource/Benchmarks/Olden/power/power | 0.0320 8572 0.0280 * 0.0280 | 3.37 3.39 3.08 * 3.08 | 0.99 1.09 n/a n/a MultiSource/Benchmarks/Olden/treeadd/treeadd | 0.0080 1812 0.0080 * 0.0080 | 8.40 0.49 0.45 * 0.45 | 17.14 18.67 n/a n/a MultiSource/Benchmarks/Olden/tsp/tsp | 0.0200 6984 0.0240 * 0.0240 | 2.88 2.91 2.65 * 2.68 | 0.99 1.09 n/a n/a MultiSource/Benchmarks/Olden/voronoi/voronoi | 0.0640 13420 0.0520 * 0.0520 | 0.50 0.50 0.46 * 0.54 | 1.00 1.09 n/a n/a MultiSource/Benchmarks/OptimizerEval/optimizer-eval | 0.0480 28884 0.1120 * 0.1240 | 114.08 118.50 114.69 * 106.23 | 0.96 0.99 n/a n/a MultiSource/Benchmarks/PAQ8p/paq8p | 0.8880 194020 * * * | 0.00 * * * * | n/a n/a n/a n/a MultiSource/Benchmarks/Prolangs-C++/NP/np | 0.0000 1184 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/city/city | 0.1040 23800 0.0760 * 0.0480 | 0.00 0.00 0.00 * 0.06 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/deriv1/deriv1 | 0.0240 12984 0.0440 * 0.0240 | 0.00 0.00 0.00 * 0.04 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/deriv2/deriv2 | 0.0440 14516 0.0520 * 0.0320 | 0.00 0.00 0.00 * 0.04 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/employ/employ | 0.0760 21948 0.0840 * 0.0600 | 0.01 0.00 0.00 * 0.07 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/family/family | 0.0040 3392 0.0120 * 0.0120 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/fsm/fsm | 0.0160 1880 0.0080 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/garage/garage | 0.0160 7424 0.0240 * 0.0240 | 0.00 0.01 0.00 * 0.03 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/life/life | 0.0280 6304 0.0280 * 0.0200 | 1.44 1.42 1.46 * 1.79 | 1.01 0.99 n/a n/a MultiSource/Benchmarks/Prolangs-C++/objects/objects | 0.0200 9860 0.0400 * 0.0080 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/ocean/ocean | 0.0440 8856 0.0280 * 0.0360 | 0.14 0.16 0.15 * 0.19 | 0.88 0.93 n/a n/a MultiSource/Benchmarks/Prolangs-C++/office/office | 0.0520 12968 0.0360 * 0.0320 | 0.00 0.00 0.00 * 0.03 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/primes/primes | 0.0040 1592 0.0040 * 0.0040 | 0.46 0.46 0.47 * 0.47 | 1.00 0.98 n/a n/a MultiSource/Benchmarks/Prolangs-C++/shapes/shapes | 0.0520 16060 0.0560 * 0.0480 | 0.00 0.00 0.00 * 0.05 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/simul/simul | 0.0159 4164 0.0160 * 0.0040 | 0.01 0.00 0.00 * 0.03 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/trees/trees | 0.0320 11272 0.0440 * 0.0320 | 0.00 0.00 0.00 * 0.04 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/vcirc/vcirc | 0.0080 1804 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/TimberWolfMC/timberwolfmc | 1.8081 545152 2.7801 * 0.5280 | 0.00 0.00 0.00 * 0.56 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/agrep/agrep | 0.3440 90404 0.4160 * 0.1560 | 0.00 0.00 0.00 * 0.17 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/allroots/allroots | 0.0120 3512 0.0160 * 0.0160 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/archie-client/archie | 0.1640 47672 0.1880 * 0.0320 | 0.00 0.00 0.00 * 0.05 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/assembler/assembler | 0.1680 61488 0.3400 * 0.2680 | 0.00 0.00 0.00 * 0.28 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/bison/mybison | 0.3200 108708 0.8880 * 0.7600 | 0.00 0.00 0.00 * 0.79 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/cdecl/cdecl | 0.0960 48928 0.2800 * 0.2960 | 0.00 0.00 0.00 * 0.31 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/compiler/compiler | 0.0920 36336 0.2120 * 0.0360 | 0.00 0.00 0.00 * 0.04 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/fixoutput/fixoutput | 0.0120 5980 0.0320 * 0.0280 | 0.00 0.00 0.00 * 0.03 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/football/football | 0.3240 85220 0.4480 * 0.0280 | 0.00 0.00 0.00 * 0.04 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/gnugo/gnugo | 0.1160 35268 0.1760 * 0.2080 | 0.08 0.06 0.07 * 0.29 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/loader/loader | 0.0920 28112 0.1200 * 0.0840 | 0.00 0.00 0.00 * 0.08 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/plot2fig/plot2fig | 0.0440 14648 0.0760 * 0.0720 | 0.00 0.00 0.00 * 0.07 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/simulator/simulator | 0.2400 64272 0.2760 * 0.0400 | 0.00 0.00 0.00 * 0.04 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/unix-smail/unix-smail | 0.1080 39464 0.2240 * 0.1720 | 0.01 0.00 0.00 * 0.18 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/unix-tbl/unix-tbl | 0.2720 75600 0.3840 * 0.0120 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a MultiSource/Benchmarks/Ptrdist/anagram/anagram | 0.0200 7644 0.0320 * 0.0360 | 1.35 1.15 1.34 * 1.38 | 1.17 1.01 n/a n/a MultiSource/Benchmarks/Ptrdist/bc/bc | 0.3720 125596 0.6160 * 0.5960 | 0.67 0.68 0.68 * 1.30 | 0.99 0.99 n/a n/a MultiSource/Benchmarks/Ptrdist/ft/ft | 0.0280 7152 0.0320 * 0.0320 | 1.59 1.62 1.62 * 1.63 | 0.98 0.98 n/a n/a MultiSource/Benchmarks/Ptrdist/ks/ks | 0.0400 11892 0.0520 * 0.0520 | 2.13 2.24 2.34 * 2.30 | 0.95 0.91 n/a n/a MultiSource/Benchmarks/Ptrdist/yacr2/yacr2 | 0.1760 48272 0.2520 * 0.2680 | 0.91 0.95 1.31 * 1.58 | 0.96 0.69 n/a n/a MultiSource/Benchmarks/SciMark2-C/scimark2 | 0.0600 15428 0.0760 * 0.0800 | 27.87 * 28.42 * 28.58 | n/a 0.98 n/a n/a MultiSource/Benchmarks/Trimaran/enc-3des/enc-3des | 0.1600 21512 0.0920 * 0.0880 | 2.32 2.21 2.22 * 2.34 | 1.05 1.05 n/a n/a MultiSource/Benchmarks/Trimaran/enc-md5/enc-md5 | 0.0520 7660 0.0400 * 0.0400 | 2.33 2.18 2.10 * 2.14 | 1.07 1.11 n/a n/a MultiSource/Benchmarks/Trimaran/enc-pc1/enc-pc1 | 0.0200 3900 0.0160 * 0.0160 | 0.79 0.50 0.82 * 0.89 | 1.58 0.96 n/a n/a MultiSource/Benchmarks/Trimaran/enc-rc4/enc-rc4 | 0.0120 2956 0.0120 * 0.0080 | 1.37 1.54 1.20 * 1.26 | 0.89 1.14 n/a n/a MultiSource/Benchmarks/Trimaran/netbench-crc/netbench-crc | 0.0120 32656 0.0120 * 0.0080 | 1.12 1.10 1.08 * 1.11 | 1.02 1.04 n/a n/a MultiSource/Benchmarks/Trimaran/netbench-url/netbench-url | 0.0280 40864 0.0400 * 0.0400 | 2.95 3.26 4.00 * 4.50 | 0.90 0.74 n/a n/a MultiSource/Benchmarks/VersaBench/8b10b/8b10b | 0.0080 2168 0.0080 * 0.0040 | 9.11 7.13 5.20 * 5.14 | 1.28 1.75 n/a n/a MultiSource/Benchmarks/VersaBench/beamformer/beamformer | 0.0320 5748 0.0200 * 0.0240 | 1.94 2.57 2.21 * 2.25 | 0.75 0.88 n/a n/a MultiSource/Benchmarks/VersaBench/bmm/bmm | 0.0120 2924 0.0120 * 0.0240 | 2.54 2.72 2.48 * 2.51 | 0.93 1.02 n/a n/a MultiSource/Benchmarks/VersaBench/dbms/dbms | 0.1040 36324 0.2040 * 0.1960 | 1.94 2.22 1.84 * 2.08 | 0.87 1.05 n/a n/a MultiSource/Benchmarks/VersaBench/ecbdes/ecbdes | 0.0640 9772 0.0200 * 0.0160 | 3.00 2.88 2.86 * 2.89 | 1.04 1.05 n/a n/a MultiSource/Benchmarks/llubenchmark/llu | 0.0160 3712 0.0200 * 0.0160 | 13.48 13.66 13.13 * 13.47 | 0.99 1.03 n/a n/a MultiSource/Benchmarks/mafft/pairlocalalign | 3.9162 341756 1.7401 * * | 0.00 0.00 0.00 * 0.00 | - - n/a n/a MultiSource/Benchmarks/mediabench/adpcm/rawcaudio/rawcaudio | 0.0080 2324 0.0080 * 0.0080 | 0.01 0.00 0.00 * 0.03 | - - n/a n/a MultiSource/Benchmarks/mediabench/adpcm/rawdaudio/rawdaudio | 0.0120 2192 0.0080 * 0.0080 | 0.01 0.00 0.00 * 0.01 | - - n/a n/a MultiSource/Benchmarks/mediabench/g721/g721encode/encode | 0.0760 13112 0.0560 * 0.0360 | 0.06 0.06 0.08 * 0.12 | - - n/a n/a MultiSource/Benchmarks/mediabench/gsm/toast/toast | 0.3520 73804 0.2160 * 0.1440 | 0.02 0.03 0.02 * 0.19 | - - n/a n/a MultiSource/Benchmarks/mediabench/jpeg/jpeg-6a/cjpeg | 1.2040 170484 0.6320 * 0.4080 | 0.02 0.00 0.00 * 0.46 | - - n/a n/a MultiSource/Benchmarks/mediabench/mpeg2/mpeg2dec/mpeg2decode | 0.4440 101604 0.4720 * 0.3920 | 0.03 0.02 0.02 * 0.44 | - - n/a n/a MultiSource/Benchmarks/sim/sim | 0.0760 28120 0.1400 * 0.1400 | 5.52 5.66 5.39 * 5.63 | 0.98 1.02 n/a n/a MultiSource/Benchmarks/tramp3d-v4/tramp3d-v4 | 7.8485 1966488 4.8003 * 4.5322 | 0.73 * 0.77 * 5.70 | n/a 0.95 n/a n/a SingleSource/Benchmarks/Adobe-C++/functionobjects | 0.1760 35452 0.1400 * 0.1320 | 4.05 5.77 3.56 * 3.77 | 0.70 1.14 n/a n/a SingleSource/Benchmarks/Adobe-C++/loop_unroll | 0.9280 318836 1.5600 * 1.6120 | 1.85 1.97 1.84 * 3.57 | 0.94 1.01 n/a n/a SingleSource/Benchmarks/Adobe-C++/simple_types_constant_folding | 0.8000 185368 1.9881 * 2.0041 | 1.45 2.52 1.39 * 3.48 | 0.58 1.04 n/a n/a SingleSource/Benchmarks/Adobe-C++/simple_types_loop_invariant | 0.5200 137288 1.0040 * 1.0000 | 4.17 4.93 3.83 * 4.86 | 0.85 1.09 n/a n/a SingleSource/Benchmarks/Adobe-C++/stepanov_abstraction | 0.2560 37428 0.1280 * 0.1280 | 5.24 11.63 5.19 * 5.35 | 0.45 1.01 n/a n/a SingleSource/Benchmarks/Adobe-C++/stepanov_vector | 0.2760 41136 0.1480 * 0.1480 | 3.09 7.09 3.03 * 3.21 | 0.44 1.02 n/a n/a SingleSource/Benchmarks/BenchmarkGame/fannkuch | 0.0160 2672 0.0080 * 0.0040 | 4.23 4.09 3.60 * 3.49 | 1.03 1.18 n/a n/a SingleSource/Benchmarks/BenchmarkGame/fasta | 0.0120 3020 0.0120 * 0.0120 | 1.29 1.66 1.32 * 1.31 | 0.78 0.98 n/a n/a SingleSource/Benchmarks/BenchmarkGame/n-body | 0.0160 3192 0.0120 * 0.0080 | 2.37 2.12 2.07 * 2.09 | 1.12 1.14 n/a n/a SingleSource/Benchmarks/BenchmarkGame/nsieve-bits | 0.0000 1120 0.0080 * 0.0040 | 1.66 1.76 1.68 * 1.56 | 0.94 0.99 n/a n/a SingleSource/Benchmarks/BenchmarkGame/partialsums | 0.0040 1660 0.0120 * 0.0040 | 1.17 1.19 1.22 * 1.23 | 0.98 0.96 n/a n/a SingleSource/Benchmarks/BenchmarkGame/puzzle | 0.0080 1264 0.0080 * 0.0040 | 0.60 0.98 0.56 * 0.58 | 0.61 1.07 n/a n/a SingleSource/Benchmarks/BenchmarkGame/recursive | 0.0000 3444 0.0240 * 0.0280 | 1.23 1.12 1.02 * 1.05 | 1.10 1.21 n/a n/a SingleSource/Benchmarks/BenchmarkGame/spectral-norm | 0.0160 2792 0.0120 * 0.0080 | 3.08 3.10 2.08 * 2.09 | 0.99 1.48 n/a n/a SingleSource/Benchmarks/CoyoteBench/almabench | 0.0080 5816 0.0120 * 0.0120 | 18.99 8.40 8.37 * 8.42 | 2.26 2.27 n/a n/a SingleSource/Benchmarks/CoyoteBench/fftbench | 0.0960 22440 0.0720 * 0.0720 | 2.53 * 2.65 * 2.75 | n/a 0.95 n/a n/a SingleSource/Benchmarks/CoyoteBench/huffbench | 0.0200 6616 0.0320 * 0.0280 | 18.90 21.98 18.80 * 19.12 | 0.86 1.01 n/a n/a SingleSource/Benchmarks/CoyoteBench/lpbench | 0.0280 4408 0.0200 * 0.0200 | 14.41 16.14 14.63 * 15.43 | 0.89 0.98 n/a n/a SingleSource/Benchmarks/Dhrystone/dry | 0.0120 1268 0.0040 * 0.0040 | 2.62 0.46 0.63 * 0.64 | 5.70 4.16 n/a n/a SingleSource/Benchmarks/Dhrystone/fldry | 0.0120 1300 0.0040 * 0.0040 | 2.85 1.80 0.47 * 0.51 | 1.58 6.06 n/a n/a SingleSource/Benchmarks/McGill/chomp | 0.0440 6140 0.0360 * 0.0360 | 1.37 1.02 1.38 * 1.10 | 1.34 0.99 n/a n/a SingleSource/Benchmarks/McGill/exptree | 0.0120 4800 0.0200 * 0.0240 | 0.00 0.00 0.00 * 0.03 | - - n/a n/a SingleSource/Benchmarks/McGill/misr | 0.0160 2700 0.0160 * 0.0120 | 0.36 0.30 0.31 * 0.34 | 1.20 1.16 n/a n/a SingleSource/Benchmarks/McGill/queens | 0.0080 3316 0.0160 * 0.0120 | 2.90 2.57 2.46 * 2.58 | 1.13 1.18 n/a n/a SingleSource/Benchmarks/Misc-C++/bigfib | 0.2240 41088 0.1680 * 0.1320 | 0.64 * 0.66 * 0.81 | n/a 0.97 n/a n/a SingleSource/Benchmarks/Misc-C++/mandel-text | 0.0080 1152 0.0080 * 0.0080 | 2.64 3.19 2.34 * 2.35 | 0.83 1.13 n/a n/a SingleSource/Benchmarks/Misc-C++/oopack_v1p8 | 0.0400 9456 0.0320 * 0.0320 | 0.22 0.35 0.18 * 0.22 | 0.63 1.22 n/a n/a SingleSource/Benchmarks/Misc-C++/ray | 0.0720 17280 0.0520 * 0.0520 | 6.75 8.21 5.02 * 5.18 | 0.82 1.34 n/a n/a SingleSource/Benchmarks/Misc-C++/sphereflake | 0.0560 16904 0.0640 * 0.0600 | 3.42 5.60 3.37 * 3.47 | 0.61 1.01 n/a n/a SingleSource/Benchmarks/Misc-C++/stepanov_container | 0.2520 46076 0.1600 * 0.1480 | 8.13 7.88 7.50 * 7.66 | 1.03 1.08 n/a n/a SingleSource/Benchmarks/Misc-C++/stepanov_v1p2 | 0.0640 10008 0.0360 * 0.0320 | 8.19 15.84 8.18 * 8.21 | 0.52 1.00 n/a n/a SingleSource/Benchmarks/Misc/ReedSolomon | 0.0680 10188 0.0440 * 0.0440 | 7.89 8.63 7.44 * 7.84 | 0.91 1.06 n/a n/a SingleSource/Benchmarks/Misc/fbench | 0.0160 5364 0.0200 * 0.0200 | 2.20 2.27 2.54 * 2.61 | 0.97 0.87 n/a n/a SingleSource/Benchmarks/Misc/ffbench | 0.0200 4340 0.0160 * 0.0160 | 0.97 1.08 1.10 * 1.13 | 0.90 0.88 n/a n/a SingleSource/Benchmarks/Misc/flops | 0.0200 6552 0.0280 * 0.0280 | 16.68 13.01 15.85 * 15.51 | 1.28 1.05 n/a n/a SingleSource/Benchmarks/Misc/flops-1 | 0.0040 1152 0.0000 * 0.0000 | 4.48 4.05 4.61 * 4.08 | 1.11 0.97 n/a n/a SingleSource/Benchmarks/Misc/flops-2 | 0.0040 1252 0.0040 * 0.0040 | 2.22 2.51 2.21 * 2.22 | 0.88 1.00 n/a n/a SingleSource/Benchmarks/Misc/flops-3 | 0.0040 1172 0.0040 * 0.0040 | 2.74 3.22 3.00 * 3.08 | 0.85 0.91 n/a n/a SingleSource/Benchmarks/Misc/flops-4 | 0.0040 1152 0.0000 * 0.0040 | 4.05 1.35 1.39 * 1.40 | 3.00 2.91 n/a n/a SingleSource/Benchmarks/Misc/flops-5 | 0.0040 1284 0.0040 * 0.0040 | 6.85 3.92 4.46 * 4.51 | 1.75 1.54 n/a n/a SingleSource/Benchmarks/Misc/flops-6 | 0.0040 1284 0.0040 * 0.0040 | 5.09 4.86 5.10 * 5.11 | 1.05 1.00 n/a n/a SingleSource/Benchmarks/Misc/flops-7 | 0.0040 1080 0.0040 * 0.0000 | 6.21 6.14 6.18 * 6.51 | 1.01 1.00 n/a n/a SingleSource/Benchmarks/Misc/flops-8 | 0.0040 1288 0.0040 * 0.0040 | 5.42 3.92 2.36 * 2.36 | 1.38 2.30 n/a n/a SingleSource/Benchmarks/Misc/himenobmtxpa | 0.0520 9672 0.0400 * 0.0480 | 1.41 2.55 2.06 * 2.22 | 0.55 0.68 n/a n/a SingleSource/Benchmarks/Misc/mandel | 0.0040 1084 0.0040 * 0.0040 | 1.50 1.65 1.69 * 2.02 | 0.91 0.89 n/a n/a SingleSource/Benchmarks/Misc/mandel-2 | 0.0040 1052 0.0040 * 0.0040 | 1.21 1.39 1.03 * 1.05 | 0.87 1.17 n/a n/a SingleSource/Benchmarks/Misc/oourafft | 0.0760 13464 0.0520 * 0.0520 | 6.32 8.76 8.12 * 7.27 | 0.72 0.78 n/a n/a SingleSource/Benchmarks/Misc/perlin | 0.0160 4476 0.0160 * 0.0200 | 5.97 6.71 6.85 * 6.86 | 0.89 0.87 n/a n/a SingleSource/Benchmarks/Misc/pi | 0.0040 1152 0.0040 * 0.0040 | 1.00 0.94 1.01 * 0.93 | 1.06 0.99 n/a n/a SingleSource/Benchmarks/Misc/richards_benchmark | 0.0160 5752 0.0160 * 0.0160 | 0.95 1.09 1.16 * 1.32 | 0.87 0.82 n/a n/a SingleSource/Benchmarks/Misc/salsa20 | 0.0160 2700 0.0120 * 0.0120 | 10.50 9.39 9.51 * 9.82 | 1.12 1.10 n/a n/a SingleSource/Benchmarks/Misc/whetstone | 0.0160 3356 0.0200 * 0.0160 | 2.47 2.53 2.50 * 2.52 | 0.98 0.99 n/a n/a SingleSource/Benchmarks/Shootout-C++/ackermann | 0.0360 11116 0.0360 * 0.0280 | 1.86 1.04 1.15 * 1.11 | 1.79 1.62 n/a n/a SingleSource/Benchmarks/Shootout-C++/ary | 0.0440 9192 0.0280 * 0.0280 | 0.12 0.15 0.14 * 0.18 | 0.80 0.86 n/a n/a SingleSource/Benchmarks/Shootout-C++/ary2 | 0.0440 9808 0.0320 * 0.0360 | 0.14 0.14 0.15 * 0.18 | 1.00 0.93 n/a n/a SingleSource/Benchmarks/Shootout-C++/ary3 | 0.0480 11680 0.0400 * 0.0440 | 5.59 5.58 5.99 * 5.75 | 1.00 0.93 n/a n/a SingleSource/Benchmarks/Shootout-C++/except | 0.0360 11384 * * * | 0.28 * * * * | n/a n/a n/a n/a SingleSource/Benchmarks/Shootout-C++/fibo | 0.0240 7952 0.0280 * 0.0280 | 2.58 0.58 0.56 * 0.61 | 4.45 4.61 n/a n/a SingleSource/Benchmarks/Shootout-C++/hash | 0.0760 15128 0.0440 * 0.0440 | 0.79 0.79 0.77 * 0.96 | 1.00 1.03 n/a n/a SingleSource/Benchmarks/Shootout-C++/hash2 | 0.0920 20148 0.0680 * 0.0640 | 4.80 4.78 4.70 * 4.75 | 1.00 1.02 n/a n/a SingleSource/Benchmarks/Shootout-C++/heapsort | 0.0040 3016 0.0040 * 0.0079 | 5.57 6.03 5.45 * 5.39 | 0.92 1.02 n/a n/a SingleSource/Benchmarks/Shootout-C++/hello | 0.0280 8392 0.0240 * 0.0240 | 0.00 0.00 0.00 * 0.03 | - - n/a n/a SingleSource/Benchmarks/Shootout-C++/lists | 0.0480 11472 0.0400 * 0.0360 | 6.08 6.19 6.18 * 6.54 | 0.98 0.98 n/a n/a SingleSource/Benchmarks/Shootout-C++/lists1 | 0.0840 16308 0.0640 * 0.0680 | 0.38 0.38 0.39 * 0.51 | 1.00 0.97 n/a n/a SingleSource/Benchmarks/Shootout-C++/matrix | 0.0440 12240 0.0440 * 0.0440 | 3.41 3.53 3.48 * 3.55 | 0.97 0.98 n/a n/a SingleSource/Benchmarks/Shootout-C++/methcall | 0.0360 10872 0.0239 * 0.0240 | 6.00 6.45 5.72 * 7.85 | 0.93 1.05 n/a n/a SingleSource/Benchmarks/Shootout-C++/moments | 0.0480 9092 0.0240 * 0.0280 | 0.22 0.24 0.23 * 0.28 | 0.92 0.96 n/a n/a SingleSource/Benchmarks/Shootout-C++/nestedloop | 0.0280 8124 0.0280 * 0.0240 | 8.02 0.17 0.17 * 0.21 | 47.18 47.18 n/a n/a SingleSource/Benchmarks/Shootout-C++/objinst | 0.0400 11068 0.0360 * 0.0280 | 6.91 5.64 5.69 * 5.83 | 1.23 1.21 n/a n/a SingleSource/Benchmarks/Shootout-C++/random | 0.0280 7924 0.0240 * 0.0240 | 6.70 4.40 4.70 * 4.68 | 1.52 1.43 n/a n/a SingleSource/Benchmarks/Shootout-C++/reversefile | 0.1040 17488 0.0560 * 0.0400 | 0.00 * 0.01 * 0.04 | n/a - n/a n/a SingleSource/Benchmarks/Shootout-C++/sieve | 0.0680 12648 0.0440 * 0.0360 | 2.23 2.43 2.37 * 2.37 | 0.92 0.94 n/a n/a SingleSource/Benchmarks/Shootout-C++/spellcheck | 0.1000 27360 0.0880 * 0.0440 | 0.00 0.00 0.00 * 0.05 | - - n/a n/a SingleSource/Benchmarks/Shootout-C++/strcat | 0.0480 10628 0.0360 * 0.0320 | 0.15 * 0.10 * 0.17 | n/a 1.50 n/a n/a SingleSource/Benchmarks/Shootout-C++/sumcol | 0.0240 9084 0.0280 * 0.0200 | 0.00 0.00 0.00 * 0.03 | - - n/a n/a SingleSource/Benchmarks/Shootout-C++/wc | 0.0360 11192 0.0360 * 0.0320 | 0.00 0.00 0.00 * 0.04 | - - n/a n/a SingleSource/Benchmarks/Shootout-C++/wordfreq | 0.0800 18464 0.0600 * 0.0200 | 0.00 0.00 0.00 * 0.03 | - - n/a n/a SingleSource/Benchmarks/Shootout/ackermann | 0.0040 1180 0.0080 * 0.0040 | 0.00 0.01 0.01 * 0.03 | - - n/a n/a SingleSource/Benchmarks/Shootout/ary3 | 0.0040 1140 0.0040 * 0.0040 | 5.97 5.42 7.90 * 5.45 | 1.10 0.76 n/a n/a SingleSource/Benchmarks/Shootout/fib2 | 0.0080 964 0.0080 * 0.0040 | 2.60 0.72 0.56 * 0.58 | 3.61 4.64 n/a n/a SingleSource/Benchmarks/Shootout/hash | 0.0160 2948 0.0120 * 0.0120 | 6.60 6.59 6.58 * 5.70 | 1.00 1.00 n/a n/a SingleSource/Benchmarks/Shootout/heapsort | 0.0080 1424 0.0080 * 0.0040 | 5.08 5.98 5.24 * 5.28 | 0.85 0.97 n/a n/a SingleSource/Benchmarks/Shootout/hello | 0.0000 576 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Benchmarks/Shootout/lists | 0.0120 3180 0.0120 * 0.0160 | 5.71 6.02 5.90 * 6.59 | 0.95 0.97 n/a n/a SingleSource/Benchmarks/Shootout/matrix | 0.0200 4080 0.0120 * 0.0120 | 2.68 4.80 4.01 * 4.03 | 0.56 0.67 n/a n/a SingleSource/Benchmarks/Shootout/methcall | 0.0040 1568 0.0080 * 0.0119 | 4.88 4.67 4.66 * 6.56 | 1.04 1.05 n/a n/a SingleSource/Benchmarks/Shootout/nestedloop | 0.0040 1040 0.0080 * 0.0040 | 8.02 0.19 0.17 * 0.18 | 42.21 47.18 n/a n/a SingleSource/Benchmarks/Shootout/objinst | 0.0040 1664 0.0080 * 0.0120 | 5.12 5.18 5.01 * 4.98 | 0.99 1.02 n/a n/a SingleSource/Benchmarks/Shootout/random | 0.0000 840 0.0000 * 0.0040 | 4.42 4.43 4.71 * 4.71 | 1.00 0.94 n/a n/a SingleSource/Benchmarks/Shootout/sieve | 0.0040 1264 0.0040 * 0.0040 | 7.92 7.75 6.41 * 6.56 | 1.02 1.24 n/a n/a SingleSource/Benchmarks/Shootout/strcat | 0.0040 1316 0.0040 * 0.0040 | 0.16 0.16 0.17 * 0.18 | 1.00 0.94 n/a n/a SingleSource/Benchmarks/Stanford/Bubblesort | 0.0080 1420 0.0080 * 0.0080 | 0.05 0.05 0.05 * 0.06 | - - n/a n/a SingleSource/Benchmarks/Stanford/IntMM | 0.0080 1472 0.0080 * 0.0080 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Benchmarks/Stanford/Oscar | 0.0120 3008 0.0080 * 0.0120 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Benchmarks/Stanford/Perm | 0.0080 3124 0.0160 * 0.0160 | 0.02 0.04 0.04 * 0.05 | - - n/a n/a SingleSource/Benchmarks/Stanford/Puzzle | 0.0920 4720 0.0160 * 0.0200 | 0.17 0.22 0.18 * 0.22 | 0.77 0.94 n/a n/a SingleSource/Benchmarks/Stanford/Queens | 0.0080 2232 0.0120 * 0.0120 | 0.03 0.04 0.04 * 0.06 | - - n/a n/a SingleSource/Benchmarks/Stanford/Quicksort | 0.0080 1688 0.0040 * 0.0080 | 0.04 0.04 0.04 * 0.05 | - - n/a n/a SingleSource/Benchmarks/Stanford/RealMM | 0.0120 1504 0.0120 * 0.0080 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Benchmarks/Stanford/Towers | 0.0080 2432 0.0120 * 0.0080 | 0.02 0.02 0.02 * 0.03 | - - n/a n/a SingleSource/Benchmarks/Stanford/Treesort | 0.0120 2248 0.0120 * 0.0120 | 0.07 0.09 0.09 * 0.10 | - - n/a n/a SingleSource/Regression/C++/2003-05-14-array-init | 0.0000 584 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/2003-05-14-expr_stmt | 0.0000 484 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/2003-06-08-BaseType | 0.0000 496 0.0000 * 0.0000 | 0.01 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/2003-06-08-VirtualFunctions | 0.0040 620 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/2003-06-13-Crasher | 0.0000 456 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C++/2003-08-20-EnumSizeProblem | 0.0040 456 0.0000 * 0.0000 | 0.01 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C++/2003-09-29-NonPODsByValue | 0.0000 576 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/2008-01-29-ParamAliasesReturn | 0.0040 604 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/BuiltinTypeInfo | 0.0000 728 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/EH/ConditionalExpr | 0.0000 712 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/EH/ctor_dtor_count | 0.0000 1048 * * * | 0.00 * * * * | n/a n/a n/a n/a SingleSource/Regression/C++/EH/ctor_dtor_count-2 | 0.0000 1592 * * * | 0.01 * * * * | n/a n/a n/a n/a SingleSource/Regression/C++/EH/dead_try_block | 0.0040 568 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C++/EH/exception_spec_test | 0.0040 2464 * * * | 0.00 * * * * | n/a n/a n/a n/a SingleSource/Regression/C++/EH/function_try_block | 0.0040 2452 * * * | 0.00 * * * * | n/a n/a n/a n/a SingleSource/Regression/C++/EH/simple_rethrow | 0.0040 1444 * * * | 0.00 * * * * | n/a n/a n/a n/a SingleSource/Regression/C++/EH/simple_throw | 0.0000 956 * * * | 0.00 * * * * | n/a n/a n/a n/a SingleSource/Regression/C++/EH/throw_rethrow_test | 0.0040 1792 * * * | 0.00 * * * * | n/a n/a n/a n/a SingleSource/Regression/C++/global_ctor | 0.0040 1344 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/global_type | 0.0000 456 0.0000 * 0.0000 | 0.00 0.01 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/ofstream_ctor | 0.0240 9224 0.0200 * 0.0240 | 0.01 0.00 0.00 * 0.03 | - - n/a n/a SingleSource/Regression/C++/pointer_member | 0.0000 660 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/pointer_method | 0.0000 664 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/short_circuit_dtor | 0.0000 644 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/2003-05-14-initialize-string | 0.0000 680 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/2003-05-21-BitfieldHandling | 0.0000 1152 0.0040 * 0.0040 | 0.00 * 0.00 * 0.00 | n/a - n/a n/a SingleSource/Regression/C/2003-05-21-UnionBitfields | 0.0040 580 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/2003-05-21-UnionTest | 0.0000 580 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/2003-05-22-LocalTypeTest | 0.0000 624 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/2003-05-22-VarSizeArray | 0.0000 580 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/2003-05-23-TransparentUnion | 0.0040 576 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/2003-06-16-InvalidInitializer | 0.0000 456 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/2003-06-16-VolatileError | 0.0000 456 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/2003-10-12-GlobalVarInitializers | 0.0000 664 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/2004-02-03-AggregateCopy | 0.0040 588 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a SingleSource/Regression/C/2004-03-15-IndirectGoto | 0.0000 860 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/2004-08-12-InlinerAndAllocas | 0.0040 824 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/2005-05-06-LongLongSignedShift | 0.0040 608 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/2008-01-07-LongDouble | 0.0000 596 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/ConstructorDestructorAttributes | 0.0000 760 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/DuffsDevice | 0.0040 1084 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/PR1386 | 0.0000 588 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/PR491 | 0.0000 456 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/PR640 | 0.0080 2076 0.0080 * 0.0080 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/badidx | 0.0040 1004 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/bigstack | 0.0080 4116 0.0120 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/callargs | 0.0040 928 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/casts | 0.0040 3596 0.0160 * 0.0120 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a SingleSource/Regression/C/globalrefs | 0.0000 932 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/matrixTranspose | 0.0080 1344 0.0080 * 0.0080 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/pointer_arithmetic | 0.0000 488 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/sumarray | 0.0000 948 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/sumarray2d | 0.0040 1080 0.0040 * 0.0080 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/sumarraymalloc | 0.0040 1164 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/test_indvars | 0.0080 1436 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/testtrace | 0.0040 1136 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-04-17-PrintfChar | 0.0000 576 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-05-02-ArgumentTest | 0.0040 624 0.0000 * 0.0040 | 0.01 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-05-02-CastTest | 0.0040 1504 0.0080 * 0.0080 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2002-05-02-CastTest1 | 0.0000 608 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-05-02-CastTest2 | 0.0000 728 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-05-02-CastTest3 | 0.0000 684 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-05-02-ManyArguments | 0.0040 696 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-05-03-NotTest | 0.0040 664 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-05-19-DivTest | 0.0040 688 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-08-02-CastTest | 0.0000 584 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-08-02-CastTest2 | 0.0000 608 0.0040 * 0.0000 | 0.00 0.01 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-08-19-CodegenBug | 0.0000 568 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2002-10-09-ArrayResolution | 0.0000 644 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2002-10-12-StructureArgs | 0.0000 636 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2002-10-12-StructureArgsSimple | 0.0040 604 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-10-13-BadLoad | 0.0000 572 0.0000 * 0.0000 | 0.00 0.01 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-12-13-MishaTest | 0.0040 584 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-04-22-Switch | 0.0040 736 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-05-02-DependentPHI | 0.0040 816 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2003-05-07-VarArgs | 0.0080 2828 0.0120 * 0.0120 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a SingleSource/UnitTests/2003-05-12-MinIntProblem | 0.0000 568 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-05-14-AtExit | 0.0040 688 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-05-26-Shorts | 0.0040 2012 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-05-31-CastToBool | 0.0000 916 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2003-05-31-LongShifts | 0.0040 920 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-07-06-IntOverflow | 0.0000 812 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2003-07-08-BitOpsTest | 0.0000 592 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-07-09-LoadShorts | 0.0000 1520 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2003-07-09-SignedArgs | 0.0080 1672 0.0080 * 0.0080 | 0.00 0.00 0.01 * 0.01 | - - n/a n/a SingleSource/UnitTests/2003-07-10-SignConversions | 0.0000 792 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-08-05-CastFPToUint | 0.0040 720 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-08-11-VaListArg | 0.0080 3108 0.0160 * 0.0120 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2003-08-20-FoldBug | 0.0000 568 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2003-09-18-BitFieldTest | 0.0040 612 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-10-13-SwitchTest | 0.0000 652 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-10-29-ScalarReplBug | 0.0000 580 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2004-02-02-NegativeZero | 0.0000 640 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2004-06-20-StaticBitfieldInit | 0.0000 684 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2004-11-28-GlobalBoolLayout | 0.0000 880 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls | 0.0160 2144 0.0080 * 0.0120 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a SingleSource/UnitTests/2005-05-12-Int64ToFP | 0.0040 684 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2005-05-13-SDivTwo | 0.0040 648 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2005-07-15-Bitfield-ABI | 0.0040 596 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2005-07-17-INT-To-FP | 0.0040 928 0.0080 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2005-11-29-LongSwitch | 0.0040 584 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2006-01-23-UnionInit | 0.0040 2124 0.0040 * 0.0040 | 0.00 * 0.00 * 0.01 | n/a - n/a n/a SingleSource/UnitTests/2006-01-29-SimpleIndirectCall | 0.0000 796 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2006-02-04-DivRem | 0.0000 672 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2006-12-01-float_varg | 0.0040 660 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2006-12-04-DynAllocAndRestore | 0.0000 480 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2006-12-07-Compare64BitConstant | 0.0000 592 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2006-12-11-LoadConstants | 0.0280 2704 0.0360 * 0.0320 | 0.00 0.00 0.00 * 0.03 | - - n/a n/a SingleSource/UnitTests/2007-01-04-KNR-Args | 0.0040 668 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2007-03-02-VaCopy | 0.0040 944 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2007-04-10-BitfieldTest | 0.0000 604 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2007-04-25-weak | 0.0000 512 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2008-04-18-LoopBug | 0.0040 1052 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2008-04-20-LoopBug2 | 0.0040 1068 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2008-07-13-InlineSetjmp | 0.0000 832 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2009-04-16-BitfieldInitialization | 0.0040 1888 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/AtomicOps | 0.0040 812 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/FloatPrecision | 0.0000 616 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/SignlessTypes/cast | 0.0080 2560 0.0280 * 0.0280 | 0.01 0.02 0.02 * 0.05 | - - n/a n/a SingleSource/UnitTests/SignlessTypes/cast-bug | 0.0040 628 0.0000 * 0.0040 | 0.01 0.00 0.00 * 0.02 | - - n/a n/a SingleSource/UnitTests/SignlessTypes/cast2 | 0.0000 592 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/SignlessTypes/ccc | 0.0000 760 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/SignlessTypes/div | 0.0040 1340 0.0040 * 0.0040 | 0.00 0.00 0.01 * 0.01 | - - n/a n/a SingleSource/UnitTests/SignlessTypes/factor | 0.0080 1008 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/SignlessTypes/rem | 0.0320 9136 0.0880 * 0.0840 | 0.00 0.00 0.01 * 0.10 | - - n/a n/a SingleSource/UnitTests/SignlessTypes/shr | 0.0000 1448 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/StructModifyTest | 0.0000 688 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/TestLoop | 0.0040 680 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/Threads/tls | 0.0000 876 0.0040 * * | 0.00 0.00 0.00 * * | - - n/a n/a SingleSource/UnitTests/Vector/SSE/sse.expandfft | 0.0320 6336 0.0240 * 0.0240 | 0.68 1.43 0.58 * 0.61 | 0.48 1.17 n/a n/a SingleSource/UnitTests/Vector/SSE/sse.isamax | 0.0120 3156 0.0080 * 0.0120 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/Vector/SSE/sse.shift | 0.0040 828 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/Vector/SSE/sse.stepfft | 0.0480 9860 0.0440 * 0.0440 | 0.68 1.37 0.64 * 0.68 | 0.50 1.06 n/a n/a SingleSource/UnitTests/Vector/build | 0.0000 804 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/Vector/build2 | 0.0000 1144 0.0040 * 0.0040 | 1.54 1.56 2.03 * 2.05 | 0.99 0.76 n/a n/a SingleSource/UnitTests/Vector/divides | 0.0000 656 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/Vector/multiplies | 0.0120 1652 0.0120 * 0.0120 | 1.26 1.24 3.31 * 3.25 | 1.02 0.38 n/a n/a SingleSource/UnitTests/Vector/simple | 0.0040 1216 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/Vector/sumarray | 0.0000 940 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/Vector/sumarray-dbl | 0.0040 1004 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/printargs | 0.0000 760 0.0040 * 0.0000 | 0.01 0.00 0.00 * 0.00 | - - n/a n/a Post-change: =========== Program | GCCAS Bytecode LLC compile LLC-BETA compile JIT codegen | GCC CBE LLC LLC-BETA JIT | GCC/CBE GCC/LLC GCC/LLC-BETA LLC/LLC-BETA MultiSource/Applications/Burg/burg | 0.4440 109848 0.8840 * 0.8680 | 0.00 0.00 0.00 * 0.92 | - - n/a n/a MultiSource/Applications/ClamAV/clamscan | 5.1803 1318528 6.8444 * 3.9642 | 0.18 0.20 0.20 * 4.36 | 0.90 0.90 n/a n/a MultiSource/Applications/JM/ldecod/ldecod | 2.7441 661960 2.5761 * 2.0801 | 0.06 0.08 0.07 * 2.29 | - - n/a n/a MultiSource/Applications/JM/lencod/lencod | 8.0565 1442696 6.6084 * 5.7203 | 8.47 8.71 8.33 * 14.82 | 0.97 1.02 n/a n/a MultiSource/Applications/SIBsim4/SIBsim4 | 0.4280 84528 0.4360 * 0.4480 | 4.30 * 4.73 * 5.39 | n/a 0.91 n/a n/a MultiSource/Applications/SPASS/SPASS | 6.2723 1594748 5.5923 * 4.0522 | 12.77 12.03 12.42 * 17.52 | 1.06 1.03 n/a n/a MultiSource/Applications/aha/aha | 0.0240 7104 0.0320 * 0.0280 | 2.23 2.85 3.00 * 3.11 | 0.78 0.74 n/a n/a MultiSource/Applications/d/make_dparser | 1.0760 299996 0.9760 * 0.8080 | 0.03 * 0.03 * 0.93 | n/a - n/a n/a MultiSource/Applications/hbd/hbd | 0.2480 82120 0.4080 * 0.3360 | 0.00 0.00 0.00 * 0.38 | - - n/a n/a MultiSource/Applications/hexxagon/hexxagon | 0.1920 49820 0.2040 * 0.1960 | 12.04 9.00 9.92 * 9.66 | 1.34 1.21 n/a n/a MultiSource/Applications/kimwitu++/kc | 5.3083 1725192 * * * | 0.00 * * * * | n/a n/a n/a n/a MultiSource/Applications/lambda-0.1.3/lambda | 0.1960 67120 0.3360 * 0.2560 | 6.14 5.56 5.74 * 6.83 | 1.10 1.07 n/a n/a MultiSource/Applications/lemon/lemon | 0.3360 104052 0.5560 * 0.0080 | 0.09 0.06 0.06 * 113.61 | - - n/a n/a MultiSource/Applications/lua/lua | 1.5240 557040 2.2481 * 1.6441 | 28.54 * 31.44 * 33.39 | n/a 0.91 n/a n/a MultiSource/Applications/minisat/minisat | 0.2120 45840 0.2040 * * | 12.74 * 12.36 * * | n/a 1.03 n/a n/a MultiSource/Applications/obsequi/Obsequi | 0.3560 59808 0.2800 * 0.2840 | 2.72 * 2.76 * 3.18 | n/a 0.99 n/a n/a MultiSource/Applications/oggenc/oggenc | 1.5600 803888 1.1920 * 0.9680 | 0.17 * 0.17 * 1.26 | n/a 1.00 n/a n/a MultiSource/Applications/sgefa/sgefa | 0.0800 16476 0.0840 * 0.0840 | 0.79 0.83 0.84 * 0.97 | 0.95 0.94 n/a n/a MultiSource/Applications/siod/siod | 0.7200 344048 1.8121 * 0.8000 | 3.69 3.87 3.71 * 4.73 | 0.95 0.99 n/a n/a MultiSource/Applications/spiff/spiff | 0.1680 50964 0.2480 * * | 1.09 1.10 1.14 * * | 0.99 0.96 n/a n/a MultiSource/Applications/sqlite3/sqlite3 | 3.9202 1133884 5.1443 * 3.6602 | 4.54 * 5.28 * 9.58 | n/a 0.86 n/a n/a MultiSource/Applications/treecc/treecc | 0.7240 292592 1.2040 * 0.3400 | 0.00 0.00 0.00 * 0.37 | - - n/a n/a MultiSource/Applications/viterbi/viterbi | 0.0320 5576 0.0240 * 0.0280 | 12.27 18.49 12.38 * 12.34 | 0.66 0.99 n/a n/a MultiSource/Benchmarks/ASCI_Purple/SMG2000/smg2000 | 3.1521 463676 2.5521 * 1.9161 | 7.48 9.09 7.55 * 10.22 | 0.82 0.99 n/a n/a MultiSource/Benchmarks/ASC_Sequoia/AMGmk/AMGmk | 0.0960 13992 0.0680 * 0.0600 | 22.98 31.13 22.41 * 22.35 | 0.74 1.03 n/a n/a MultiSource/Benchmarks/ASC_Sequoia/CrystalMk/CrystalMk | 0.0400 8248 0.0280 * 0.0280 | 12.13 12.64 11.96 * 12.19 | 0.96 1.01 n/a n/a MultiSource/Benchmarks/ASC_Sequoia/IRSmk/IRSmk | 0.0240 5592 0.0240 * 0.0240 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a MultiSource/Benchmarks/BitBench/drop3/drop3 | 0.0120 3588 0.0120 * 0.0160 | 0.50 0.71 0.47 * 0.50 | 0.70 1.06 n/a n/a MultiSource/Benchmarks/BitBench/five11/five11 | 0.0120 2724 0.0080 * 0.0080 | 2.47 2.49 2.43 * 2.43 | 0.99 1.02 n/a n/a MultiSource/Benchmarks/BitBench/uudecode/uudecode | 0.0040 2864 0.0120 * 0.0080 | 0.12 0.14 0.13 * 0.15 | 0.86 0.92 n/a n/a MultiSource/Benchmarks/BitBench/uuencode/uuencode | 0.0120 2728 0.0120 * 0.0120 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a MultiSource/Benchmarks/Fhourstones-3.1/fhourstones3.1 | 0.0360 8072 0.0360 * 0.0360 | 2.03 1.93 1.85 * 1.91 | 1.05 1.10 n/a n/a MultiSource/Benchmarks/Fhourstones/fhourstones | 0.0600 10820 0.0440 * 0.0520 | 1.83 1.85 1.82 * 1.99 | 0.99 1.01 n/a n/a MultiSource/Benchmarks/FreeBench/analyzer/analyzer | 0.0440 10116 0.0480 * 0.0440 | 0.10 0.13 0.11 * 0.16 | 0.77 0.91 n/a n/a MultiSource/Benchmarks/FreeBench/distray/distray | 0.0240 6944 0.0280 * 0.0320 | 0.25 0.30 0.25 * 0.29 | 0.83 1.00 n/a n/a MultiSource/Benchmarks/FreeBench/fourinarow/fourinarow | 0.0680 18880 0.0800 * 0.0720 | 0.34 0.37 0.37 * 0.46 | 0.92 0.92 n/a n/a MultiSource/Benchmarks/FreeBench/mason/mason | 0.0160 6144 0.0200 * 0.0200 | 0.40 0.24 0.25 * 0.28 | 1.67 1.60 n/a n/a MultiSource/Benchmarks/FreeBench/neural/neural | 0.0440 8772 0.0440 * 0.0480 | 0.26 0.31 0.23 * 0.29 | 0.84 1.13 n/a n/a MultiSource/Benchmarks/FreeBench/pcompress2/pcompress2 | 0.0560 11040 0.0480 * 0.0520 | 0.29 0.30 0.26 * 0.33 | 0.97 1.12 n/a n/a MultiSource/Benchmarks/FreeBench/pifft/pifft | 0.2600 58904 0.2800 * 0.2840 | 0.13 0.14 0.15 * 0.45 | 0.93 0.87 n/a n/a MultiSource/Benchmarks/MallocBench/cfrac/cfrac | 0.2160 92136 0.3000 * 0.2800 | 1.78 * 1.70 * 1.96 | n/a 1.05 n/a n/a MultiSource/Benchmarks/MallocBench/espresso/espresso | 1.4040 407284 1.9841 * 1.3600 | 0.58 0.58 0.55 * 2.00 | 1.00 1.05 n/a n/a MultiSource/Benchmarks/MallocBench/gs/gs | 1.1200 376444 1.3960 * 0.6200 | 0.04 * 0.04 * 0.72 | n/a - n/a n/a MultiSource/Benchmarks/McCat/01-qbsort/qbsort | 0.0120 3456 0.0160 * 0.0200 | 0.05 0.05 0.05 * 0.08 | - - n/a n/a MultiSource/Benchmarks/McCat/03-testtrie/testtrie | 0.0160 3780 0.0200 * 0.0200 | 0.01 0.00 0.01 * 0.03 | - - n/a n/a MultiSource/Benchmarks/McCat/04-bisect/bisect | 0.0120 3984 0.0160 * 0.0200 | 0.17 0.25 0.19 * 0.21 | 0.68 0.89 n/a n/a MultiSource/Benchmarks/McCat/05-eks/eks | 0.0880 7532 0.0360 * 0.0360 | 0.01 0.00 0.00 * 0.04 | - - n/a n/a MultiSource/Benchmarks/McCat/08-main/main | 0.0680 12004 0.0320 * 0.0360 | 0.05 0.03 0.02 * 0.06 | - - n/a n/a MultiSource/Benchmarks/McCat/09-vor/vor | 0.0800 23092 0.0920 * 0.0920 | 0.13 0.14 0.13 * 0.25 | 0.93 1.00 n/a n/a MultiSource/Benchmarks/McCat/12-IOtest/iotest | 0.0120 2576 0.0120 * 0.0120 | 0.36 0.24 0.24 * 0.27 | 1.50 1.50 n/a n/a MultiSource/Benchmarks/McCat/15-trie/trie | 0.0040 3216 0.0160 * 0.0200 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a MultiSource/Benchmarks/McCat/17-bintr/bintr | 0.0120 3668 0.0160 * 0.0240 | 0.10 0.10 0.10 * 0.14 | 1.00 1.00 n/a n/a MultiSource/Benchmarks/McCat/18-imp/imp | 0.0720 21096 0.0920 * 0.1040 | 0.08 0.08 0.10 * 0.22 | - - n/a n/a MultiSource/Benchmarks/MiBench/automotive-basicmath/automotive-basicmath | 0.0160 4808 0.0200 * 0.0280 | 0.55 0.57 0.53 * 0.60 | 0.96 1.04 n/a n/a MultiSource/Benchmarks/MiBench/automotive-bitcount/automotive-bitcount | 0.0160 3532 0.0120 * 0.0080 | 0.12 0.16 0.14 * 0.15 | 0.75 0.86 n/a n/a MultiSource/Benchmarks/MiBench/automotive-susan/automotive-susan | 0.2800 64100 0.2800 * 0.2680 | 0.05 0.08 0.06 * 0.35 | - - n/a n/a MultiSource/Benchmarks/MiBench/consumer-jpeg/consumer-jpeg | 1.2880 201192 0.8120 * 0.4280 | 0.01 0.00 0.00 * 0.48 | - - n/a n/a MultiSource/Benchmarks/MiBench/consumer-lame/consumer-lame | 1.3840 331160 1.1440 * 0.9400 | 0.35 * 0.33 * 1.34 | n/a 1.06 n/a n/a MultiSource/Benchmarks/MiBench/consumer-typeset/consumer-typeset | 7.5284 1392340 5.9403 * 5.1323 | 0.21 * 0.21 * 5.60 | n/a 1.00 n/a n/a MultiSource/Benchmarks/MiBench/network-dijkstra/network-dijkstra | 0.0120 3456 0.0160 * 0.0200 | 0.05 0.05 0.05 * 0.07 | - - n/a n/a MultiSource/Benchmarks/MiBench/network-patricia/network-patricia | 0.0280 4268 0.0240 * 0.0240 | 0.16 0.17 0.16 * 0.20 | 0.94 1.00 n/a n/a MultiSource/Benchmarks/MiBench/office-ispell/office-ispell | 0.5080 128824 0.6520 * 0.2000 | 0.00 0.00 0.00 * 0.20 | - - n/a n/a MultiSource/Benchmarks/MiBench/office-stringsearch/office-stringsearch | 0.0200 13212 0.0080 * 0.0080 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a MultiSource/Benchmarks/MiBench/security-blowfish/security-blowfish | 0.0960 31024 0.0920 * 0.0480 | 0.00 0.00 0.00 * 0.05 | - - n/a n/a MultiSource/Benchmarks/MiBench/security-rijndael/security-rijndael | 0.1280 51332 0.0800 * 0.0640 | 0.04 0.05 0.07 * 0.14 | - - n/a n/a MultiSource/Benchmarks/MiBench/security-sha/security-sha | 0.0160 4764 0.0160 * 0.0160 | 0.01 0.03 0.02 * 0.05 | - - n/a n/a MultiSource/Benchmarks/MiBench/telecomm-CRC32/telecomm-CRC32 | 0.0040 3180 0.0080 * 0.0040 | 0.33 0.29 0.31 * 0.30 | 1.14 1.06 n/a n/a MultiSource/Benchmarks/MiBench/telecomm-FFT/telecomm-fft | 0.0200 4852 0.0200 * 0.0240 | 0.08 0.06 0.06 * 0.09 | - - n/a n/a MultiSource/Benchmarks/MiBench/telecomm-adpcm/telecomm-adpcm | 0.0080 2192 0.0040 * 0.0080 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a MultiSource/Benchmarks/MiBench/telecomm-gsm/telecomm-gsm | 0.3680 73804 0.2160 * 0.1480 | 0.22 0.23 0.22 * 0.38 | 0.96 1.00 n/a n/a MultiSource/Benchmarks/NPB-serial/is/is | 0.0160 5108 0.0160 * 0.3240 | 10.75 11.07 10.63 * 11.42 | 0.97 1.01 n/a n/a MultiSource/Benchmarks/Olden/bh/bh | 0.0960 15196 0.0760 * 0.0760 | 2.51 * 2.16 * 2.26 | n/a 1.16 n/a n/a MultiSource/Benchmarks/Olden/bisort/bisort | 0.0080 3672 0.0160 * 0.0240 | 1.05 1.12 1.08 * 1.12 | 0.94 0.97 n/a n/a MultiSource/Benchmarks/Olden/em3d/em3d | 0.0280 6424 0.0280 * 0.0320 | 3.50 4.86 3.42 * 3.43 | 0.72 1.02 n/a n/a MultiSource/Benchmarks/Olden/health/health | 0.0280 7576 0.0280 * 0.0280 | 0.61 * 0.62 * 0.63 | n/a 0.98 n/a n/a MultiSource/Benchmarks/Olden/mst/mst | 0.0240 4176 0.0160 * 0.0240 | 0.19 0.19 0.20 * 0.34 | 1.00 0.95 n/a n/a MultiSource/Benchmarks/Olden/perimeter/perimeter | 0.0200 12280 0.0720 * 0.0640 | 0.38 0.36 0.36 * 0.42 | 1.06 1.06 n/a n/a MultiSource/Benchmarks/Olden/power/power | 0.0320 8572 0.0280 * 0.0320 | 3.38 3.38 3.08 * 3.10 | 1.00 1.10 n/a n/a MultiSource/Benchmarks/Olden/treeadd/treeadd | 0.0000 1812 0.0080 * 0.0080 | 7.07 0.39 0.38 * 0.40 | 18.13 18.61 n/a n/a MultiSource/Benchmarks/Olden/tsp/tsp | 0.0200 6984 0.0280 * 0.0200 | 2.90 2.92 2.67 * 2.62 | 0.99 1.09 n/a n/a MultiSource/Benchmarks/Olden/voronoi/voronoi | 0.0560 13420 0.0480 * 0.0520 | 0.46 0.48 0.45 * 0.52 | 0.96 1.02 n/a n/a MultiSource/Benchmarks/OptimizerEval/optimizer-eval | 0.0680 28884 0.1080 * 0.1800 | 114.14 118.46 115.23 * 105.24 | 0.96 0.99 n/a n/a MultiSource/Benchmarks/PAQ8p/paq8p | 0.7960 194020 * * * | 0.00 * * * * | n/a n/a n/a n/a MultiSource/Benchmarks/Prolangs-C++/NP/np | 0.0040 1184 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/city/city | 0.1000 23800 0.0680 * 0.0560 | 0.01 0.01 0.00 * 0.07 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/deriv1/deriv1 | 0.0360 12984 0.0400 * 0.0320 | 0.00 0.00 0.00 * 0.04 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/deriv2/deriv2 | 0.0400 14516 0.0520 * 0.0360 | 0.00 0.00 0.00 * 0.05 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/employ/employ | 0.0760 21948 0.0840 * 0.0640 | 0.01 0.00 0.00 * 0.08 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/family/family | 0.0080 3392 0.0160 * 0.0160 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/fsm/fsm | 0.0160 1880 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/garage/garage | 0.0200 7424 0.0200 * 0.0240 | 0.00 0.00 0.00 * 0.03 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/life/life | 0.0240 6304 0.0280 * 0.0200 | 1.43 1.42 1.46 * 1.49 | 1.01 0.98 n/a n/a MultiSource/Benchmarks/Prolangs-C++/objects/objects | 0.0280 9860 0.0360 * 0.0120 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/ocean/ocean | 0.0400 8856 0.0400 * 0.0280 | 0.14 0.15 0.15 * 0.19 | 0.93 0.93 n/a n/a MultiSource/Benchmarks/Prolangs-C++/office/office | 0.0480 12968 0.0400 * 0.0320 | 0.00 0.00 0.00 * 0.04 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/primes/primes | 0.0080 1592 0.0080 * 0.0040 | 0.46 0.46 0.47 * 0.48 | 1.00 0.98 n/a n/a MultiSource/Benchmarks/Prolangs-C++/shapes/shapes | 0.0400 16060 0.0480 * 0.0400 | 0.00 0.00 0.00 * 0.06 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/simul/simul | 0.0280 4164 0.0080 * 0.0080 | 0.01 0.01 0.00 * 0.01 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/trees/trees | 0.0360 11272 0.0480 * 0.0440 | 0.00 0.00 0.00 * 0.04 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C++/vcirc/vcirc | 0.0040 1804 0.0000 * 0.0080 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/TimberWolfMC/timberwolfmc | 1.8121 545152 2.7481 * 0.5480 | 0.00 0.00 0.00 * 0.58 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/agrep/agrep | 0.3400 90404 0.4320 * 0.1560 | 0.00 0.00 0.00 * 0.18 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/allroots/allroots | 0.0160 3512 0.0160 * 0.0200 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/archie-client/archie | 0.1680 47672 0.1840 * 0.0360 | 0.00 0.00 0.00 * 0.04 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/assembler/assembler | 0.1560 61488 0.3320 * 0.2600 | 0.00 0.00 0.00 * 0.28 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/bison/mybison | 0.3160 108708 0.9040 * 0.7640 | 0.00 0.00 0.00 * 0.80 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/cdecl/cdecl | 0.1040 48928 0.2880 * 0.3040 | 0.00 0.00 0.00 * 0.32 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/compiler/compiler | 0.0920 36336 0.2160 * 0.0400 | 0.00 0.00 0.00 * 0.05 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/fixoutput/fixoutput | 0.0120 5980 0.0360 * 0.0280 | 0.00 0.00 0.00 * 0.03 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/football/football | 0.3480 85220 0.4520 * 0.0280 | 0.00 0.00 0.00 * 0.04 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/gnugo/gnugo | 0.1040 35268 0.1680 * 0.2080 | 0.09 0.06 0.06 * 0.30 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/loader/loader | 0.0800 28112 0.1200 * 0.0920 | 0.00 0.00 0.00 * 0.09 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/plot2fig/plot2fig | 0.0440 14648 0.0800 * 0.0680 | 0.00 0.00 0.00 * 0.08 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/simulator/simulator | 0.2240 64272 0.2680 * 0.0360 | 0.00 0.00 0.00 * 0.05 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/unix-smail/unix-smail | 0.1040 39464 0.2280 * 0.1720 | 0.00 0.00 0.00 * 0.18 | - - n/a n/a MultiSource/Benchmarks/Prolangs-C/unix-tbl/unix-tbl | 0.3000 75600 0.3880 * 0.0160 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a MultiSource/Benchmarks/Ptrdist/anagram/anagram | 0.0160 7644 0.0280 * 0.0320 | 1.33 1.18 1.32 * 1.38 | 1.13 1.01 n/a n/a MultiSource/Benchmarks/Ptrdist/bc/bc | 0.3440 125596 0.6040 * 0.5960 | 0.67 0.67 0.68 * 1.30 | 1.00 0.99 n/a n/a MultiSource/Benchmarks/Ptrdist/ft/ft | 0.0400 7152 0.0280 * 0.0320 | 1.57 1.66 1.57 * 1.71 | 0.95 1.00 n/a n/a MultiSource/Benchmarks/Ptrdist/ks/ks | 0.0320 11892 0.0480 * 0.0520 | 2.13 2.23 2.34 * 2.29 | 0.96 0.91 n/a n/a MultiSource/Benchmarks/Ptrdist/yacr2/yacr2 | 0.1760 48272 0.2560 * 0.2640 | 0.90 0.94 1.32 * 1.59 | 0.96 0.68 n/a n/a MultiSource/Benchmarks/SciMark2-C/scimark2 | 0.0840 15428 0.0720 * 0.0760 | 27.89 * 28.38 * 28.59 | n/a 0.98 n/a n/a MultiSource/Benchmarks/Trimaran/enc-3des/enc-3des | 0.1600 21512 0.0880 * 0.0920 | 2.32 2.20 2.21 * 2.32 | 1.05 1.05 n/a n/a MultiSource/Benchmarks/Trimaran/enc-md5/enc-md5 | 0.0560 7660 0.0400 * 0.0400 | 2.34 2.18 2.10 * 2.15 | 1.07 1.11 n/a n/a MultiSource/Benchmarks/Trimaran/enc-pc1/enc-pc1 | 0.0200 3900 0.0120 * 0.0160 | 0.79 0.50 0.82 * 0.89 | 1.58 0.96 n/a n/a MultiSource/Benchmarks/Trimaran/enc-rc4/enc-rc4 | 0.0160 2956 0.0120 * 0.0120 | 1.28 1.52 1.21 * 1.20 | 0.84 1.06 n/a n/a MultiSource/Benchmarks/Trimaran/netbench-crc/netbench-crc | 0.0080 32656 0.0080 * 0.0120 | 1.11 1.09 1.07 * 1.09 | 1.02 1.04 n/a n/a MultiSource/Benchmarks/Trimaran/netbench-url/netbench-url | 0.0239 40864 0.0400 * 0.0400 | 2.95 3.27 4.05 * 4.67 | 0.90 0.73 n/a n/a MultiSource/Benchmarks/VersaBench/8b10b/8b10b | 0.0040 2168 0.0040 * 0.0080 | 9.09 7.13 5.20 * 5.12 | 1.27 1.75 n/a n/a MultiSource/Benchmarks/VersaBench/beamformer/beamformer | 0.0280 5748 0.0200 * 0.0240 | 1.93 2.55 2.22 * 2.25 | 0.76 0.87 n/a n/a MultiSource/Benchmarks/VersaBench/bmm/bmm | 0.0200 2924 0.0160 * 0.0240 | 2.54 2.71 2.47 * 2.52 | 0.94 1.03 n/a n/a MultiSource/Benchmarks/VersaBench/dbms/dbms | 0.1000 36324 0.2000 * 0.1920 | 1.94 2.22 1.86 * 2.12 | 0.87 1.04 n/a n/a MultiSource/Benchmarks/VersaBench/ecbdes/ecbdes | 0.0680 9772 0.0160 * 0.0160 | 3.01 2.87 2.87 * 2.88 | 1.05 1.05 n/a n/a MultiSource/Benchmarks/llubenchmark/llu | 0.0160 3712 0.0160 * 0.0160 | 13.19 14.44 13.20 * 13.79 | 0.91 1.00 n/a n/a MultiSource/Benchmarks/mafft/pairlocalalign | 3.8322 341756 1.7401 * * | 0.00 0.00 0.00 * 0.00 | - - n/a n/a MultiSource/Benchmarks/mediabench/adpcm/rawcaudio/rawcaudio | 0.0120 2324 0.0080 * 0.0080 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a MultiSource/Benchmarks/mediabench/adpcm/rawdaudio/rawdaudio | 0.0080 2192 0.0080 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a MultiSource/Benchmarks/mediabench/g721/g721encode/encode | 0.0720 13112 0.0480 * 0.0360 | 0.06 0.06 0.08 * 0.12 | - - n/a n/a MultiSource/Benchmarks/mediabench/gsm/toast/toast | 0.3440 73804 0.2200 * 0.1400 | 0.02 0.02 0.02 * 0.19 | - - n/a n/a MultiSource/Benchmarks/mediabench/jpeg/jpeg-6a/cjpeg | 1.1800 170484 0.6280 * 0.3920 | 0.00 0.00 0.00 * 0.45 | - - n/a n/a MultiSource/Benchmarks/mediabench/mpeg2/mpeg2dec/mpeg2decode | 0.4560 101604 0.4680 * 0.3800 | 0.02 0.02 0.02 * 0.43 | - - n/a n/a MultiSource/Benchmarks/sim/sim | 0.0760 28120 0.1440 * 0.1400 | 5.51 5.67 5.39 * 5.63 | 0.97 1.02 n/a n/a MultiSource/Benchmarks/tramp3d-v4/tramp3d-v4 | 7.8204 1966488 4.7722 * 4.4002 | 0.72 * 0.79 * 5.52 | n/a 0.91 n/a n/a SingleSource/Benchmarks/Adobe-C++/functionobjects | 0.1760 35452 0.1320 * 0.1240 | 4.06 5.76 3.57 * 3.77 | 0.70 1.14 n/a n/a SingleSource/Benchmarks/Adobe-C++/loop_unroll | 0.8840 318836 1.4480 * 1.5320 | 1.85 1.93 1.84 * 3.46 | 0.96 1.01 n/a n/a SingleSource/Benchmarks/Adobe-C++/simple_types_constant_folding | 0.8240 185368 2.2161 * 2.1681 | 1.45 2.52 1.39 * 3.67 | 0.58 1.04 n/a n/a SingleSource/Benchmarks/Adobe-C++/simple_types_loop_invariant | 0.5560 137288 1.0000 * 1.0080 | 4.18 4.92 3.82 * 4.91 | 0.85 1.09 n/a n/a SingleSource/Benchmarks/Adobe-C++/stepanov_abstraction | 0.2600 37428 0.1240 * 0.1200 | 5.24 11.64 5.19 * 5.35 | 0.45 1.01 n/a n/a SingleSource/Benchmarks/Adobe-C++/stepanov_vector | 0.2560 41136 0.1440 * 0.1440 | 3.08 7.11 3.03 * 3.21 | 0.43 1.02 n/a n/a SingleSource/Benchmarks/BenchmarkGame/fannkuch | 0.0120 2672 0.0080 * 0.0080 | 4.23 4.10 3.60 * 3.51 | 1.03 1.18 n/a n/a SingleSource/Benchmarks/BenchmarkGame/fasta | 0.0120 3020 0.0120 * 0.0080 | 1.30 1.68 1.31 * 1.31 | 0.77 0.99 n/a n/a SingleSource/Benchmarks/BenchmarkGame/n-body | 0.0120 3192 0.0120 * 0.0080 | 2.37 2.12 2.07 * 2.10 | 1.12 1.14 n/a n/a SingleSource/Benchmarks/BenchmarkGame/nsieve-bits | 0.0040 1120 0.0080 * 0.0080 | 1.68 1.73 1.56 * 1.56 | 0.97 1.08 n/a n/a SingleSource/Benchmarks/BenchmarkGame/partialsums | 0.0040 1660 0.0040 * 0.0040 | 1.19 1.18 1.22 * 1.21 | 1.01 0.98 n/a n/a SingleSource/Benchmarks/BenchmarkGame/puzzle | 0.0080 1264 0.0040 * 0.0040 | 0.58 0.99 0.56 * 0.57 | 0.59 1.04 n/a n/a SingleSource/Benchmarks/BenchmarkGame/recursive | 0.0080 3444 0.0200 * 0.0240 | 1.22 1.12 1.03 * 1.03 | 1.09 1.18 n/a n/a SingleSource/Benchmarks/BenchmarkGame/spectral-norm | 0.0160 2792 0.0120 * 0.0120 | 3.08 3.09 2.07 * 2.10 | 1.00 1.49 n/a n/a SingleSource/Benchmarks/CoyoteBench/almabench | 0.0160 5816 0.0120 * 0.0080 | 19.32 8.42 8.35 * 8.40 | 2.29 2.31 n/a n/a SingleSource/Benchmarks/CoyoteBench/fftbench | 0.1040 22440 0.0840 * 0.0760 | 2.62 * 2.81 * 2.93 | n/a 0.93 n/a n/a SingleSource/Benchmarks/CoyoteBench/huffbench | 0.0200 6616 0.0280 * 0.0280 | 18.83 21.93 18.74 * 19.01 | 0.86 1.00 n/a n/a SingleSource/Benchmarks/CoyoteBench/lpbench | 0.0280 4408 0.0200 * 0.0160 | 14.19 14.30 14.09 * 13.99 | 0.99 1.01 n/a n/a SingleSource/Benchmarks/Dhrystone/dry | 0.0120 1268 0.0080 * 0.0080 | 2.62 0.46 0.62 * 0.66 | 5.70 4.23 n/a n/a SingleSource/Benchmarks/Dhrystone/fldry | 0.0120 1300 0.0040 * 0.0040 | 2.86 1.82 0.47 * 0.54 | 1.57 6.09 n/a n/a SingleSource/Benchmarks/McGill/chomp | 0.0240 6140 0.0320 * 0.0360 | 1.35 0.99 1.35 * 1.13 | 1.36 1.00 n/a n/a SingleSource/Benchmarks/McGill/exptree | 0.0200 4800 0.0240 * 0.0200 | 0.00 0.01 0.00 * 0.03 | - - n/a n/a SingleSource/Benchmarks/McGill/misr | 0.0120 2700 0.0120 * 0.0080 | 0.37 0.30 0.32 * 0.33 | 1.23 1.16 n/a n/a SingleSource/Benchmarks/McGill/queens | 0.0120 3316 0.0160 * 0.0120 | 2.89 2.57 2.45 * 2.58 | 1.12 1.18 n/a n/a SingleSource/Benchmarks/Misc-C++/bigfib | 0.2000 41088 0.1640 * 0.1400 | 0.61 * 0.62 * 0.77 | n/a 0.98 n/a n/a SingleSource/Benchmarks/Misc-C++/mandel-text | 0.0040 1152 0.0040 * 0.0040 | 2.64 3.18 2.33 * 2.34 | 0.83 1.13 n/a n/a SingleSource/Benchmarks/Misc-C++/oopack_v1p8 | 0.0280 9456 0.0320 * 0.0320 | 0.22 0.34 0.17 * 0.22 | 0.65 1.29 n/a n/a SingleSource/Benchmarks/Misc-C++/ray | 0.0560 17280 0.0600 * 0.0480 | 6.83 8.25 5.10 * 5.22 | 0.83 1.34 n/a n/a SingleSource/Benchmarks/Misc-C++/sphereflake | 0.0560 16904 0.0640 * 0.0600 | 3.44 6.99 3.35 * 3.47 | 0.49 1.03 n/a n/a SingleSource/Benchmarks/Misc-C++/stepanov_container | 0.2520 46076 0.1600 * 0.1440 | 7.36 8.04 7.56 * 7.63 | 0.92 0.97 n/a n/a SingleSource/Benchmarks/Misc-C++/stepanov_v1p2 | 0.0640 10008 0.0320 * 0.0320 | 8.20 15.87 8.19 * 8.23 | 0.52 1.00 n/a n/a SingleSource/Benchmarks/Misc/ReedSolomon | 0.0600 10188 0.0480 * 0.0440 | 8.04 8.64 7.42 * 7.83 | 0.93 1.08 n/a n/a SingleSource/Benchmarks/Misc/fbench | 0.0160 5364 0.0160 * 0.0240 | 2.19 2.26 2.56 * 2.63 | 0.97 0.86 n/a n/a SingleSource/Benchmarks/Misc/ffbench | 0.0200 4340 0.0200 * 0.0240 | 0.98 1.09 1.11 * 1.12 | 0.90 0.88 n/a n/a SingleSource/Benchmarks/Misc/flops | 0.0200 6552 0.0240 * 0.0280 | 16.69 13.00 15.86 * 16.00 | 1.28 1.05 n/a n/a SingleSource/Benchmarks/Misc/flops-1 | 0.0000 1152 0.0040 * 0.0040 | 4.51 4.06 4.62 * 4.08 | 1.11 0.98 n/a n/a SingleSource/Benchmarks/Misc/flops-2 | 0.0000 1252 0.0040 * 0.0040 | 2.22 2.51 2.22 * 2.23 | 0.88 1.00 n/a n/a SingleSource/Benchmarks/Misc/flops-3 | 0.0000 1172 0.0040 * 0.0040 | 2.74 3.21 3.02 * 3.09 | 0.85 0.91 n/a n/a SingleSource/Benchmarks/Misc/flops-4 | 0.0000 1152 0.0040 * 0.0000 | 4.06 1.35 1.39 * 1.40 | 3.01 2.92 n/a n/a SingleSource/Benchmarks/Misc/flops-5 | 0.0000 1284 0.0040 * 0.0040 | 6.84 3.91 4.45 * 4.49 | 1.75 1.54 n/a n/a SingleSource/Benchmarks/Misc/flops-6 | 0.0040 1284 0.0040 * 0.0040 | 5.10 4.85 5.10 * 5.12 | 1.05 1.00 n/a n/a SingleSource/Benchmarks/Misc/flops-7 | 0.0000 1080 0.0040 * 0.0080 | 6.20 6.12 6.18 * 6.58 | 1.01 1.00 n/a n/a SingleSource/Benchmarks/Misc/flops-8 | 0.0080 1288 0.0040 * 0.0000 | 5.41 3.94 2.35 * 2.36 | 1.37 2.30 n/a n/a SingleSource/Benchmarks/Misc/himenobmtxpa | 0.0520 9672 0.0400 * 0.0480 | 1.45 2.73 2.07 * 2.17 | 0.53 0.70 n/a n/a SingleSource/Benchmarks/Misc/mandel | 0.0040 1084 0.0040 * 0.0080 | 1.49 1.64 1.68 * 2.00 | 0.91 0.89 n/a n/a SingleSource/Benchmarks/Misc/mandel-2 | 0.0040 1052 0.0040 * 0.0040 | 1.22 1.40 1.03 * 1.06 | 0.87 1.18 n/a n/a SingleSource/Benchmarks/Misc/oourafft | 0.0800 13464 0.0520 * 0.0560 | 6.33 8.77 8.17 * 7.22 | 0.72 0.77 n/a n/a SingleSource/Benchmarks/Misc/perlin | 0.0160 4476 0.0160 * 0.0200 | 5.96 6.72 6.83 * 6.87 | 0.89 0.87 n/a n/a SingleSource/Benchmarks/Misc/pi | 0.0040 1152 0.0040 * 0.0040 | 1.00 0.94 1.01 * 0.95 | 1.06 0.99 n/a n/a SingleSource/Benchmarks/Misc/richards_benchmark | 0.0160 5752 0.0160 * 0.0200 | 0.94 1.10 1.16 * 1.29 | 0.85 0.81 n/a n/a SingleSource/Benchmarks/Misc/salsa20 | 0.0160 2700 0.0080 * 0.0120 | 10.57 9.35 9.65 * 9.76 | 1.13 1.10 n/a n/a SingleSource/Benchmarks/Misc/whetstone | 0.0160 3356 0.0120 * 0.0160 | 2.47 2.53 2.50 * 2.52 | 0.98 0.99 n/a n/a SingleSource/Benchmarks/Shootout-C++/ackermann | 0.0400 11116 0.0360 * 0.0360 | 1.86 1.04 1.15 * 1.10 | 1.79 1.62 n/a n/a SingleSource/Benchmarks/Shootout-C++/ary | 0.0320 9192 0.0320 * 0.0240 | 0.14 0.13 0.13 * 0.18 | 1.08 1.08 n/a n/a SingleSource/Benchmarks/Shootout-C++/ary2 | 0.0520 9808 0.0320 * 0.0320 | 0.14 0.14 0.13 * 0.17 | 1.00 1.08 n/a n/a SingleSource/Benchmarks/Shootout-C++/ary3 | 0.0520 11680 0.0400 * 0.0360 | 5.38 5.39 5.31 * 5.33 | 1.00 1.01 n/a n/a SingleSource/Benchmarks/Shootout-C++/except | 0.0320 11384 * * * | 0.28 * * * * | n/a n/a n/a n/a SingleSource/Benchmarks/Shootout-C++/fibo | 0.0240 7952 0.0240 * 0.0240 | 2.56 0.57 0.54 * 0.61 | 4.49 4.74 n/a n/a SingleSource/Benchmarks/Shootout-C++/hash | 0.0760 15128 0.0440 * 0.0560 | 0.78 0.79 0.78 * 0.95 | 0.99 1.00 n/a n/a SingleSource/Benchmarks/Shootout-C++/hash2 | 0.1200 20148 0.0560 * 0.0680 | 4.77 4.78 4.68 * 4.78 | 1.00 1.02 n/a n/a SingleSource/Benchmarks/Shootout-C++/heapsort | 0.0080 3016 0.0080 * 0.0039 | 6.97 6.14 5.46 * 5.44 | 1.14 1.28 n/a n/a SingleSource/Benchmarks/Shootout-C++/hello | 0.0280 8392 0.0240 * 0.0240 | 0.00 0.00 0.01 * 0.03 | - - n/a n/a SingleSource/Benchmarks/Shootout-C++/lists | 0.0680 11472 0.0400 * 0.0320 | 6.12 6.16 6.18 * 6.46 | 0.99 0.99 n/a n/a SingleSource/Benchmarks/Shootout-C++/lists1 | 0.0920 16308 0.0600 * 0.0640 | 0.50 0.39 0.40 * 0.64 | 1.28 1.25 n/a n/a SingleSource/Benchmarks/Shootout-C++/matrix | 0.0400 12240 0.0440 * 0.0360 | 3.40 3.53 3.50 * 3.56 | 0.96 0.97 n/a n/a SingleSource/Benchmarks/Shootout-C++/methcall | 0.0280 10872 0.0360 * 0.0240 | 6.00 6.45 5.73 * 7.88 | 0.93 1.05 n/a n/a SingleSource/Benchmarks/Shootout-C++/moments | 0.0520 9092 0.0280 * 0.0240 | 0.20 0.22 0.22 * 0.25 | 0.91 0.91 n/a n/a SingleSource/Benchmarks/Shootout-C++/nestedloop | 0.0360 8124 0.0240 * 0.0200 | 8.02 0.17 0.17 * 0.20 | 47.18 47.18 n/a n/a SingleSource/Benchmarks/Shootout-C++/objinst | 0.0440 11068 0.0360 * 0.0360 | 5.73 5.87 5.69 * 5.72 | 0.98 1.01 n/a n/a SingleSource/Benchmarks/Shootout-C++/random | 0.0320 7924 0.0240 * 0.0240 | 6.69 4.39 4.70 * 4.67 | 1.52 1.42 n/a n/a SingleSource/Benchmarks/Shootout-C++/reversefile | 0.1040 17488 0.0560 * 0.0480 | 0.00 * 0.00 * 0.06 | n/a - n/a n/a SingleSource/Benchmarks/Shootout-C++/sieve | 0.0560 12648 0.0440 * 0.0440 | 2.26 2.43 2.38 * 2.37 | 0.93 0.95 n/a n/a SingleSource/Benchmarks/Shootout-C++/spellcheck | 0.1080 27360 0.0720 * 0.0480 | 0.00 0.00 0.00 * 0.05 | - - n/a n/a SingleSource/Benchmarks/Shootout-C++/strcat | 0.0480 10628 0.0400 * 0.0360 | 0.15 * 0.10 * 0.15 | n/a 1.50 n/a n/a SingleSource/Benchmarks/Shootout-C++/sumcol | 0.0400 9084 0.0240 * 0.0160 | 0.00 0.00 0.00 * 0.03 | - - n/a n/a SingleSource/Benchmarks/Shootout-C++/wc | 0.0360 11192 0.0400 * 0.0320 | 0.00 0.00 0.00 * 0.03 | - - n/a n/a SingleSource/Benchmarks/Shootout-C++/wordfreq | 0.0920 18464 0.0640 * 0.0240 | 0.00 0.00 0.00 * 0.03 | - - n/a n/a SingleSource/Benchmarks/Shootout/ackermann | 0.0040 1180 0.0080 * 0.0080 | 0.00 0.00 0.01 * 0.02 | - - n/a n/a SingleSource/Benchmarks/Shootout/ary3 | 0.0040 1140 0.0040 * 0.0080 | 5.48 6.28 5.51 * 5.47 | 0.87 0.99 n/a n/a SingleSource/Benchmarks/Shootout/fib2 | 0.0040 964 0.0040 * 0.0040 | 2.60 0.72 0.56 * 0.57 | 3.61 4.64 n/a n/a SingleSource/Benchmarks/Shootout/hash | 0.0160 2948 0.0160 * 0.0120 | 6.75 6.65 7.00 * 6.06 | 1.02 0.96 n/a n/a SingleSource/Benchmarks/Shootout/heapsort | 0.0080 1424 0.0080 * 0.0040 | 6.32 6.08 6.50 * 5.49 | 1.04 0.97 n/a n/a SingleSource/Benchmarks/Shootout/hello | 0.0000 576 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Benchmarks/Shootout/lists | 0.0200 3180 0.0120 * 0.0120 | 5.66 6.00 5.89 * 6.60 | 0.94 0.96 n/a n/a SingleSource/Benchmarks/Shootout/matrix | 0.0160 4080 0.0120 * 0.0120 | 2.69 4.81 4.01 * 4.05 | 0.56 0.67 n/a n/a SingleSource/Benchmarks/Shootout/methcall | 0.0040 1568 0.0080 * 0.0080 | 4.87 4.67 4.66 * 6.57 | 1.04 1.05 n/a n/a SingleSource/Benchmarks/Shootout/nestedloop | 0.0080 1040 0.0040 * 0.0040 | 8.01 0.18 0.17 * 0.18 | 44.50 47.12 n/a n/a SingleSource/Benchmarks/Shootout/objinst | 0.0040 1664 0.0080 * 0.0080 | 5.12 5.17 5.04 * 4.98 | 0.99 1.02 n/a n/a SingleSource/Benchmarks/Shootout/random | 0.0040 840 0.0040 * 0.0040 | 4.42 4.43 4.70 * 4.70 | 1.00 0.94 n/a n/a SingleSource/Benchmarks/Shootout/sieve | 0.0040 1264 0.0040 * 0.0040 | 7.83 7.76 6.30 * 6.52 | 1.01 1.24 n/a n/a SingleSource/Benchmarks/Shootout/strcat | 0.0040 1316 0.0080 * 0.0080 | 0.17 0.17 0.17 * 0.18 | 1.00 1.00 n/a n/a SingleSource/Benchmarks/Stanford/Bubblesort | 0.0080 1420 0.0080 * 0.0040 | 0.06 0.05 0.05 * 0.06 | - - n/a n/a SingleSource/Benchmarks/Stanford/IntMM | 0.0120 1472 0.0080 * 0.0080 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a SingleSource/Benchmarks/Stanford/Oscar | 0.0080 3008 0.0120 * 0.0120 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a SingleSource/Benchmarks/Stanford/Perm | 0.0080 3124 0.0080 * 0.0120 | 0.02 0.03 0.04 * 0.05 | - - n/a n/a SingleSource/Benchmarks/Stanford/Puzzle | 0.0840 4720 0.0200 * 0.0240 | 0.17 0.22 0.18 * 0.21 | 0.77 0.94 n/a n/a SingleSource/Benchmarks/Stanford/Queens | 0.0080 2232 0.0120 * 0.0120 | 0.03 0.04 0.04 * 0.06 | - - n/a n/a SingleSource/Benchmarks/Stanford/Quicksort | 0.0120 1688 0.0080 * 0.0080 | 0.05 0.04 0.04 * 0.05 | - - n/a n/a SingleSource/Benchmarks/Stanford/RealMM | 0.0080 1504 0.0040 * 0.0080 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a SingleSource/Benchmarks/Stanford/Towers | 0.0200 2432 0.0120 * 0.0120 | 0.01 0.02 0.02 * 0.04 | - - n/a n/a SingleSource/Benchmarks/Stanford/Treesort | 0.0080 2248 0.0160 * 0.0080 | 0.09 0.09 0.09 * 0.11 | - - n/a n/a SingleSource/Regression/C++/2003-05-14-array-init | 0.0000 584 0.0000 * 0.0000 | 0.00 0.01 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C++/2003-05-14-expr_stmt | 0.0000 484 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C++/2003-06-08-BaseType | 0.0040 496 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/2003-06-08-VirtualFunctions | 0.0000 620 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/2003-06-13-Crasher | 0.0000 456 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/2003-08-20-EnumSizeProblem | 0.0000 456 0.0040 * 0.0000 | 0.00 0.00 0.01 * 0.00 | - - n/a n/a SingleSource/Regression/C++/2003-09-29-NonPODsByValue | 0.0000 576 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/2008-01-29-ParamAliasesReturn | 0.0040 604 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/BuiltinTypeInfo | 0.0000 728 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/EH/ConditionalExpr | 0.0040 712 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C++/EH/ctor_dtor_count | 0.0040 1048 * * * | 0.00 * * * * | n/a n/a n/a n/a SingleSource/Regression/C++/EH/ctor_dtor_count-2 | 0.0000 1592 * * * | 0.00 * * * * | n/a n/a n/a n/a SingleSource/Regression/C++/EH/dead_try_block | 0.0040 568 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C++/EH/exception_spec_test | 0.0040 2464 * * * | 0.00 * * * * | n/a n/a n/a n/a SingleSource/Regression/C++/EH/function_try_block | 0.0080 2452 * * * | 0.00 * * * * | n/a n/a n/a n/a SingleSource/Regression/C++/EH/simple_rethrow | 0.0040 1444 * * * | 0.00 * * * * | n/a n/a n/a n/a SingleSource/Regression/C++/EH/simple_throw | 0.0000 956 * * * | 0.00 * * * * | n/a n/a n/a n/a SingleSource/Regression/C++/EH/throw_rethrow_test | 0.0080 1792 * * * | 0.00 * * * * | n/a n/a n/a n/a SingleSource/Regression/C++/global_ctor | 0.0040 1344 0.0080 * 0.0080 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/global_type | 0.0040 456 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/ofstream_ctor | 0.0320 9224 0.0280 * 0.0240 | 0.00 0.00 0.00 * 0.03 | - - n/a n/a SingleSource/Regression/C++/pointer_member | 0.0000 660 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C++/pointer_method | 0.0040 664 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C++/short_circuit_dtor | 0.0040 644 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/2003-05-14-initialize-string | 0.0000 680 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/2003-05-21-BitfieldHandling | 0.0040 1152 0.0040 * 0.0040 | 0.00 * 0.00 * 0.00 | n/a - n/a n/a SingleSource/Regression/C/2003-05-21-UnionBitfields | 0.0040 580 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/2003-05-21-UnionTest | 0.0040 580 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/2003-05-22-LocalTypeTest | 0.0040 624 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/2003-05-22-VarSizeArray | 0.0000 580 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/2003-05-23-TransparentUnion | 0.0000 576 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/2003-06-16-InvalidInitializer | 0.0000 456 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/2003-06-16-VolatileError | 0.0000 456 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/2003-10-12-GlobalVarInitializers | 0.0040 664 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/2004-02-03-AggregateCopy | 0.0000 588 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/2004-03-15-IndirectGoto | 0.0040 860 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/2004-08-12-InlinerAndAllocas | 0.0040 824 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/2005-05-06-LongLongSignedShift | 0.0000 608 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/2008-01-07-LongDouble | 0.0000 596 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/ConstructorDestructorAttributes | 0.0000 760 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/DuffsDevice | 0.0080 1084 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a SingleSource/Regression/C/PR1386 | 0.0000 588 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/PR491 | 0.0000 456 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/PR640 | 0.0080 2076 0.0080 * 0.0080 | 0.00 0.00 0.01 * 0.02 | - - n/a n/a SingleSource/Regression/C/badidx | 0.0000 1004 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/bigstack | 0.0120 4116 0.0120 * 0.0080 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a SingleSource/Regression/C/callargs | 0.0000 928 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/casts | 0.0080 3596 0.0160 * 0.0160 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a SingleSource/Regression/C/globalrefs | 0.0000 932 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/matrixTranspose | 0.0120 1344 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/pointer_arithmetic | 0.0000 488 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/sumarray | 0.0040 948 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/sumarray2d | 0.0080 1080 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/Regression/C/sumarraymalloc | 0.0040 1164 0.0040 * 0.0120 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/test_indvars | 0.0080 1436 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/Regression/C/testtrace | 0.0080 1136 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-04-17-PrintfChar | 0.0000 576 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-05-02-ArgumentTest | 0.0000 624 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2002-05-02-CastTest | 0.0040 1504 0.0080 * 0.0080 | 0.00 0.01 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-05-02-CastTest1 | 0.0000 608 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-05-02-CastTest2 | 0.0040 728 0.0000 * 0.0000 | 0.01 0.00 0.00 * 0.02 | - - n/a n/a SingleSource/UnitTests/2002-05-02-CastTest3 | 0.0000 684 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-05-02-ManyArguments | 0.0000 696 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-05-03-NotTest | 0.0040 664 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2002-05-19-DivTest | 0.0000 688 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2002-08-02-CastTest | 0.0000 584 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-08-02-CastTest2 | 0.0000 608 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-08-19-CodegenBug | 0.0000 568 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-10-09-ArrayResolution | 0.0000 644 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-10-12-StructureArgs | 0.0000 636 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-10-12-StructureArgsSimple | 0.0000 604 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2002-10-13-BadLoad | 0.0000 572 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2002-12-13-MishaTest | 0.0040 584 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-04-22-Switch | 0.0000 736 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2003-05-02-DependentPHI | 0.0040 816 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2003-05-07-VarArgs | 0.0120 2828 0.0120 * 0.0120 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2003-05-12-MinIntProblem | 0.0000 568 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-05-14-AtExit | 0.0040 688 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-05-26-Shorts | 0.0000 2012 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2003-05-31-CastToBool | 0.0000 916 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-05-31-LongShifts | 0.0040 920 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2003-07-06-IntOverflow | 0.0000 812 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2003-07-08-BitOpsTest | 0.0000 592 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-07-09-LoadShorts | 0.0000 1520 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-07-09-SignedArgs | 0.0080 1672 0.0040 * 0.0080 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2003-07-10-SignConversions | 0.0040 792 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-08-05-CastFPToUint | 0.0000 720 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-08-11-VaListArg | 0.0040 3108 0.0160 * 0.0160 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2003-08-20-FoldBug | 0.0000 568 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2003-09-18-BitFieldTest | 0.0040 612 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2003-10-13-SwitchTest | 0.0000 652 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2003-10-29-ScalarReplBug | 0.0000 580 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2004-02-02-NegativeZero | 0.0040 640 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2004-06-20-StaticBitfieldInit | 0.0040 684 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2004-11-28-GlobalBoolLayout | 0.0000 880 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls | 0.0120 2144 0.0080 * 0.0080 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a SingleSource/UnitTests/2005-05-12-Int64ToFP | 0.0000 684 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2005-05-13-SDivTwo | 0.0040 648 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2005-07-15-Bitfield-ABI | 0.0000 596 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2005-07-17-INT-To-FP | 0.0040 928 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2005-11-29-LongSwitch | 0.0000 584 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2006-01-23-UnionInit | 0.0080 2124 0.0080 * 0.0080 | 0.00 * 0.00 * 0.00 | n/a - n/a n/a SingleSource/UnitTests/2006-01-29-SimpleIndirectCall | 0.0000 796 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2006-02-04-DivRem | 0.0000 672 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2006-12-01-float_varg | 0.0000 660 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2006-12-04-DynAllocAndRestore | 0.0040 480 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2006-12-07-Compare64BitConstant | 0.0000 592 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2006-12-11-LoadConstants | 0.0239 2704 0.0320 * 0.0280 | 0.00 0.00 0.00 * 0.03 | - - n/a n/a SingleSource/UnitTests/2007-01-04-KNR-Args | 0.0000 668 0.0040 * 0.0040 | 0.01 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2007-03-02-VaCopy | 0.0000 944 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2007-04-10-BitfieldTest | 0.0000 604 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2007-04-25-weak | 0.0000 512 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2008-04-18-LoopBug | 0.0040 1052 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2008-04-20-LoopBug2 | 0.0040 1068 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/2008-07-13-InlineSetjmp | 0.0000 832 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/2009-04-16-BitfieldInitialization | 0.0000 1888 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/AtomicOps | 0.0000 812 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/FloatPrecision | 0.0000 616 0.0040 * 0.0040 | 0.01 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/SignlessTypes/cast | 0.0080 2560 0.0240 * 0.0240 | 0.02 0.02 0.01 * 0.04 | - - n/a n/a SingleSource/UnitTests/SignlessTypes/cast-bug | 0.0000 628 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/SignlessTypes/cast2 | 0.0000 592 0.0000 * 0.0000 | 0.00 0.01 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/SignlessTypes/ccc | 0.0040 760 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/SignlessTypes/div | 0.0000 1340 0.0040 * 0.0040 | 0.00 0.01 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/SignlessTypes/factor | 0.0040 1008 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.02 | - - n/a n/a SingleSource/UnitTests/SignlessTypes/rem | 0.0240 9136 0.0880 * 0.0880 | 0.00 0.00 0.00 * 0.09 | - - n/a n/a SingleSource/UnitTests/SignlessTypes/shr | 0.0000 1448 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/StructModifyTest | 0.0040 688 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/TestLoop | 0.0040 680 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/Threads/tls | 0.0000 876 0.0000 * * | 0.00 0.00 0.00 * * | - - n/a n/a SingleSource/UnitTests/Vector/SSE/sse.expandfft | 0.0240 6336 0.0240 * 0.0240 | 0.69 1.41 0.59 * 0.62 | 0.49 1.17 n/a n/a SingleSource/UnitTests/Vector/SSE/sse.isamax | 0.0120 3156 0.0120 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/Vector/SSE/sse.shift | 0.0040 828 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/Vector/SSE/sse.stepfft | 0.0560 9860 0.0440 * 0.0440 | 0.69 1.37 0.63 * 0.68 | 0.50 1.10 n/a n/a SingleSource/UnitTests/Vector/build | 0.0040 804 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/Vector/build2 | 0.0120 1144 0.0040 * 0.0040 | 1.54 1.54 2.04 * 2.03 | 1.00 0.75 n/a n/a SingleSource/UnitTests/Vector/divides | 0.0000 656 0.0000 * 0.0000 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/Vector/multiplies | 0.0080 1652 0.0120 * 0.0120 | 1.26 1.24 3.29 * 3.29 | 1.02 0.38 n/a n/a SingleSource/UnitTests/Vector/simple | 0.0040 1216 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/Vector/sumarray | 0.0040 940 0.0040 * 0.0000 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a SingleSource/UnitTests/Vector/sumarray-dbl | 0.0000 1004 0.0000 * 0.0040 | 0.00 0.00 0.00 * 0.00 | - - n/a n/a SingleSource/UnitTests/printargs | 0.0000 760 0.0040 * 0.0040 | 0.00 0.00 0.00 * 0.01 | - - n/a n/a llvm-svn: 77499
2009-07-30 04:10:24 +08:00
O << "}\n";
}
static void
emitRegisterNameString(raw_ostream &O, StringRef AltName,
const std::deque<CodeGenRegister> &Registers) {
SequenceToOffsetTable<std::string> StringTable;
SmallVector<std::string, 4> AsmNames(Registers.size());
unsigned i = 0;
for (const auto &Reg : Registers) {
std::string &AsmName = AsmNames[i++];
// "NoRegAltName" is special. We don't need to do a lookup for that,
// as it's just a reference to the default register name.
if (AltName == "" || AltName == "NoRegAltName") {
AsmName = Reg.TheDef->getValueAsString("AsmName");
if (AsmName.empty())
AsmName = Reg.getName();
} else {
// Make sure the register has an alternate name for this index.
std::vector<Record*> AltNameList =
Reg.TheDef->getValueAsListOfDefs("RegAltNameIndices");
unsigned Idx = 0, e;
for (e = AltNameList.size();
Idx < e && (AltNameList[Idx]->getName() != AltName);
++Idx)
;
// If the register has an alternate name for this index, use it.
// Otherwise, leave it empty as an error flag.
if (Idx < e) {
std::vector<StringRef> AltNames =
Reg.TheDef->getValueAsListOfStrings("AltNames");
if (AltNames.size() <= Idx)
PrintFatalError(Reg.TheDef->getLoc(),
"Register definition missing alt name for '" +
AltName + "'.");
AsmName = AltNames[Idx];
}
}
StringTable.add(AsmName);
}
StringTable.layout();
O << " static const char AsmStrs" << AltName << "[] = {\n";
StringTable.emit(O, printChar);
O << " };\n\n";
O << " static const " << getMinimalTypeForRange(StringTable.size() - 1, 32)
<< " RegAsmOffset" << AltName << "[] = {";
for (unsigned i = 0, e = Registers.size(); i != e; ++i) {
if ((i % 14) == 0)
O << "\n ";
O << StringTable.get(AsmNames[i]) << ", ";
}
O << "\n };\n"
<< "\n";
}
void AsmWriterEmitter::EmitGetRegisterName(raw_ostream &O) {
Record *AsmWriter = Target.getAsmWriter();
std::string ClassName = AsmWriter->getValueAsString("AsmWriterClassName");
const auto &Registers = Target.getRegBank().getRegisters();
const std::vector<Record*> &AltNameIndices = Target.getRegAltNameIndices();
bool hasAltNames = AltNameIndices.size() > 1;
std::string Namespace =
Registers.front().TheDef->getValueAsString("Namespace");
2010-09-30 06:32:50 +08:00
O <<
"\n\n/// getRegisterName - This method is automatically generated by tblgen\n"
"/// from the register set description. This returns the assembler name\n"
"/// for the specified register.\n"
"const char *" << Target.getName() << ClassName << "::";
if (hasAltNames)
O << "\ngetRegisterName(unsigned RegNo, unsigned AltIdx) {\n";
else
O << "getRegisterName(unsigned RegNo) {\n";
O << " assert(RegNo && RegNo < " << (Registers.size()+1)
<< " && \"Invalid register number!\");\n"
<< "\n";
2010-09-30 06:32:50 +08:00
if (hasAltNames) {
for (const Record *R : AltNameIndices)
emitRegisterNameString(O, R->getName(), Registers);
} else
emitRegisterNameString(O, "", Registers);
if (hasAltNames) {
O << " switch(AltIdx) {\n"
<< " default: llvm_unreachable(\"Invalid register alt name index!\");\n";
for (const Record *R : AltNameIndices) {
const std::string &AltName = R->getName();
std::string Prefix = !Namespace.empty() ? Namespace + "::" : "";
O << " case " << Prefix << AltName << ":\n"
<< " assert(*(AsmStrs" << AltName << "+RegAsmOffset"
<< AltName << "[RegNo-1]) &&\n"
<< " \"Invalid alt name index for register!\");\n"
<< " return AsmStrs" << AltName << "+RegAsmOffset"
<< AltName << "[RegNo-1];\n";
}
O << " }\n";
} else {
O << " assert (*(AsmStrs+RegAsmOffset[RegNo-1]) &&\n"
<< " \"Invalid alt name index for register!\");\n"
<< " return AsmStrs+RegAsmOffset[RegNo-1];\n";
}
O << "}\n";
}
namespace {
// IAPrinter - Holds information about an InstAlias. Two InstAliases match if
// they both have the same conditionals. In which case, we cannot print out the
// alias for that pattern.
class IAPrinter {
std::vector<std::string> Conds;
std::map<StringRef, std::pair<int, int>> OpMap;
std::string Result;
std::string AsmString;
public:
IAPrinter(std::string R, std::string AS)
: Result(std::move(R)), AsmString(std::move(AS)) {}
void addCond(const std::string &C) { Conds.push_back(C); }
void addOperand(StringRef Op, int OpIdx, int PrintMethodIdx = -1) {
assert(OpIdx >= 0 && OpIdx < 0xFE && "Idx out of range");
assert(PrintMethodIdx >= -1 && PrintMethodIdx < 0xFF &&
"Idx out of range");
OpMap[Op] = std::make_pair(OpIdx, PrintMethodIdx);
}
bool isOpMapped(StringRef Op) { return OpMap.find(Op) != OpMap.end(); }
int getOpIndex(StringRef Op) { return OpMap[Op].first; }
std::pair<int, int> &getOpData(StringRef Op) { return OpMap[Op]; }
std::pair<StringRef, StringRef::iterator> parseName(StringRef::iterator Start,
StringRef::iterator End) {
StringRef::iterator I = Start;
StringRef::iterator Next;
if (*I == '{') {
// ${some_name}
Start = ++I;
while (I != End && *I != '}')
++I;
Next = I;
// eat the final '}'
if (Next != End)
++Next;
} else {
// $name, just eat the usual suspects.
while (I != End &&
((*I >= 'a' && *I <= 'z') || (*I >= 'A' && *I <= 'Z') ||
(*I >= '0' && *I <= '9') || *I == '_'))
++I;
Next = I;
}
return std::make_pair(StringRef(Start, I - Start), Next);
}
void print(raw_ostream &O) {
if (Conds.empty()) {
O.indent(6) << "return true;\n";
return;
}
O << "if (";
for (std::vector<std::string>::iterator
I = Conds.begin(), E = Conds.end(); I != E; ++I) {
if (I != Conds.begin()) {
O << " &&\n";
O.indent(8);
}
O << *I;
}
O << ") {\n";
O.indent(6) << "// " << Result << "\n";
// Directly mangle mapped operands into the string. Each operand is
// identified by a '$' sign followed by a byte identifying the number of the
// operand. We add one to the index to avoid zero bytes.
StringRef ASM(AsmString);
SmallString<128> OutString;
raw_svector_ostream OS(OutString);
for (StringRef::iterator I = ASM.begin(), E = ASM.end(); I != E;) {
OS << *I;
if (*I == '$') {
StringRef Name;
std::tie(Name, I) = parseName(++I, E);
assert(isOpMapped(Name) && "Unmapped operand!");
int OpIndex, PrintIndex;
std::tie(OpIndex, PrintIndex) = getOpData(Name);
if (PrintIndex == -1) {
// Can use the default printOperand route.
OS << format("\\x%02X", (unsigned char)OpIndex + 1);
} else
// 3 bytes if a PrintMethod is needed: 0xFF, the MCInst operand
// number, and which of our pre-detected Methods to call.
OS << format("\\xFF\\x%02X\\x%02X", OpIndex + 1, PrintIndex + 1);
} else {
++I;
}
}
// Emit the string.
O.indent(6) << "AsmString = \"" << OutString << "\";\n";
O.indent(6) << "break;\n";
O.indent(4) << '}';
}
bool operator==(const IAPrinter &RHS) const {
if (Conds.size() != RHS.Conds.size())
return false;
unsigned Idx = 0;
for (const auto &str : Conds)
if (str != RHS.Conds[Idx++])
return false;
return true;
}
};
} // end anonymous namespace
static unsigned CountNumOperands(StringRef AsmString, unsigned Variant) {
std::string FlatAsmString =
CodeGenInstruction::FlattenAsmStringVariants(AsmString, Variant);
AsmString = FlatAsmString;
return AsmString.count(' ') + AsmString.count('\t');
}
namespace {
struct AliasPriorityComparator {
typedef std::pair<CodeGenInstAlias, int> ValueType;
bool operator()(const ValueType &LHS, const ValueType &RHS) const {
if (LHS.second == RHS.second) {
// We don't actually care about the order, but for consistency it
// shouldn't depend on pointer comparisons.
return LessRecordByID()(LHS.first.TheDef, RHS.first.TheDef);
}
// Aliases with larger priorities should be considered first.
return LHS.second > RHS.second;
}
};
} // end anonymous namespace
void AsmWriterEmitter::EmitPrintAliasInstruction(raw_ostream &O) {
Record *AsmWriter = Target.getAsmWriter();
O << "\n#ifdef PRINT_ALIAS_INSTR\n";
O << "#undef PRINT_ALIAS_INSTR\n\n";
//////////////////////////////
// Gather information about aliases we need to print
//////////////////////////////
// Emit the method that prints the alias instruction.
std::string ClassName = AsmWriter->getValueAsString("AsmWriterClassName");
unsigned Variant = AsmWriter->getValueAsInt("Variant");
bool PassSubtarget = AsmWriter->getValueAsInt("PassSubtarget");
std::vector<Record*> AllInstAliases =
Records.getAllDerivedDefinitions("InstAlias");
// Create a map from the qualified name to a list of potential matches.
typedef std::set<std::pair<CodeGenInstAlias, int>, AliasPriorityComparator>
AliasWithPriority;
std::map<std::string, AliasWithPriority> AliasMap;
for (Record *R : AllInstAliases) {
int Priority = R->getValueAsInt("EmitPriority");
if (Priority < 1)
continue; // Aliases with priority 0 are never emitted.
const DagInit *DI = R->getValueAsDag("ResultInst");
const DefInit *Op = cast<DefInit>(DI->getOperator());
AliasMap[getQualifiedName(Op->getDef())].insert(
std::make_pair(CodeGenInstAlias(R, Variant, Target), Priority));
}
// A map of which conditions need to be met for each instruction operand
// before it can be matched to the mnemonic.
std::map<std::string, std::vector<IAPrinter>> IAPrinterMap;
std::vector<std::string> PrintMethods;
// A list of MCOperandPredicates for all operands in use, and the reverse map
std::vector<const Record*> MCOpPredicates;
DenseMap<const Record*, unsigned> MCOpPredicateMap;
for (auto &Aliases : AliasMap) {
for (auto &Alias : Aliases.second) {
const CodeGenInstAlias &CGA = Alias.first;
unsigned LastOpNo = CGA.ResultInstOperandIndex.size();
unsigned NumResultOps =
CountNumOperands(CGA.ResultInst->AsmString, Variant);
// Don't emit the alias if it has more operands than what it's aliasing.
if (NumResultOps < CountNumOperands(CGA.AsmString, Variant))
continue;
IAPrinter IAP(CGA.Result->getAsString(), CGA.AsmString);
std::string Namespace = Target.getName();
std::vector<Record *> ReqFeatures;
if (PassSubtarget) {
// We only consider ReqFeatures predicates if PassSubtarget
std::vector<Record *> RF =
CGA.TheDef->getValueAsListOfDefs("Predicates");
copy_if(RF, std::back_inserter(ReqFeatures), [](Record *R) {
return R->getValueAsBit("AssemblerMatcherPredicate");
});
}
unsigned NumMIOps = 0;
for (auto &Operand : CGA.ResultOperands)
NumMIOps += Operand.getMINumOperands();
std::string Cond;
Cond = std::string("MI->getNumOperands() == ") + utostr(NumMIOps);
IAP.addCond(Cond);
bool CantHandle = false;
unsigned MIOpNum = 0;
for (unsigned i = 0, e = LastOpNo; i != e; ++i) {
std::string Op = "MI->getOperand(" + utostr(MIOpNum) + ")";
const CodeGenInstAlias::ResultOperand &RO = CGA.ResultOperands[i];
switch (RO.Kind) {
case CodeGenInstAlias::ResultOperand::K_Record: {
const Record *Rec = RO.getRecord();
StringRef ROName = RO.getName();
int PrintMethodIdx = -1;
// These two may have a PrintMethod, which we want to record (if it's
// the first time we've seen it) and provide an index for the aliasing
// code to use.
if (Rec->isSubClassOf("RegisterOperand") ||
Rec->isSubClassOf("Operand")) {
std::string PrintMethod = Rec->getValueAsString("PrintMethod");
if (PrintMethod != "" && PrintMethod != "printOperand") {
PrintMethodIdx =
llvm::find(PrintMethods, PrintMethod) - PrintMethods.begin();
if (static_cast<unsigned>(PrintMethodIdx) == PrintMethods.size())
PrintMethods.push_back(PrintMethod);
}
}
if (Rec->isSubClassOf("RegisterOperand"))
Rec = Rec->getValueAsDef("RegClass");
if (Rec->isSubClassOf("RegisterClass")) {
IAP.addCond(Op + ".isReg()");
if (!IAP.isOpMapped(ROName)) {
IAP.addOperand(ROName, MIOpNum, PrintMethodIdx);
Record *R = CGA.ResultOperands[i].getRecord();
if (R->isSubClassOf("RegisterOperand"))
R = R->getValueAsDef("RegClass");
Cond = std::string("MRI.getRegClass(") + Target.getName().str() +
"::" + R->getName().str() + "RegClassID).contains(" + Op +
".getReg())";
} else {
Cond = Op + ".getReg() == MI->getOperand(" +
utostr(IAP.getOpIndex(ROName)) + ").getReg()";
}
} else {
// Assume all printable operands are desired for now. This can be
2014-05-15 09:52:21 +08:00
// overridden in the InstAlias instantiation if necessary.
IAP.addOperand(ROName, MIOpNum, PrintMethodIdx);
// There might be an additional predicate on the MCOperand
unsigned Entry = MCOpPredicateMap[Rec];
if (!Entry) {
if (!Rec->isValueUnset("MCOperandPredicate")) {
MCOpPredicates.push_back(Rec);
Entry = MCOpPredicates.size();
MCOpPredicateMap[Rec] = Entry;
} else
break; // No conditions on this operand at all
}
Cond = Target.getName().str() + ClassName + "ValidateMCOperand(" +
Op + ", STI, " + utostr(Entry) + ")";
}
// for all subcases of ResultOperand::K_Record:
IAP.addCond(Cond);
break;
}
case CodeGenInstAlias::ResultOperand::K_Imm: {
// Just because the alias has an immediate result, doesn't mean the
// MCInst will. An MCExpr could be present, for example.
IAP.addCond(Op + ".isImm()");
Cond = Op + ".getImm() == " + itostr(CGA.ResultOperands[i].getImm());
IAP.addCond(Cond);
break;
}
case CodeGenInstAlias::ResultOperand::K_Reg:
// If this is zero_reg, something's playing tricks we're not
// equipped to handle.
if (!CGA.ResultOperands[i].getRegister()) {
CantHandle = true;
break;
}
Cond = Op + ".getReg() == " + Target.getName().str() + "::" +
CGA.ResultOperands[i].getRegister()->getName().str();
IAP.addCond(Cond);
break;
}
MIOpNum += RO.getMINumOperands();
}
if (CantHandle) continue;
for (auto I = ReqFeatures.cbegin(); I != ReqFeatures.cend(); I++) {
Record *R = *I;
std::string AsmCondString = R->getValueAsString("AssemblerCondString");
// AsmCondString has syntax [!]F(,[!]F)*
SmallVector<StringRef, 4> Ops;
SplitString(AsmCondString, Ops, ",");
assert(!Ops.empty() && "AssemblerCondString cannot be empty");
for (auto &Op : Ops) {
assert(!Op.empty() && "Empty operator");
if (Op[0] == '!')
Cond = "!STI.getFeatureBits()[" + Namespace + "::" +
Op.substr(1).str() + "]";
else
Cond = "STI.getFeatureBits()[" + Namespace + "::" + Op.str() + "]";
IAP.addCond(Cond);
}
}
IAPrinterMap[Aliases.first].push_back(std::move(IAP));
}
}
//////////////////////////////
// Write out the printAliasInstr function
//////////////////////////////
std::string Header;
raw_string_ostream HeaderO(Header);
HeaderO << "bool " << Target.getName() << ClassName
<< "::printAliasInstr(const MCInst"
<< " *MI, " << (PassSubtarget ? "const MCSubtargetInfo &STI, " : "")
<< "raw_ostream &OS) {\n";
std::string Cases;
raw_string_ostream CasesO(Cases);
for (auto &Entry : IAPrinterMap) {
std::vector<IAPrinter> &IAPs = Entry.second;
std::vector<IAPrinter*> UniqueIAPs;
for (auto &LHS : IAPs) {
bool IsDup = false;
for (const auto &RHS : IAPs) {
if (&LHS != &RHS && LHS == RHS) {
IsDup = true;
break;
}
}
if (!IsDup)
UniqueIAPs.push_back(&LHS);
}
if (UniqueIAPs.empty()) continue;
CasesO.indent(2) << "case " << Entry.first << ":\n";
for (IAPrinter *IAP : UniqueIAPs) {
CasesO.indent(4);
IAP->print(CasesO);
CasesO << '\n';
}
CasesO.indent(4) << "return false;\n";
}
if (CasesO.str().empty()) {
O << HeaderO.str();
O << " return false;\n";
O << "}\n\n";
O << "#endif // PRINT_ALIAS_INSTR\n";
return;
}
if (!MCOpPredicates.empty())
O << "static bool " << Target.getName() << ClassName
<< "ValidateMCOperand(const MCOperand &MCOp,\n"
<< " const MCSubtargetInfo &STI,\n"
<< " unsigned PredicateIndex);\n";
O << HeaderO.str();
O.indent(2) << "const char *AsmString;\n";
O.indent(2) << "switch (MI->getOpcode()) {\n";
O.indent(2) << "default: return false;\n";
O << CasesO.str();
O.indent(2) << "}\n\n";
// Code that prints the alias, replacing the operands with the ones from the
// MCInst.
O << " unsigned I = 0;\n";
O << " while (AsmString[I] != ' ' && AsmString[I] != '\\t' &&\n";
O << " AsmString[I] != '$' && AsmString[I] != '\\0')\n";
O << " ++I;\n";
O << " OS << '\\t' << StringRef(AsmString, I);\n";
O << " if (AsmString[I] != '\\0') {\n";
O << " if (AsmString[I] == ' ' || AsmString[I] == '\\t')";
O << " OS << '\\t';\n";
O << " do {\n";
O << " if (AsmString[I] == '$') {\n";
O << " ++I;\n";
O << " if (AsmString[I] == (char)0xff) {\n";
O << " ++I;\n";
O << " int OpIdx = AsmString[I++] - 1;\n";
O << " int PrintMethodIdx = AsmString[I++] - 1;\n";
O << " printCustomAliasOperand(MI, OpIdx, PrintMethodIdx, ";
O << (PassSubtarget ? "STI, " : "");
O << "OS);\n";
O << " } else\n";
O << " printOperand(MI, unsigned(AsmString[I++]) - 1, ";
O << (PassSubtarget ? "STI, " : "");
O << "OS);\n";
O << " } else {\n";
O << " OS << AsmString[I++];\n";
O << " }\n";
O << " } while (AsmString[I] != '\\0');\n";
O << " }\n\n";
2012-04-19 02:56:33 +08:00
O << " return true;\n";
O << "}\n\n";
//////////////////////////////
// Write out the printCustomAliasOperand function
//////////////////////////////
O << "void " << Target.getName() << ClassName << "::"
<< "printCustomAliasOperand(\n"
<< " const MCInst *MI, unsigned OpIdx,\n"
<< " unsigned PrintMethodIdx,\n"
<< (PassSubtarget ? " const MCSubtargetInfo &STI,\n" : "")
<< " raw_ostream &OS) {\n";
if (PrintMethods.empty())
O << " llvm_unreachable(\"Unknown PrintMethod kind\");\n";
else {
O << " switch (PrintMethodIdx) {\n"
<< " default:\n"
<< " llvm_unreachable(\"Unknown PrintMethod kind\");\n"
<< " break;\n";
for (unsigned i = 0; i < PrintMethods.size(); ++i) {
O << " case " << i << ":\n"
<< " " << PrintMethods[i] << "(MI, OpIdx, "
<< (PassSubtarget ? "STI, " : "") << "OS);\n"
<< " break;\n";
}
O << " }\n";
}
O << "}\n\n";
if (!MCOpPredicates.empty()) {
O << "static bool " << Target.getName() << ClassName
<< "ValidateMCOperand(const MCOperand &MCOp,\n"
<< " const MCSubtargetInfo &STI,\n"
<< " unsigned PredicateIndex) {\n"
<< " switch (PredicateIndex) {\n"
<< " default:\n"
<< " llvm_unreachable(\"Unknown MCOperandPredicate kind\");\n"
<< " break;\n";
for (unsigned i = 0; i < MCOpPredicates.size(); ++i) {
Init *MCOpPred = MCOpPredicates[i]->getValueInit("MCOperandPredicate");
if (CodeInit *SI = dyn_cast<CodeInit>(MCOpPred)) {
O << " case " << i + 1 << ": {\n"
<< SI->getValue() << "\n"
<< " }\n";
} else
llvm_unreachable("Unexpected MCOperandPredicate field!");
}
O << " }\n"
<< "}\n\n";
}
O << "#endif // PRINT_ALIAS_INSTR\n";
}
AsmWriterEmitter::AsmWriterEmitter(RecordKeeper &R) : Records(R), Target(R) {
Record *AsmWriter = Target.getAsmWriter();
unsigned Variant = AsmWriter->getValueAsInt("Variant");
// Get the instruction numbering.
NumberedInstructions = Target.getInstructionsByEnumValue();
for (unsigned i = 0, e = NumberedInstructions.size(); i != e; ++i) {
const CodeGenInstruction *I = NumberedInstructions[i];
if (!I->AsmString.empty() && I->TheDef->getName() != "PHI")
Instructions.emplace_back(*I, i, Variant);
}
}
void AsmWriterEmitter::run(raw_ostream &O) {
EmitPrintInstruction(O);
EmitGetRegisterName(O);
EmitPrintAliasInstruction(O);
}
namespace llvm {
void EmitAsmWriter(RecordKeeper &RK, raw_ostream &OS) {
emitSourceFileHeader("Assembly Writer Source Fragment", OS);
AsmWriterEmitter(RK).run(OS);
}
} // end namespace llvm