Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f1b8e5b1bf | ||
|
|
e7a70b05af | ||
|
|
cf73286938 | ||
|
|
e6f80c0adc | ||
|
|
5e31d7b6d0 | ||
|
|
649f2ad7b7 | ||
|
|
fade1cdf1d | ||
|
|
d261105a86 | ||
|
|
b3d3e8987b | ||
|
|
4e91f3777a | ||
|
|
5584240c7f | ||
|
|
7126a39092 |
@@ -15,8 +15,8 @@ code.
|
|||||||
|
|
||||||
ispc is an open source compiler under the BSD license; see the file
|
ispc is an open source compiler under the BSD license; see the file
|
||||||
LICENSE.txt. ispc supports Windows, Mac, and Linux, with both x86 and
|
LICENSE.txt. ispc supports Windows, Mac, and Linux, with both x86 and
|
||||||
x86-64 targets. It currently supports the SSE2 and SSE4 instruction sets,
|
x86-64 targets. It currently supports the SSE2, SSE4, and AVX instruction
|
||||||
though support for AVX should be available soon.
|
sets.
|
||||||
|
|
||||||
For more information and examples, as well as a wiki and the bug database,
|
For more information and examples, as well as a wiki and the bug database,
|
||||||
see the ispc distribution site, http://ispc.github.com.
|
see the ispc distribution site, http://ispc.github.com.
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import sys
|
|||||||
import string
|
import string
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import platform
|
||||||
|
import os
|
||||||
|
|
||||||
length=0
|
length=0
|
||||||
|
|
||||||
@@ -14,8 +16,12 @@ target = re.sub("\.ll$", "", target)
|
|||||||
target = re.sub("\.c$", "", target)
|
target = re.sub("\.c$", "", target)
|
||||||
target = re.sub("-", "_", target)
|
target = re.sub("-", "_", target)
|
||||||
|
|
||||||
|
llvm_as="llvm-as"
|
||||||
|
if platform.system() == 'Windows' or string.find(platform.system(), "CYGWIN_NT") != -1:
|
||||||
|
llvm_as = os.getenv("LLVM_INSTALL_DIR").replace("\\", "/") + "/bin/" + llvm_as
|
||||||
|
|
||||||
try:
|
try:
|
||||||
as_out=subprocess.Popen([ "llvm-as", "-", "-o", "-"], stdout=subprocess.PIPE)
|
as_out=subprocess.Popen([llvm_as, "-", "-o", "-"], stdout=subprocess.PIPE)
|
||||||
except IOError:
|
except IOError:
|
||||||
print >> sys.stderr, "Couldn't open " + src
|
print >> sys.stderr, "Couldn't open " + src
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|||||||
2
decl.cpp
2
decl.cpp
@@ -237,7 +237,7 @@ Declarator::GetType(DeclSpecs *ds) const {
|
|||||||
sprintf(buf, "__anon_parameter_%d", i);
|
sprintf(buf, "__anon_parameter_%d", i);
|
||||||
sym = new Symbol(buf, pos);
|
sym = new Symbol(buf, pos);
|
||||||
Declarator *declarator = new Declarator(sym, sym->pos);
|
Declarator *declarator = new Declarator(sym, sym->pos);
|
||||||
sym->type = declarator->GetType(ds);
|
sym->type = declarator->GetType(d->declSpecs);
|
||||||
d->declarators.push_back(declarator);
|
d->declarators.push_back(declarator);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -1,3 +1,16 @@
|
|||||||
|
=== v1.0.9 === (26 September 2011)
|
||||||
|
|
||||||
|
The binary release of v1.0.9 is the first that supports AVX code
|
||||||
|
generation. Two targets are provided: "avx", which runs with a
|
||||||
|
programCount of 8, and "avx-x2" which runs 16 program instances
|
||||||
|
simultaneously. (This binary is also built using the in-progress LLVM 3.0
|
||||||
|
development libraries, while previous ones have been built with the
|
||||||
|
released 2.9 version of LLVM.)
|
||||||
|
|
||||||
|
This release has no other significant changes beyond a number of small
|
||||||
|
bugfixes (https://github.com/ispc/ispc/issues/100,
|
||||||
|
https://github.com/ispc/ispc/issues/101, https://github.com/ispc/ispc/issues/103.)
|
||||||
|
|
||||||
=== v1.0.8 === (19 September 2011)
|
=== v1.0.8 === (19 September 2011)
|
||||||
|
|
||||||
A number of improvements have been made to handling of 'if' statements in
|
A number of improvements have been made to handling of 'if' statements in
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ PROJECT_NAME = "Intel SPMD Program Compiler"
|
|||||||
# This could be handy for archiving the generated documentation or
|
# This could be handy for archiving the generated documentation or
|
||||||
# if some version control system is used.
|
# if some version control system is used.
|
||||||
|
|
||||||
PROJECT_NUMBER = 1.0.8
|
PROJECT_NUMBER = 1.0.9
|
||||||
|
|
||||||
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
|
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
|
||||||
# base path where the generated documentation will be put.
|
# base path where the generated documentation will be put.
|
||||||
|
|||||||
16
expr.cpp
16
expr.cpp
@@ -1305,6 +1305,17 @@ BinaryExpr::TypeCheck() {
|
|||||||
if (type0 == NULL || type1 == NULL)
|
if (type0 == NULL || type1 == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
if (dynamic_cast<const ReferenceType *>(type0) != NULL) {
|
||||||
|
arg0 = new DereferenceExpr(arg0, arg0->pos);
|
||||||
|
type0 = arg0->GetType();
|
||||||
|
assert(type0 != NULL);
|
||||||
|
}
|
||||||
|
if (dynamic_cast<const ReferenceType *>(type1) != NULL) {
|
||||||
|
arg1 = new DereferenceExpr(arg1, arg1->pos);
|
||||||
|
type1 = arg1->GetType();
|
||||||
|
assert(type1 != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case Shl:
|
case Shl:
|
||||||
case Shr:
|
case Shr:
|
||||||
@@ -4103,7 +4114,7 @@ lTypeConvAtomic(FunctionEmitContext *ctx, llvm::Value *exprVal,
|
|||||||
case AtomicType::TYPE_BOOL:
|
case AtomicType::TYPE_BOOL:
|
||||||
if (fromType->IsVaryingType() &&
|
if (fromType->IsVaryingType() &&
|
||||||
LLVMTypes::BoolVectorType == LLVMTypes::Int32VectorType)
|
LLVMTypes::BoolVectorType == LLVMTypes::Int32VectorType)
|
||||||
// If we have a bool vector of i32 element,s first truncate
|
// If we have a bool vector of i32 elements, first truncate
|
||||||
// down to a single bit
|
// down to a single bit
|
||||||
exprVal = ctx->TruncInst(exprVal, LLVMTypes::Int1VectorType, "bool_to_i1");
|
exprVal = ctx->TruncInst(exprVal, LLVMTypes::Int1VectorType, "bool_to_i1");
|
||||||
// And then do an unisgned int->float cast
|
// And then do an unisgned int->float cast
|
||||||
@@ -4163,9 +4174,6 @@ lTypeConvAtomic(FunctionEmitContext *ctx, llvm::Value *exprVal,
|
|||||||
case AtomicType::TYPE_UINT16:
|
case AtomicType::TYPE_UINT16:
|
||||||
case AtomicType::TYPE_UINT32:
|
case AtomicType::TYPE_UINT32:
|
||||||
case AtomicType::TYPE_UINT64:
|
case AtomicType::TYPE_UINT64:
|
||||||
if (fromType->IsVaryingType())
|
|
||||||
PerformanceWarning(pos, "Conversion from unsigned int64 to float is slow. "
|
|
||||||
"Use \"int64\" if possible");
|
|
||||||
cast = ctx->CastInst(llvm::Instruction::UIToFP, // unsigned int
|
cast = ctx->CastInst(llvm::Instruction::UIToFP, // unsigned int
|
||||||
exprVal, targetType, "uint2double");
|
exprVal, targetType, "uint2double");
|
||||||
break;
|
break;
|
||||||
|
|||||||
2
ispc.cpp
2
ispc.cpp
@@ -241,7 +241,9 @@ Target::GetTargetMachine() const {
|
|||||||
std::string featuresString = cpu + std::string(",") + attributes;
|
std::string featuresString = cpu + std::string(",") + attributes;
|
||||||
llvm::TargetMachine *targetMachine =
|
llvm::TargetMachine *targetMachine =
|
||||||
target->createTargetMachine(triple, featuresString);
|
target->createTargetMachine(triple, featuresString);
|
||||||
|
#ifndef ISPC_IS_WINDOWS
|
||||||
targetMachine->setRelocationModel(relocModel);
|
targetMachine->setRelocationModel(relocModel);
|
||||||
|
#endif // !ISPC_IS_WINDOWS
|
||||||
#endif
|
#endif
|
||||||
assert(targetMachine != NULL);
|
assert(targetMachine != NULL);
|
||||||
|
|
||||||
|
|||||||
24
ispc.vcxproj
24
ispc.vcxproj
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
@@ -31,12 +31,14 @@
|
|||||||
<ClCompile Include="opt.cpp" />
|
<ClCompile Include="opt.cpp" />
|
||||||
<ClCompile Include="parse.cc" />
|
<ClCompile Include="parse.cc" />
|
||||||
<CustomBuild Include="builtins-c.c">
|
<CustomBuild Include="builtins-c.c">
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%LLVM_INSTALL_DIR%\bin\clang -m32 -emit-llvm builtins-c.c -c -o - | %LLVM_INSTALL_DIR%\bin\llvm-dis - | python bitcode2cpp.py builtins-c-32.c > gen-bitcode-c-32.cpp</Command>
|
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%LLVM_INSTALL_DIR%\bin\clang -m32 -emit-llvm builtins-c.c -c -o - | %LLVM_INSTALL_DIR%\bin\llvm-dis - | python bitcode2cpp.py builtins-c-32.c > gen-bitcode-c-32.cpp;
|
||||||
|
%LLVM_INSTALL_DIR%\bin\clang -m64 -emit-llvm builtins-c.c -c -o - | %LLVM_INSTALL_DIR%\bin\llvm-dis - | python bitcode2cpp.py builtins-c-64.c > gen-bitcode-c-64.cpp</Command>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">clang builtins-c.c</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">clang builtins-c.c</Message>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%LLVM_INSTALL_DIR%\bin\clang -m32 -emit-llvm builtins-c.c -c -o - | %LLVM_INSTALL_DIR%\bin\llvm-dis - | python bitcode2cpp.py builtins-c-32.c > gen-bitcode-c-32.cpp</Command>
|
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%LLVM_INSTALL_DIR%\bin\clang -m32 -emit-llvm builtins-c.c -c -o - | %LLVM_INSTALL_DIR%\bin\llvm-dis - | python bitcode2cpp.py builtins-c-32.c > gen-bitcode-c-32.cpp;
|
||||||
|
%LLVM_INSTALL_DIR%\bin\clang -m64 -emit-llvm builtins-c.c -c -o - | %LLVM_INSTALL_DIR%\bin\llvm-dis - | python bitcode2cpp.py builtins-c-64.c > gen-bitcode-c-64.cpp</Command>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">clang builtins-c.c</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">clang builtins-c.c</Message>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">gen-bitcode-c.cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">gen-bitcode-c-32.cpp;gen-bitcore-c-64.cpp</Outputs>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">gen-bitcode-c.cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">gen-bitcode-c-32.cpp;gen-bitcore-c-64.cpp</Outputs>
|
||||||
</CustomBuild>
|
</CustomBuild>
|
||||||
<ClCompile Include="stmt.cpp" />
|
<ClCompile Include="stmt.cpp" />
|
||||||
<ClCompile Include="sym.cpp" />
|
<ClCompile Include="sym.cpp" />
|
||||||
@@ -61,9 +63,9 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<CustomBuild Include="stdlib.ispc">
|
<CustomBuild Include="stdlib.ispc">
|
||||||
<FileType>Document</FileType>
|
<FileType>Document</FileType>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">clang -E -x c %(Filename).ispc -DISPC=1 -DPI=3.1415926535 | python stdlib2cpp.py > gen-stdlib.cpp</Command>
|
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%LLVM_INSTALL_DIR%\bin\clang -E -x c %(Filename).ispc -DISPC=1 -DPI=3.1415926535 | python stdlib2cpp.py > gen-stdlib.cpp</Command>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">gen-stdlib.cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">gen-stdlib.cpp</Outputs>
|
||||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">clang -E -x c %(Filename).ispc -DISPC=1 -DPI=3.1415926535 | python stdlib2cpp.py > gen-stdlib.cpp</Command>
|
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%LLVM_INSTALL_DIR%\bin\clang -E -x c %(Filename).ispc -DISPC=1 -DPI=3.1415926535 | python stdlib2cpp.py > gen-stdlib.cpp</Command>
|
||||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">gen-stdlib.cpp</Outputs>
|
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">gen-stdlib.cpp</Outputs>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Building gen-stdlib.cpp</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Building gen-stdlib.cpp</Message>
|
||||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Building gen-stdlib.cpp</Message>
|
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Building gen-stdlib.cpp</Message>
|
||||||
@@ -194,7 +196,7 @@
|
|||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>NOMINMAX;LLVM_2_9</PreprocessorDefinitions>
|
<PreprocessorDefinitions>NOMINMAX;LLVM_3_0</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(LLVM_INSTALL_DIR)\include;.;.\winstuff;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(LLVM_INSTALL_DIR)\include;.;.\winstuff;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DisableSpecificWarnings>4146;4800;4996;4355;4624</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4146;4800;4996;4355;4624</DisableSpecificWarnings>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@@ -202,7 +204,7 @@
|
|||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalLibraryDirectories>$(LLVM_INSTALL_DIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(LLVM_INSTALL_DIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>clangFrontend.lib;clangDriver.lib;clangSerialization.lib;clangParse.lib;clangSema.lib;clangAnalysis.lib;clangAST.lib;clangLex.lib;clangBasic.lib;LLVMAnalysis.lib;LLVMArchive.lib;LLVMAsmPrinter.lib;LLVMBitReader.lib;LLVMBitWriter.lib;LLVMCodeGen.lib;LLVMCore.lib;LLVMExecutionEngine.lib;LLVMInstCombine.lib;LLVMInstrumentation.lib;LLVMipa.lib;LLVMipo.lib;LLVMLinker.lib;LLVMMC.lib;LLVMMCParser.lib;LLVMObject.lib;LLVMScalarOpts.lib;LLVMSelectionDAG.lib;LLVMSupport.lib;LLVMTarget.lib;LLVMTransformUtils.lib;LLVMX86ASMPrinter.lib;LLVMX86ASMParser.lib;LLVMX86Utils.lib;LLVMX86CodeGen.lib;LLVMX86Disassembler.lib;LLVMX86Info.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>clangFrontend.lib;clangDriver.lib;clangSerialization.lib;clangParse.lib;clangSema.lib;clangAnalysis.lib;clangAST.lib;clangLex.lib;clangBasic.lib;LLVMAnalysis.lib;LLVMArchive.lib;LLVMAsmParser.lib;LLVMAsmPrinter.lib;LLVMBitReader.lib;LLVMBitWriter.lib;LLVMCodeGen.lib;LLVMCore.lib;LLVMDebugInfo.lib;LLVMExecutionEngine.lib;LLVMInstCombine.lib;LLVMInstrumentation.lib;LLVMLinker.lib;LLVMMC.lib;LLVMMCDisassembler.lib;LLVMMCParser.lib;LLVMObject.lib;LLVMScalarOpts.lib;LLVMSelectionDAG.lib;LLVMSupport.lib;LLVMTarget.lib;LLVMTransformUtils.lib;LLVMX86ASMPrinter.lib;LLVMX86ASMParser.lib;LLVMX86Utils.lib;LLVMX86CodeGen.lib;LLVMX86Desc.lib;LLVMX86Disassembler.lib;LLVMX86Info.lib;LLVMipa.lib;LLVMipo.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
@@ -212,7 +214,7 @@
|
|||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>NOMINMAX;LLVM_2_9</PreprocessorDefinitions>
|
<PreprocessorDefinitions>NOMINMAX;LLVM_3_0</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(LLVM_INSTALL_DIR)\include;.;.\winstuff;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(LLVM_INSTALL_DIR)\include;.;.\winstuff;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DisableSpecificWarnings>4146;4800;4996;4355;4624</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4146;4800;4996;4355;4624</DisableSpecificWarnings>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@@ -222,7 +224,7 @@
|
|||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalLibraryDirectories>$(LLVM_INSTALL_DIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(LLVM_INSTALL_DIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>clangFrontend.lib;clangDriver.lib;clangSerialization.lib;clangParse.lib;clangSema.lib;clangAnalysis.lib;clangAST.lib;clangLex.lib;clangBasic.lib;LLVMAnalysis.lib;LLVMArchive.lib;LLVMAsmPrinter.lib;LLVMBitReader.lib;LLVMBitWriter.lib;LLVMCodeGen.lib;LLVMCore.lib;LLVMExecutionEngine.lib;LLVMInstCombine.lib;LLVMInstrumentation.lib;LLVMipa.lib;LLVMipo.lib;LLVMLinker.lib;LLVMMC.lib;LLVMMCParser.lib;LLVMObject.lib;LLVMScalarOpts.lib;LLVMSelectionDAG.lib;LLVMSupport.lib;LLVMTarget.lib;LLVMTransformUtils.lib;LLVMX86ASMPrinter.lib;LLVMX86ASMParser.lib;LLVMX86Utils.lib;LLVMX86CodeGen.lib;LLVMX86Disassembler.lib;LLVMX86Info.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>clangFrontend.lib;clangDriver.lib;clangSerialization.lib;clangParse.lib;clangSema.lib;clangAnalysis.lib;clangAST.lib;clangLex.lib;clangBasic.lib;LLVMAnalysis.lib;LLVMArchive.lib;LLVMAsmParser.lib;LLVMAsmPrinter.lib;LLVMBitReader.lib;LLVMBitWriter.lib;LLVMCodeGen.lib;LLVMCore.lib;LLVMDebugInfo.lib;LLVMExecutionEngine.lib;LLVMInstCombine.lib;LLVMInstrumentation.lib;LLVMLinker.lib;LLVMMC.lib;LLVMMCDisassembler.lib;LLVMMCParser.lib;LLVMObject.lib;LLVMScalarOpts.lib;LLVMSelectionDAG.lib;LLVMSupport.lib;LLVMTarget.lib;LLVMTransformUtils.lib;LLVMX86ASMPrinter.lib;LLVMX86ASMParser.lib;LLVMX86Utils.lib;LLVMX86CodeGen.lib;LLVMX86Desc.lib;LLVMX86Disassembler.lib;LLVMX86Info.lib;LLVMipa.lib;LLVMipo.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
|||||||
@@ -75,7 +75,6 @@ extern "C" {
|
|||||||
#include <llvm/Instructions.h>
|
#include <llvm/Instructions.h>
|
||||||
#include <llvm/ExecutionEngine/ExecutionEngine.h>
|
#include <llvm/ExecutionEngine/ExecutionEngine.h>
|
||||||
#if defined(LLVM_3_0) || defined(LLVM_3_0svn)
|
#if defined(LLVM_3_0) || defined(LLVM_3_0svn)
|
||||||
#include <llvm/ExecutionEngine/MCJIT.h>
|
|
||||||
#include <llvm/Support/TargetRegistry.h>
|
#include <llvm/Support/TargetRegistry.h>
|
||||||
#include <llvm/Support/TargetSelect.h>
|
#include <llvm/Support/TargetSelect.h>
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -52,14 +52,14 @@
|
|||||||
</PrecompiledHeader>
|
</PrecompiledHeader>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>ISPC_IS_WINDOWS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>LLVM_3_0;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(LLVM_INSTALL_DIR)/include</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(LLVM_INSTALL_DIR)/include</AdditionalIncludeDirectories>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalLibraryDirectories>$(LLVM_INSTALL_DIR)/lib</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(LLVM_INSTALL_DIR)/lib</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>LLVMAnalysis.lib;LLVMArchive.lib;LLVMAsmPrinter.lib;LLVMBitReader.lib;LLVMBitWriter.lib;LLVMCodeGen.lib;LLVMCore.lib;LLVMExecutionEngine.lib;LLVMInstCombine.lib;LLVMInstrumentation.lib;LLVMipa.lib;LLVMipo.lib;LLVMJIT.lib;LLVMLinker.lib;LLVMMC.lib;LLVMMCParser.lib;LLVMObject.lib;LLVMScalarOpts.lib;LLVMSelectionDAG.lib;LLVMSupport.lib;LLVMTarget.lib;LLVMTransformUtils.lib;LLVMX86ASMPrinter.lib;LLVMX86ASMParser.lib;LLVMX86Utils.lib;LLVMX86CodeGen.lib;LLVMX86Disassembler.lib;LLVMX86Info.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>LLVMAnalysis.lib;LLVMArchive.lib;LLVMAsmPrinter.lib;LLVMBitReader.lib;LLVMBitWriter.lib;LLVMCodeGen.lib;LLVMCore.lib;LLVMExecutionEngine.lib;LLVMInstCombine.lib;LLVMInstrumentation.lib;LLVMipa.lib;LLVMipo.lib;LLVMJIT.lib;LLVMLinker.lib;LLVMMC.lib;LLVMMCParser.lib;LLVMObject.lib;LLVMScalarOpts.lib;LLVMSelectionDAG.lib;LLVMSupport.lib;LLVMTarget.lib;LLVMTransformUtils.lib;LLVMX86ASMPrinter.lib;LLVMX86ASMParser.lib;LLVMX86Utils.lib;LLVMX86CodeGen.lib;LLVMX86Disassembler.lib;LLVMX86Desc.lib;LLVMX86Info.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>ISPC_IS_WINDOWS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>LLVM_3_0;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(LLVM_INSTALL_DIR)/include</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(LLVM_INSTALL_DIR)/include</AdditionalIncludeDirectories>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalLibraryDirectories>$(LLVM_INSTALL_DIR)/lib</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(LLVM_INSTALL_DIR)/lib</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>LLVMAnalysis.lib;LLVMArchive.lib;LLVMAsmPrinter.lib;LLVMBitReader.lib;LLVMBitWriter.lib;LLVMCodeGen.lib;LLVMCore.lib;LLVMExecutionEngine.lib;LLVMInstCombine.lib;LLVMInstrumentation.lib;LLVMipa.lib;LLVMipo.lib;LLVMJIT.lib;LLVMLinker.lib;LLVMMC.lib;LLVMMCParser.lib;LLVMObject.lib;LLVMScalarOpts.lib;LLVMSelectionDAG.lib;LLVMSupport.lib;LLVMTarget.lib;LLVMTransformUtils.lib;LLVMX86ASMPrinter.lib;LLVMX86ASMParser.lib;LLVMX86Utils.lib;LLVMX86CodeGen.lib;LLVMX86Disassembler.lib;LLVMX86Info.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>LLVMAnalysis.lib;LLVMArchive.lib;LLVMAsmPrinter.lib;LLVMBitReader.lib;LLVMBitWriter.lib;LLVMCodeGen.lib;LLVMCore.lib;LLVMExecutionEngine.lib;LLVMInstCombine.lib;LLVMInstrumentation.lib;LLVMipa.lib;LLVMipo.lib;LLVMJIT.lib;LLVMLinker.lib;LLVMMC.lib;LLVMMCParser.lib;LLVMObject.lib;LLVMScalarOpts.lib;LLVMSelectionDAG.lib;LLVMSupport.lib;LLVMTarget.lib;LLVMTransformUtils.lib;LLVMX86ASMPrinter.lib;LLVMX86ASMParser.lib;LLVMX86Utils.lib;LLVMX86CodeGen.lib;LLVMX86Disassembler.lib;LLVMX86Desc.lib;LLVMX86Info.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
|||||||
4
main.cpp
4
main.cpp
@@ -96,7 +96,9 @@ static void usage(int ret) {
|
|||||||
printf(" disable-uniform-memory-optimizations\tDisable uniform-based coherent memory access\n");
|
printf(" disable-uniform-memory-optimizations\tDisable uniform-based coherent memory access\n");
|
||||||
printf(" disable-masked-store-optimizations\tDisable lowering to regular stores when possible\n");
|
printf(" disable-masked-store-optimizations\tDisable lowering to regular stores when possible\n");
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef ISPC_IS_WINDOWS
|
||||||
printf(" [--pic]\t\t\t\tGenerate position-independent code\n");
|
printf(" [--pic]\t\t\t\tGenerate position-independent code\n");
|
||||||
|
#endif // !ISPC_IS_WINDOWS
|
||||||
printf(" [--target=<isa>]\t\t\tSelect target ISA. <isa>={%s}\n", Target::SupportedTargetISAs());
|
printf(" [--target=<isa>]\t\t\tSelect target ISA. <isa>={%s}\n", Target::SupportedTargetISAs());
|
||||||
printf(" [--version]\t\t\t\tPrint ispc version\n");
|
printf(" [--version]\t\t\t\tPrint ispc version\n");
|
||||||
printf(" [--woff]\t\t\t\tDisable warnings\n");
|
printf(" [--woff]\t\t\t\tDisable warnings\n");
|
||||||
@@ -302,8 +304,10 @@ int main(int Argc, char *Argv[]) {
|
|||||||
g->includeStdlib = false;
|
g->includeStdlib = false;
|
||||||
else if (!strcmp(argv[i], "--nocpp"))
|
else if (!strcmp(argv[i], "--nocpp"))
|
||||||
g->runCPP = false;
|
g->runCPP = false;
|
||||||
|
#ifndef ISPC_IS_WINDOWS
|
||||||
else if (!strcmp(argv[i], "--pic"))
|
else if (!strcmp(argv[i], "--pic"))
|
||||||
generatePIC = true;
|
generatePIC = true;
|
||||||
|
#endif // !ISPC_IS_WINDOWS
|
||||||
else if (!strcmp(argv[i], "-v") || !strcmp(argv[i], "--version")) {
|
else if (!strcmp(argv[i], "-v") || !strcmp(argv[i], "--version")) {
|
||||||
printf("Intel(r) SPMD Program Compiler (ispc) build %s (%s)\n",
|
printf("Intel(r) SPMD Program Compiler (ispc) build %s (%s)\n",
|
||||||
BUILD_DATE, BUILD_VERSION);
|
BUILD_DATE, BUILD_VERSION);
|
||||||
|
|||||||
21
module.cpp
21
module.cpp
@@ -78,6 +78,7 @@
|
|||||||
#include <llvm/Analysis/Verifier.h>
|
#include <llvm/Analysis/Verifier.h>
|
||||||
#include <llvm/Support/CFG.h>
|
#include <llvm/Support/CFG.h>
|
||||||
#include <clang/Frontend/CompilerInstance.h>
|
#include <clang/Frontend/CompilerInstance.h>
|
||||||
|
#include <clang/Frontend/TextDiagnosticPrinter.h>
|
||||||
#include <clang/Frontend/Utils.h>
|
#include <clang/Frontend/Utils.h>
|
||||||
#include <clang/Basic/TargetInfo.h>
|
#include <clang/Basic/TargetInfo.h>
|
||||||
#include <llvm/Support/ToolOutputFile.h>
|
#include <llvm/Support/ToolOutputFile.h>
|
||||||
@@ -1388,23 +1389,26 @@ Module::execPreprocessor(const char* infilename, llvm::raw_string_ostream* ostre
|
|||||||
std::string error;
|
std::string error;
|
||||||
|
|
||||||
inst.createFileManager();
|
inst.createFileManager();
|
||||||
inst.createDiagnostics(0, NULL);
|
|
||||||
clang::TargetOptions& options = inst.getTargetOpts();
|
|
||||||
|
|
||||||
|
llvm::raw_fd_ostream stderrRaw(2, false);
|
||||||
|
clang::TextDiagnosticPrinter *diagPrinter =
|
||||||
|
new clang::TextDiagnosticPrinter(stderrRaw, clang::DiagnosticOptions());
|
||||||
|
inst.createDiagnostics(0, NULL, diagPrinter);
|
||||||
|
|
||||||
|
clang::TargetOptions &options = inst.getTargetOpts();
|
||||||
llvm::Triple triple(module->getTargetTriple());
|
llvm::Triple triple(module->getTargetTriple());
|
||||||
if (triple.getTriple().empty())
|
if (triple.getTriple().empty())
|
||||||
triple.setTriple(llvm::sys::getHostTriple());
|
triple.setTriple(llvm::sys::getHostTriple());
|
||||||
|
|
||||||
options.Triple = triple.getTriple();
|
options.Triple = triple.getTriple();
|
||||||
|
|
||||||
clang::TargetInfo* target
|
clang::TargetInfo *target =
|
||||||
= clang::TargetInfo::CreateTargetInfo(inst.getDiagnostics(), options);
|
clang::TargetInfo::CreateTargetInfo(inst.getDiagnostics(), options);
|
||||||
|
|
||||||
inst.setTarget(target);
|
inst.setTarget(target);
|
||||||
inst.createSourceManager(inst.getFileManager());
|
inst.createSourceManager(inst.getFileManager());
|
||||||
inst.InitializeSourceManager(infilename);
|
inst.InitializeSourceManager(infilename);
|
||||||
|
|
||||||
clang::PreprocessorOptions& opts = inst.getPreprocessorOpts();
|
clang::PreprocessorOptions &opts = inst.getPreprocessorOpts();
|
||||||
|
|
||||||
//Add defs for ISPC and PI
|
//Add defs for ISPC and PI
|
||||||
opts.addMacroDef("ISPC");
|
opts.addMacroDef("ISPC");
|
||||||
@@ -1417,7 +1421,10 @@ Module::execPreprocessor(const char* infilename, llvm::raw_string_ostream* ostre
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
inst.createPreprocessor();
|
inst.createPreprocessor();
|
||||||
|
|
||||||
|
clang::LangOptions langOptions;
|
||||||
|
diagPrinter->BeginSourceFile(langOptions, &inst.getPreprocessor());
|
||||||
clang::DoPrintPreprocessedInput(inst.getPreprocessor(),
|
clang::DoPrintPreprocessedInput(inst.getPreprocessor(),
|
||||||
ostream, inst.getPreprocessorOutputOpts());
|
ostream, inst.getPreprocessorOutputOpts());
|
||||||
|
diagPrinter->EndSourceFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
21
parse.yy
21
parse.yy
@@ -177,6 +177,7 @@ static const char *lParamListTokens[] = {
|
|||||||
%type <stmt> statement labeled_statement compound_statement for_init_statement
|
%type <stmt> statement labeled_statement compound_statement for_init_statement
|
||||||
%type <stmt> expression_statement selection_statement iteration_statement
|
%type <stmt> expression_statement selection_statement iteration_statement
|
||||||
%type <stmt> jump_statement statement_list declaration_statement print_statement
|
%type <stmt> jump_statement statement_list declaration_statement print_statement
|
||||||
|
%type <stmt> sync_statement
|
||||||
|
|
||||||
%type <declaration> declaration parameter_declaration
|
%type <declaration> declaration parameter_declaration
|
||||||
%type <declarators> init_declarator_list
|
%type <declarators> init_declarator_list
|
||||||
@@ -436,8 +437,6 @@ assignment_expression
|
|||||||
|
|
||||||
expression
|
expression
|
||||||
: assignment_expression
|
: assignment_expression
|
||||||
| TOKEN_SYNC
|
|
||||||
{ $$ = new SyncExpr(@1); }
|
|
||||||
| expression ',' assignment_expression
|
| expression ',' assignment_expression
|
||||||
{ $$ = new BinaryExpr(BinaryExpr::Comma, $1, $3, @2); }
|
{ $$ = new BinaryExpr(BinaryExpr::Comma, $1, $3, @2); }
|
||||||
;
|
;
|
||||||
@@ -928,9 +927,13 @@ parameter_list
|
|||||||
builtinTokens.push_back(*token);
|
builtinTokens.push_back(*token);
|
||||||
++token;
|
++token;
|
||||||
}
|
}
|
||||||
|
if (strlen(yytext) == 0)
|
||||||
|
Error(@1, "Syntax error--premature end of file.");
|
||||||
|
else {
|
||||||
std::vector<std::string> alternates = MatchStrings(yytext, builtinTokens);
|
std::vector<std::string> alternates = MatchStrings(yytext, builtinTokens);
|
||||||
std::string alts = lGetAlternates(alternates);
|
std::string alts = lGetAlternates(alternates);
|
||||||
Error(@1, "Syntax error--token \"%s\" unknown.%s", yytext, alts.c_str());
|
Error(@1, "Syntax error--token \"%s\" unknown.%s", yytext, alts.c_str());
|
||||||
|
}
|
||||||
$$ = NULL;
|
$$ = NULL;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
@@ -1019,6 +1022,7 @@ statement
|
|||||||
| jump_statement
|
| jump_statement
|
||||||
| declaration_statement
|
| declaration_statement
|
||||||
| print_statement
|
| print_statement
|
||||||
|
| sync_statement
|
||||||
| error
|
| error
|
||||||
{
|
{
|
||||||
std::vector<std::string> builtinTokens;
|
std::vector<std::string> builtinTokens;
|
||||||
@@ -1027,9 +1031,13 @@ statement
|
|||||||
builtinTokens.push_back(*token);
|
builtinTokens.push_back(*token);
|
||||||
++token;
|
++token;
|
||||||
}
|
}
|
||||||
|
if (strlen(yytext) == 0)
|
||||||
|
Error(@1, "Syntax error--premature end of file.");
|
||||||
|
else {
|
||||||
std::vector<std::string> alternates = MatchStrings(yytext, builtinTokens);
|
std::vector<std::string> alternates = MatchStrings(yytext, builtinTokens);
|
||||||
std::string alts = lGetAlternates(alternates);
|
std::string alts = lGetAlternates(alternates);
|
||||||
Error(@1, "Syntax error--token \"%s\" unknown.%s", yytext, alts.c_str());
|
Error(@1, "Syntax error--token \"%s\" unknown.%s", yytext, alts.c_str());
|
||||||
|
}
|
||||||
$$ = NULL;
|
$$ = NULL;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
@@ -1155,6 +1163,11 @@ jump_statement
|
|||||||
{ $$ = new ReturnStmt($2, true, @1); }
|
{ $$ = new ReturnStmt($2, true, @1); }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
sync_statement
|
||||||
|
: TOKEN_SYNC
|
||||||
|
{ $$ = new ExprStmt(new SyncExpr(@1), @1); }
|
||||||
|
;
|
||||||
|
|
||||||
print_statement
|
print_statement
|
||||||
: TOKEN_PRINT '(' string_constant ')'
|
: TOKEN_PRINT '(' string_constant ')'
|
||||||
{
|
{
|
||||||
@@ -1177,10 +1190,14 @@ translation_unit
|
|||||||
builtinTokens.push_back(*token);
|
builtinTokens.push_back(*token);
|
||||||
++token;
|
++token;
|
||||||
}
|
}
|
||||||
|
if (strlen(yytext) == 0)
|
||||||
|
Error(@1, "Syntax error--premature end of file.");
|
||||||
|
else {
|
||||||
std::vector<std::string> alternates = MatchStrings(yytext, builtinTokens);
|
std::vector<std::string> alternates = MatchStrings(yytext, builtinTokens);
|
||||||
std::string alts = lGetAlternates(alternates);
|
std::string alts = lGetAlternates(alternates);
|
||||||
Error(@1, "Syntax error--token \"%s\" unknown.%s", yytext, alts.c_str());
|
Error(@1, "Syntax error--token \"%s\" unknown.%s", yytext, alts.c_str());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
external_declaration
|
external_declaration
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import random
|
|||||||
import string
|
import string
|
||||||
import mutex
|
import mutex
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import platform
|
||||||
|
|
||||||
parser = OptionParser()
|
parser = OptionParser()
|
||||||
parser.add_option("-r", "--random-shuffle", dest="random", help="Randomly order tests",
|
parser.add_option("-r", "--random-shuffle", dest="random", help="Randomly order tests",
|
||||||
@@ -137,8 +138,10 @@ def run_tasks_from_queue(queue):
|
|||||||
gcc_arch = '-m32'
|
gcc_arch = '-m32'
|
||||||
else:
|
else:
|
||||||
gcc_arch = '-m64'
|
gcc_arch = '-m64'
|
||||||
gcc_cmd = "g++ -Wl,-no_pie %s test_static.cpp -DTEST_SIG=%d %s.o -o %s" % \
|
gcc_cmd = "g++ %s test_static.cpp -DTEST_SIG=%d %s.o -o %s" % \
|
||||||
(gcc_arch, match, filename, exe_name)
|
(gcc_arch, match, filename, exe_name)
|
||||||
|
if platform.system() == 'Darwin':
|
||||||
|
gcc_cmd += ' -Wl,-no_pie'
|
||||||
if should_fail:
|
if should_fail:
|
||||||
gcc_cmd += " -DEXPECT_FAILURE"
|
gcc_cmd += " -DEXPECT_FAILURE"
|
||||||
|
|
||||||
|
|||||||
1
type.cpp
1
type.cpp
@@ -1833,6 +1833,7 @@ FunctionType::LLVMFunctionType(llvm::LLVMContext *ctx, bool includeMask) const {
|
|||||||
for (unsigned int i = 0; i < argTypes.size(); ++i) {
|
for (unsigned int i = 0; i < argTypes.size(); ++i) {
|
||||||
if (!argTypes[i])
|
if (!argTypes[i])
|
||||||
return NULL;
|
return NULL;
|
||||||
|
assert(argTypes[i] != AtomicType::Void);
|
||||||
|
|
||||||
LLVM_TYPE_CONST llvm::Type *t = argTypes[i]->LLVMType(ctx);
|
LLVM_TYPE_CONST llvm::Type *t = argTypes[i]->LLVMType(ctx);
|
||||||
if (!t)
|
if (!t)
|
||||||
|
|||||||
4
util.cpp
4
util.cpp
@@ -344,6 +344,10 @@ StringEditDistance(const std::string &str1, const std::string &str2, int maxDist
|
|||||||
|
|
||||||
std::vector<std::string>
|
std::vector<std::string>
|
||||||
MatchStrings(const std::string &str, const std::vector<std::string> &options) {
|
MatchStrings(const std::string &str, const std::vector<std::string> &options) {
|
||||||
|
if (str.size() == 0 || (str.size() == 1 && !isalpha(str[0])))
|
||||||
|
// don't even try...
|
||||||
|
return std::vector<std::string>();
|
||||||
|
|
||||||
const int maxDelta = 2;
|
const int maxDelta = 2;
|
||||||
std::vector<std::string> matches[maxDelta+1];
|
std::vector<std::string> matches[maxDelta+1];
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user