所以情况就是这样:我需要能够从Linux机器(在Ubuntu上,它的价值)编译二进制文件,它们能够从SPARC服务器运行.我正在尝试编译的程序非常简单:
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("Testing the SPARC program...");
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了许多不同的编译行来使它工作,但不幸的是似乎没有任何工作.
我试过传统的:
clang -target sparc blah.c -o blahsparc
Run Code Online (Sandbox Code Playgroud)
但这不起作用,有一堆汇编程序失败:
/tmp/blah-519e77.s: Assembler messages:
/tmp/blah-519e77.s:7: Error: unknown pseudo-op: '.register'
/tmp/blah-519e77.s:8: Error: unknown pseudo-op: '.register'
/tmp/blah-519e77.s:9: Error: unknown pseudo-op: '.register'
/tmp/blah-519e77.s:10: Error: unknown pseudo-op: '.register'
/tmp/blah-519e77.s:11: Error: no such instruction: 'save %sp,-240,%sp'
/tmp/blah-519e77.s:12: Error: no such instruction: 'st %g0, [%fp+2043]'
...
clang: error: assembler (via gcc) command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
我也试过这个: …
是否可以使用clang匹配器来识别程序中的模式序列?
例如,我需要找到pattern1在pattern2之前发生的情况.
例如:
Pattern1 =为指针P
pattern2 =取消引用指针P赋值
我可以识别出代码中出现pattern1和pattern2的情况,但是可以指定一个排序吗?(假设pattern1必须在pattern2之前发生并且只匹配那些情况)谢谢!
我正在尝试使用clang-3.9基于以下文档构建一个cuda项目.但我想用cmake来构建我的项目.我已经分别将CMAKE_CC_COMPILER和CMAKE_CXX_COMPILER设置为clang和clang ++.
但问题是,如果我使用
file(GLOB_RECURSE CUDA_SOURCES "./*.cu")
CUDA_ADD_LIBRARY(Benchmarks_CUDA ${CUDA_SOURCES})
Run Code Online (Sandbox Code Playgroud)
在我的CMakeList.txt中,cmake默认使用nvcc编译器.但相反,我想使用clang来编译.cu文件.
相反,如果我使用
add_library (Benchmarks_CUDA ${CUDA_SOURCES})
Run Code Online (Sandbox Code Playgroud)
然后我会得到一个错误
CMake Error: Cannot determine link language for target "Benchmarks_CUDA".
CMake Error: CMake can not determine linker language for target: Benchmarks_CUDA
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何使用cmake使用clang构建.cu文件.
我可以在终端中使用以下命令获取 Clang 编译器预定义宏的列表。(参考)
clang -dM -E -x c /dev/null
Run Code Online (Sandbox Code Playgroud)
但是,此列表不包含标准预定义宏,例如__FILE__、__LINE__、__FUNCTION__等(GCC 版本的列表)
Q1. 是否可以在终端中获取 Clang 中的标准预定义宏列表?
Q2。如果没有,Clang 文档或在线内容中是否有标准预定义宏的完整列表?
我的环境是 macOS Sierra 版本 10.12.1 (16B2555),Clang Apple LLVM 版本 8.0.0 (clang-800.0.42.1)
我在玩与C ++ 17的std ::变异类型,并试图编译cppreference示例代码为get():
#include <variant>
#include <string>
int main()
{
std::variant<int, float> v{12}, w;
int i = std::get<int>(v);
w = std::get<int>(v);
w = std::get<0>(v); // same effect as the previous line
// std::get<double>(v); // error: no double in [int, float]
// std::get<3>(v); // error: valid index values are 0 and 1
try {
std::get<float>(w); // w contains int, not float: will throw
}
catch (std::bad_variant_access&) {}
}
Run Code Online (Sandbox Code Playgroud)
在XCode 10中。我的项目设置为C ++ 17,但是出现编译器错误:
调用不可用的功能'get':macOS 10.14中引入
和
'bad_variant_access'不可用:在macOS …
我一直在搞乱 LLVM IR 的代码生成,有一点我不太明白,那就是什么时候必须分配局部变量,以及如何将文字值加载到局部变量中的区别。如果我将以下简单的 C 代码编译为 LLVM IR,
//test.c
int main() {
int x = 3;
int y = x + 4;
return y;
}
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
; ModuleID = 'test.c'
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.10.0"
; Function Attrs: nounwind ssp uwtable
define i32 @main() #0 {
%1 = alloca i32, align 4
%x = alloca i32, align 4
%y = alloca i32, align 4
store i32 0, i32* %1
store i32 3, i32* %x, align 4
%2 …Run Code Online (Sandbox Code Playgroud) 我正在尝试有选择地展开以下程序中的第二个循环:
#include <stdio.h>
int main()
{
int in[1000], out[1000];
int i,j;
#pragma nounroll
for (i = 100; i < 1000; i++)
{
in[i]+= 10;
}
#pragma unroll 2
for (j = 100; j < 1000; j++)
{
out[j]+= 10;
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
当我使用以下选项运行 clang (3.5) 时,它会将两个循环展开 4 次。
clang -std=c++11 -O3 -fno-slp-vectorize -fno-vectorize -mllvm -unroll-count=4 -mllvm -debug-pass=Arguments -emit-llvm -c *.cpp
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?此外,如果我添加-fno-unroll-loops或跳过-unroll-count=4标志,它不会展开任何循环。
另外,有关如何调试 pragma 错误的任何提示?
我正在尝试按照 llvm的说明在 Windows 10 pro 上构建 LLVM/Clang 。我也遵循了我可以从以前的帖子和其他网站中找到的所有建议,但仍然出现错误。谢谢您的帮助。
我分别用 GCC 和 Visual Studio 尝试过。以下是我使用的工具:
这是我得到的:
以下是我尝试使用 GCC 时获得的日志:
!
-- The C compiler identification is GNU 5.3.0
-- The CXX compiler identification is GNU 5.3.0
-- The ASM compiler identification is GNU
-- Found assembler: C:/MinGW/bin/gcc.exe
-- Check …Run Code Online (Sandbox Code Playgroud) 我被要求做一个 LLVM 函数,它允许我找到:跳转/分支、加载/存储、调用、“算术和其他类型的指令”。
就我设法做的而言,我已经能够找到使用 dyn_cast 执行以下代码的 CallInst、LoadInst、StoreInst 和 BranchInst:
for (const Function &F : *M)
for (const BasicBlock &BB : F)
for (const Instruction &I : BB)
if (const StoreInst *SI = dyn_cast<StoreInst>(&I))
count++;;
Run Code Online (Sandbox Code Playgroud)
我正在努力寻找一种提取所有算术和“其他类型”指令的方法。
谢谢你的时间。
我最近安装了 LLVM v8.0.0(在 RHEL 7.4 上)。我正在阅读LLVM Kaleidoscope 教程以了解如何使用该系统,但遇到了链接问题。
根据教程(第 2 章结尾),我运行:
clang++ -g -O3 kld.cpp `llvm-config --cxxflags` -o kld
Run Code Online (Sandbox Code Playgroud)
它编译,但链接器失败:
/tmp/kld-f7264f.o:(.data+0x0): undefined reference to `llvm::EnableABIBreakingChecks'
clang-8: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
我怀疑这可能是 的问题llvm-config,所以我也尝试使用--ldflags和--system-libs标志,但没有运气。
llvm-config --cxxflags 给出(重新格式化以提高可读性)
-I~/project/llvm-src/include -I~/project/llvm-build/include
-fPIC -fvisibility-inlines-hidden
-std=c++11
-Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual
-Wno-missing-field-initializers -pedantic -Wno-long-long
-Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment
-g
-fno-exceptions -fno-rtti
-D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS
-D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
Run Code Online (Sandbox Code Playgroud)
哪里~/... …