diff --git a/hpvm/CMakeLists.txt b/hpvm/CMakeLists.txt index 3d304fa99b61884a8bb9c26d57ae0141ad551bdd..d63675b34275c3f83c10ca83005bbfe563777554 100644 --- a/hpvm/CMakeLists.txt +++ b/hpvm/CMakeLists.txt @@ -1,4 +1,14 @@ include_directories(./include/) + +# Generate TENSOR_RT_PREFIX into config.h +set(TENSOR_RT_PREFIX ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) +set(TENSOR_RT_LL ${TENSOR_RT_PREFIX}/tensor_runtime.ll) +configure_file( + ./include/Config.h.in + ${CMAKE_CURRENT_BINARY_DIR}/Config.h +) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + add_subdirectory(lib) add_subdirectory(projects) add_subdirectory(tools) diff --git a/hpvm/include/Config.h.in b/hpvm/include/Config.h.in new file mode 100644 index 0000000000000000000000000000000000000000..b4b41b4f39cfee24651aa756ff0d6fc81dfb918a --- /dev/null +++ b/hpvm/include/Config.h.in @@ -0,0 +1 @@ +#define TENSOR_RT_LL "@TENSOR_RT_LL@" diff --git a/hpvm/projects/hpvm-tensor-rt/CMakeLists.txt b/hpvm/projects/hpvm-tensor-rt/CMakeLists.txt index dd774f8ffa8fc04d39c3c28a8a40d8bed28c6c2f..e42ced2737bb2e83d5cc4dd281ad475c7e88dce6 100644 --- a/hpvm/projects/hpvm-tensor-rt/CMakeLists.txt +++ b/hpvm/projects/hpvm-tensor-rt/CMakeLists.txt @@ -129,23 +129,26 @@ target_compile_options(tensor_runtime PRIVATE ${OpenMP_CXX_FLAGS}) target_link_libraries(tensor_runtime ${LINK_LIBS} ${OpenMP_CXX_FLAGS}) target_compile_definitions(tensor_runtime PRIVATE -DONLINE_PROFILING=false -DFP16_tuning=true) -if(LLVM_BUILD_DIR) # Defined in ../CMakeLists.txt +if(LLVM_BUILD_DIR) # Defined in ../CMakeLists.txt. This means we're compiling in LLVM get_filename_component(LLVM_CLANG_XX ${LLVM_BUILD_DIR}/bin/clang++ REALPATH) - set(GENERATE_LL 1) + # It's important that tensor_runtime.ll goes here if we're compiling with LLVM + # Some HPVM passes look for tensor_runtime.ll in this folder (which is usually build/lib) + set(TENSOR_RT_LL_PREFIX ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) else() # Surely if we're compiling outside of hpvm, then we need the system-wide clang. - # Use it but check version 9.0 first + # Use it but check version 9 first execute_process(COMMAND clang++ --version OUTPUT_VARIABLE clang_full_version_string ERROR_QUIET) string(REGEX REPLACE ".*clang version ([0-9]+\\.[0-9]+).*" "\\1" CLANG_VERSION_STRING ${clang_full_version_string}) if(CLANG_VERSION_STRING VERSION_EQUAL 9) set(LLVM_CLANG_XX clang++) - set(GENERATE_LL 1) + set(TENSOR_RT_LL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/lib) else() message(WARNING "System clang++ of version 9 not found; skipping tensor_runtime.ll generation") - set(GENERATE_LL 0) endif() endif() -if(GENERATE_LL) +# If some clang-9 is found, create a tensor_runtime.ll from tensor_signatures.cc +if(LLVM_CLANG_XX) + message(STATUS "Creating tensor_runtime.ll in ${TENSOR_RT_LL_PREFIX}") foreach(dir ${INCLUDES}) list(APPEND INCLUDE_COMPILER_STRINGS "-I${dir}") endforeach() @@ -153,7 +156,7 @@ if(GENERATE_LL) TARGET tensor_runtime POST_BUILD COMMAND ${LLVM_CLANG_XX} ${INCLUDE_COMPILER_STRINGS} -S -emit-llvm ${CMAKE_CURRENT_SOURCE_DIR}/tensor_runtime/include/tensor_signatures.cc - -o ${CMAKE_CURRENT_SOURCE_DIR}/lib/tensor_runtime.ll + -o ${TENSOR_RT_LL_PREFIX}/tensor_runtime.ll ) endif() diff --git a/hpvm/projects/hpvm-tensor-rt/lib/tensor_runtime.ll b/hpvm/projects/hpvm-tensor-rt/lib/tensor_runtime.ll deleted file mode 100644 index e0452ac7ff55d079075c7834d095c57c3bb87614..0000000000000000000000000000000000000000 --- a/hpvm/projects/hpvm-tensor-rt/lib/tensor_runtime.ll +++ /dev/null @@ -1,276 +0,0 @@ -; ModuleID = '/home/evanzhao/UIUC/approxtuner/hpvm/hpvm/llvm/tools/hpvm/projects/hpvm-tensor-rt/tensor_runtime/include/tensor_signatures.cc' -source_filename = "/home/evanzhao/UIUC/approxtuner/hpvm/hpvm/llvm/tools/hpvm/projects/hpvm-tensor-rt/tensor_runtime/include/tensor_signatures.cc" -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -%"class.std::ios_base::Init" = type { i8 } - -@_ZStL8__ioinit = internal global %"class.std::ios_base::Init" zeroinitializer, align 1 -@__dso_handle = external hidden global i8 -@llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__sub_I_tensor_signatures.cc, i8* null }] - -; Function Attrs: noinline uwtable -define internal void @__cxx_global_var_init() #0 section ".text.startup" { -entry: - call void @_ZNSt8ios_base4InitC1Ev(%"class.std::ios_base::Init"* @_ZStL8__ioinit) - %0 = call i32 @__cxa_atexit(void (i8*)* bitcast (void (%"class.std::ios_base::Init"*)* @_ZNSt8ios_base4InitD1Ev to void (i8*)*), i8* getelementptr inbounds (%"class.std::ios_base::Init", %"class.std::ios_base::Init"* @_ZStL8__ioinit, i32 0, i32 0), i8* @__dso_handle) #3 - ret void -} - -declare dso_local void @_ZNSt8ios_base4InitC1Ev(%"class.std::ios_base::Init"*) unnamed_addr #1 - -; Function Attrs: nounwind -declare dso_local void @_ZNSt8ios_base4InitD1Ev(%"class.std::ios_base::Init"*) unnamed_addr #2 - -; Function Attrs: nounwind -declare dso_local i32 @__cxa_atexit(void (i8*)*, i8*, i8*) #3 - -; Function Attrs: noinline nounwind optnone uwtable -define dso_local void @_Z13dummyFunctionv() #4 { -entry: - %initRT = alloca i8*, align 8 - %cleanRT = alloca i8*, align 8 - %initApproxRT = alloca i8*, align 8 - %cleanApproxRT = alloca i8*, align 8 - %initRTController = alloca i8*, align 8 - %cleanRTController = alloca i8*, align 8 - %request_tensorPtr = alloca i8*, align 8 - %startProf = alloca i8*, align 8 - %stopProf = alloca i8*, align 8 - %create2Dptr = alloca i8*, align 8 - %create3Dptr = alloca i8*, align 8 - %create4Dptr = alloca i8*, align 8 - %initTensorPtr = alloca i8*, align 8 - %tensorSplitPtr = alloca i8*, align 8 - %tensorConcatPtr = alloca i8*, align 8 - %tensorConvPtr = alloca i8*, align 8 - %tensorHConvPtr = alloca i8*, align 8 - %tensorPoolPtr = alloca i8*, align 8 - %tensorHalfPoolPtr = alloca i8*, align 8 - %tensorLRNPtr = alloca i8*, align 8 - %tensorGemmPr = alloca i8*, align 8 - %tensorGemmCPUPtr = alloca i8*, align 8 - %tensorGemmGPUPtr = alloca i8*, align 8 - %tensorHgemmPtr = alloca i8*, align 8 - %tensorGemmBiasPtr = alloca i8*, align 8 - %tensorAddPtr = alloca i8*, align 8 - %tensorHalfAddPtr = alloca i8*, align 8 - %tensorReluPtr = alloca i8*, align 8 - %tensorRelu2Ptr = alloca i8*, align 8 - %tensorHalfRelu2Ptr = alloca i8*, align 8 - %tensorTanhPtr = alloca i8*, align 8 - %tensorHalfTanhPtr = alloca i8*, align 8 - %tensorSoftmaxPtr = alloca i8*, align 8 - %tensorBatchNormPtr = alloca i8*, align 8 - %tensorAddErrorPtr = alloca i8*, align 8 - %ConvLayer = alloca i8*, align 8 - %FCLayer = alloca i8*, align 8 - %ConvLayer_ = alloca i8*, align 8 - %ConvLayer2 = alloca i8*, align 8 - %GroupConvLayer = alloca i8*, align 8 - %FCLayer2 = alloca i8*, align 8 - %AddWrapper = alloca i8*, align 8 - %ReluWrapper = alloca i8*, align 8 - %TanhWrapper = alloca i8*, align 8 - %BatchNormWrapper = alloca i8*, align 8 - %PoolingWrapper = alloca i8*, align 8 - %softmaxWrapper = alloca i8*, align 8 - %tensorFft = alloca i8*, align 8 - %tensorReduce = alloca i8*, align 8 - %tensorProjectiveT = alloca i8*, align 8 - %tensorMap1 = alloca i8*, align 8 - %tensorMap2 = alloca i8*, align 8 - %tensorMap3 = alloca i8*, align 8 - %tensorStencil = alloca i8*, align 8 - %tensorCosineT = alloca i8*, align 8 - %tensorNodeID = alloca i8*, align 8 - store i8* bitcast (void (i32)* @llvm_hpvm_initTensorRt to i8*), i8** %initRT, align 8 - store i8* bitcast (void ()* @llvm_hpvm_cleanupTensorRt to i8*), i8** %cleanRT, align 8 - store i8* bitcast (void (i32)* @llvm_hpvm_initApproxhpvmRt to i8*), i8** %initApproxRT, align 8 - store i8* bitcast (void ()* @llvm_hpvm_cleanupApproxhpvmRt to i8*), i8** %cleanApproxRT, align 8 - store i8* bitcast (void (i8*, i8*)* @llvm_hpvm_initializeRuntimeController to i8*), i8** %initRTController, align 8 - store i8* bitcast (void ()* @llvm_hpvm_clearRuntimeController to i8*), i8** %cleanRTController, align 8 - store i8* bitcast (void (i8*, i32)* @hpvm_request_tensor to i8*), i8** %request_tensorPtr, align 8 - store i8* bitcast (void ()* @startProfiling to i8*), i8** %startProf, align 8 - store i8* bitcast (void ()* @stopProfiling to i8*), i8** %stopProf, align 8 - store i8* bitcast (i8* (i32, i64, i64)* @create2DTensor to i8*), i8** %create2Dptr, align 8 - store i8* bitcast (i8* (i32, i64, i64, i64)* @create3DTensor to i8*), i8** %create3Dptr, align 8 - store i8* bitcast (i8* (i32, i32, i64, i64, i64, i64)* @create4DTensor to i8*), i8** %create4Dptr, align 8 - store i8* bitcast (void (i8*, i8*, i64)* @initTensorData to i8*), i8** %initTensorPtr, align 8 - store i8* bitcast (i8** (i8*, i32, i32)* @tensorSplit to i8*), i8** %tensorSplitPtr, align 8 - store i8* bitcast (i8* (i8**, i32, i32)* @tensorConcat to i8*), i8** %tensorConcatPtr, align 8 - store i8* bitcast (i8* (i8*, i8*, i32, i32, i32, i32, i32, i32)* @tensorConvolution to i8*), i8** %tensorConvPtr, align 8 - store i8* bitcast (i8* (i8*, i8*, i32, i32, i32, i32, i32, i32)* @tensorHalfConvolution to i8*), i8** %tensorHConvPtr, align 8 - store i8* bitcast (i8* (i8*, i32, i32, i32, i32, i32, i32, i32)* @tensorPooling to i8*), i8** %tensorPoolPtr, align 8 - store i8* bitcast (i8* (i8*, i32, i32, i32, i32, i32, i32, i32)* @tensorHalfPooling to i8*), i8** %tensorHalfPoolPtr, align 8 - store i8* bitcast (i8* (i8*, i32, double, double, double)* @tensorLRN to i8*), i8** %tensorLRNPtr, align 8 - store i8* bitcast (i8* (i8*, i8*)* @tensorGemm to i8*), i8** %tensorGemmPr, align 8 - store i8* bitcast (i8* (i8*, i8*)* @tensorGemmCPU to i8*), i8** %tensorGemmCPUPtr, align 8 - store i8* bitcast (i8* (i8*, i8*)* @tensorGemmGPU to i8*), i8** %tensorGemmGPUPtr, align 8 - store i8* bitcast (i8* (i8*, i8*)* @tensorHalfGemm to i8*), i8** %tensorHgemmPtr, align 8 - store i8* bitcast (i8* (i8*, i8*)* @tensorGemmBias to i8*), i8** %tensorGemmBiasPtr, align 8 - store i8* bitcast (i8* (i8*, i8*)* @tensorAdd to i8*), i8** %tensorAddPtr, align 8 - store i8* bitcast (i8* (i8*, i8*)* @tensorHalfAdd to i8*), i8** %tensorHalfAddPtr, align 8 - store i8* bitcast (i8* (i8*)* @tensorRelu to i8*), i8** %tensorReluPtr, align 8 - store i8* bitcast (i8* (i8*, float, float)* @tensorRelu2 to i8*), i8** %tensorRelu2Ptr, align 8 - store i8* bitcast (i8* (i8*, float, float)* @tensorHalfRelu2 to i8*), i8** %tensorHalfRelu2Ptr, align 8 - store i8* bitcast (i8* (i8*)* @tensorTanh to i8*), i8** %tensorTanhPtr, align 8 - store i8* bitcast (i8* (i8*)* @tensorHalfTanh to i8*), i8** %tensorHalfTanhPtr, align 8 - store i8* bitcast (i8* (i8*)* @tensorSoftmax to i8*), i8** %tensorSoftmaxPtr, align 8 - store i8* bitcast (i8* (i8*, i8*, i8*, i8*, i8*, double)* @tensorBatchNorm to i8*), i8** %tensorBatchNormPtr, align 8 - store i8* bitcast (i8* (i8*, i32)* @tensorAddError to i8*), i8** %tensorAddErrorPtr, align 8 - store i8* bitcast (i8* (i8*, float, float, i8*, float, float, i8*, float, float, i32, i32, i32, i32, i32, i32, i32, float, float, i32)* @ConvLayer_PROMISE to i8*), i8** %ConvLayer, align 8 - store i8* bitcast (i8* (i8*, float, float, i8*, float, float, i8*, float, float, i32, float, float, i32)* @FCLayer_PROMISE to i8*), i8** %FCLayer, align 8 - store i8* bitcast (i8* (i8*, i8*, i8*, i8*, i32, i32, i32, i32, i32, i32, i32, float, float)* @wrapper_ConvLayer to i8*), i8** %ConvLayer_, align 8 - store i8* bitcast (i8* (i8*, i8*, i8*, i8*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float)* @wrapper_ConvLayer2 to i8*), i8** %ConvLayer2, align 8 - store i8* bitcast (i8* (i8*, i8*, i8*, i32, i32, i32, i32, i32, i32)* @wrapper_tensorGroupConvolution to i8*), i8** %GroupConvLayer, align 8 - store i8* bitcast (i8* (i8*, i8*, i8*, i8*, i32, float, float)* @wrapper_FCLayer to i8*), i8** %FCLayer2, align 8 - store i8* bitcast (i8* (i8*, i8*, i8*)* @wrapper_tensorAdd to i8*), i8** %AddWrapper, align 8 - store i8* bitcast (i8* (i8*, i8*)* @wrapper_tensorRelu to i8*), i8** %ReluWrapper, align 8 - store i8* bitcast (i8* (i8*, i8*)* @wrapper_tensorTanh to i8*), i8** %TanhWrapper, align 8 - store i8* bitcast (i8* (i8*, i8*, i8*, i8*, i8*, i8*, double)* @wrapper_tensorBatchNorm to i8*), i8** %BatchNormWrapper, align 8 - store i8* bitcast (i8* (i8*, i8*, i32, i32, i32, i32, i32, i32, i32)* @wrapper_tensorPooling to i8*), i8** %PoolingWrapper, align 8 - store i8* bitcast (i8* (i8*, i8*)* @wrapper_tensorSoftmax to i8*), i8** %softmaxWrapper, align 8 - store i8* bitcast (i8* (i8*, i8*, i1)* @wrapper_tensorFft to i8*), i8** %tensorFft, align 8 - store i8* bitcast (i8* (i8*, i8*, i32, i32)* @wrapper_tensorReduce to i8*), i8** %tensorReduce, align 8 - store i8* bitcast (i8* (i8*, i8*, i8*)* @wrapper_tensorProjectiveT to i8*), i8** %tensorProjectiveT, align 8 - store i8* bitcast (i8* (i8*, i32, i8*)* @wrapper_tensorMap1 to i8*), i8** %tensorMap1, align 8 - store i8* bitcast (i8* (i8*, i32, i8*, i8*)* @wrapper_tensorMap2 to i8*), i8** %tensorMap2, align 8 - store i8* bitcast (i8* (i8*, i32, i8*, i8*, i8*)* @wrapper_tensorMap3 to i8*), i8** %tensorMap3, align 8 - store i8* bitcast (i8* (i8*, i8*)* @wrapper_tensorStencil to i8*), i8** %tensorStencil, align 8 - store i8* bitcast (i8* (i8*, i8*)* @wrapper_tensorCosineT to i8*), i8** %tensorCosineT, align 8 - store i8* bitcast (i8* (i32)* @tensor_set_node_id to i8*), i8** %tensorNodeID, align 8 - ret void -} - -declare dso_local void @llvm_hpvm_initTensorRt(i32) #1 - -declare dso_local void @llvm_hpvm_cleanupTensorRt() #1 - -declare dso_local void @llvm_hpvm_initApproxhpvmRt(i32) #1 - -declare dso_local void @llvm_hpvm_cleanupApproxhpvmRt() #1 - -declare dso_local void @llvm_hpvm_initializeRuntimeController(i8*, i8*) #1 - -declare dso_local void @llvm_hpvm_clearRuntimeController() #1 - -declare dso_local void @hpvm_request_tensor(i8*, i32) #1 - -declare dso_local void @startProfiling() #1 - -declare dso_local void @stopProfiling() #1 - -declare dso_local i8* @create2DTensor(i32, i64, i64) #1 - -declare dso_local i8* @create3DTensor(i32, i64, i64, i64) #1 - -declare dso_local i8* @create4DTensor(i32, i32, i64, i64, i64, i64) #1 - -declare dso_local void @initTensorData(i8*, i8*, i64) #1 - -declare dso_local i8** @tensorSplit(i8*, i32, i32) #1 - -declare dso_local i8* @tensorConcat(i8**, i32, i32) #1 - -declare dso_local i8* @tensorConvolution(i8*, i8*, i32, i32, i32, i32, i32, i32) #1 - -declare dso_local i8* @tensorHalfConvolution(i8*, i8*, i32, i32, i32, i32, i32, i32) #1 - -declare dso_local i8* @tensorPooling(i8*, i32, i32, i32, i32, i32, i32, i32) #1 - -declare dso_local i8* @tensorHalfPooling(i8*, i32, i32, i32, i32, i32, i32, i32) #1 - -declare dso_local i8* @tensorLRN(i8*, i32, double, double, double) #1 - -declare dso_local i8* @tensorGemm(i8*, i8*) #1 - -declare dso_local i8* @tensorGemmCPU(i8*, i8*) #1 - -declare dso_local i8* @tensorGemmGPU(i8*, i8*) #1 - -declare dso_local i8* @tensorHalfGemm(i8*, i8*) #1 - -declare dso_local i8* @tensorGemmBias(i8*, i8*) #1 - -declare dso_local i8* @tensorAdd(i8*, i8*) #1 - -declare dso_local i8* @tensorHalfAdd(i8*, i8*) #1 - -declare dso_local i8* @tensorRelu(i8*) #1 - -declare dso_local i8* @tensorRelu2(i8*, float, float) #1 - -declare dso_local i8* @tensorHalfRelu2(i8*, float, float) #1 - -declare dso_local i8* @tensorTanh(i8*) #1 - -declare dso_local i8* @tensorHalfTanh(i8*) #1 - -declare dso_local i8* @tensorSoftmax(i8*) #1 - -declare dso_local i8* @tensorBatchNorm(i8*, i8*, i8*, i8*, i8*, double) #1 - -declare dso_local i8* @tensorAddError(i8*, i32) #1 - -declare dso_local i8* @ConvLayer_PROMISE(i8*, float, float, i8*, float, float, i8*, float, float, i32, i32, i32, i32, i32, i32, i32, float, float, i32) #1 - -declare dso_local i8* @FCLayer_PROMISE(i8*, float, float, i8*, float, float, i8*, float, float, i32, float, float, i32) #1 - -declare dso_local i8* @wrapper_ConvLayer(i8*, i8*, i8*, i8*, i32, i32, i32, i32, i32, i32, i32, float, float) #1 - -declare dso_local i8* @wrapper_ConvLayer2(i8*, i8*, i8*, i8*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float) #1 - -declare dso_local i8* @wrapper_tensorGroupConvolution(i8*, i8*, i8*, i32, i32, i32, i32, i32, i32) #1 - -declare dso_local i8* @wrapper_FCLayer(i8*, i8*, i8*, i8*, i32, float, float) #1 - -declare dso_local i8* @wrapper_tensorAdd(i8*, i8*, i8*) #1 - -declare dso_local i8* @wrapper_tensorRelu(i8*, i8*) #1 - -declare dso_local i8* @wrapper_tensorTanh(i8*, i8*) #1 - -declare dso_local i8* @wrapper_tensorBatchNorm(i8*, i8*, i8*, i8*, i8*, i8*, double) #1 - -declare dso_local i8* @wrapper_tensorPooling(i8*, i8*, i32, i32, i32, i32, i32, i32, i32) #1 - -declare dso_local i8* @wrapper_tensorSoftmax(i8*, i8*) #1 - -declare dso_local i8* @wrapper_tensorFft(i8*, i8*, i1 zeroext) #1 - -declare dso_local i8* @wrapper_tensorReduce(i8*, i8*, i32, i32) #1 - -declare dso_local i8* @wrapper_tensorProjectiveT(i8*, i8*, i8*) #1 - -declare dso_local i8* @wrapper_tensorMap1(i8*, i32, i8*) #1 - -declare dso_local i8* @wrapper_tensorMap2(i8*, i32, i8*, i8*) #1 - -declare dso_local i8* @wrapper_tensorMap3(i8*, i32, i8*, i8*, i8*) #1 - -declare dso_local i8* @wrapper_tensorStencil(i8*, i8*) #1 - -declare dso_local i8* @wrapper_tensorCosineT(i8*, i8*) #1 - -declare dso_local i8* @tensor_set_node_id(i32) #1 - -; Function Attrs: noinline uwtable -define internal void @_GLOBAL__sub_I_tensor_signatures.cc() #0 section ".text.startup" { -entry: - call void @__cxx_global_var_init() - ret void -} - -attributes #0 = { noinline uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } -attributes #1 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } -attributes #2 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } -attributes #3 = { nounwind } -attributes #4 = { noinline nounwind optnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } - -!llvm.module.flags = !{!0} -!llvm.ident = !{!1} - -!0 = !{i32 1, !"wchar_size", i32 4} -!1 = !{!"clang version 9.0.0 (git@gitlab.engr.illinois.edu:llvm/hpvm.git 45dcc405b732c5560328fb5be2290dfa81961217)"} -