LLVM 的整数类型

2023-12-27

LLVM语言将整数类型指定为iN,其中N是整数的位宽,范围从1到2^23-1(根据:http://llvm.org/docs/LangRef.html#integer-type http://llvm.org/docs/LangRef.html#integer-type)

我有两个问题:

  1. 当将 C 程序编译到 LLVM IR 级别时,哪些类型可以降低到 i1、i2、i3 等?看起来 i8、i16、i32、i64 类型一定足够了,所以我想知道其他近 800 万个整数类型是做什么用的。

  2. 有符号和无符号整数类型是否都降级为 i32?原因是什么?为什么它不适用于 32 位浮点数(在 LLVM 中表示为 f32)?


首先,请注意任意大小的整数以及无符号整数和无符号整数之间的区别都是 LLVM 2.0 中添加的修改。早期版本只有几种整数类型,并有符号/无符号区别。

现在,回答你的问题:

  1. LLVM 虽然在设计时考虑了 C/C++,但并不特定于这些语言。拥有更多可能的整数类型可以为您提供更大的灵活性。当然,您不必使用这些类型 - 我猜测,正如您所提到的,LLVM(即 Clang)的任何 C/C++ 前端可能只会生成 i1、i8、i16、i32 和 i64 。

    编辑:显然我错了,Clang 也使用了一些其他整数类型,请参阅下面 Jens 的评论。

  2. 是的,LLVM 不区分有符号和无符号整数类型,因此两者都会降低为 i32。但是,对无符号整数的操作将根据原始类型进行转换;例如无符号整数之间的除法将是udiv而签署之间将是sdiv。因为整数表示为二进制补码 http://en.wikipedia.org/wiki/Two%27s_complement但是,许多操作(例如add)不关心签名/未签名,因此只有一个版本。

    As for whyLLVM 中没有区分有符号和无符号,请阅读有关此增强请求的详细信息 http://llvm.org/bugs/show_bug.cgi?id=950- 简而言之,同时拥有签名和未签名版本会导致 IR 膨胀,并且不利于某些优化,因此被放弃。

    最后你问为什么不f32- 答案是我不知道,也许它被认为不如任意大小的整数有用。但是,请注意f32并不是真正的描述性 - 如果您想要任意浮点类型,您至少需要指定基数的大小和指数的大小,例如f23e8代替float and f52e11代替double。如果你问我的话,这有点麻烦,但我想float and double可以成为这些的同义词。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LLVM 的整数类型 的相关文章

  • LLVM IR:如何调用另一个 .ll 文件中的函数

    我正在编写 LLVM IR 代码 我可以调用另一个 ll 文件中的函数吗 例如 在 ll文件中 有一个函数foo 我可以在 b ll 中使用这个函数 就像调用 foo 一样吗 如果是这样 我怎样才能包括a ll Thanks 您需要在调用函
  • 如何在 LLVM 中实现字符串数据类型?

    我一直在看LLVM http llvm org 最近 我发现它是一个非常有趣的架构 然而 浏览教程和参考材料 我看不到任何关于如何实现的示例string http en wikipedia org wiki String computer
  • C++ 标准是否允许未初始化的 bool 导致程序崩溃?

    我知道一个 未定义的行为 C 几乎可以让编译器做任何它想做的事情 然而 我遇到了一次令我惊讶的崩溃 因为我认为代码足够安全 在这种情况下 真正的问题仅发生在使用特定编译器的特定平台上 并且仅在启用优化的情况下发生 我尝试了几种方法来重现问题
  • 为什么我不能声明推断类型?

    我有以下内容 runcount Eq a Num b gt a gt b runcount runcountacc 0 runcountacc Eq a Num b gt b gt a gt b runcountacc n runcount
  • Scala 'null' 是否算作另一种类型的实例?

    我有这个代码 class MyLinkedList T h T tail MyLinkedList T def prepend v T MyLinkedList T new MyLinkedList v this 我想知道我如何可以将第二个
  • 哈希密码字段使用什么数据类型以及长度?

    我不确定密码哈希是如何工作的 稍后将实现 但现在需要创建数据库模式 我正在考虑将密码限制为 4 20 个字符 但据我了解 加密后哈希字符串的长度将有所不同 那么 如何将这些密码存储在数据库中呢 更新 仅使用哈希函数不足以存储密码 你应该阅读
  • Haskell数据类型转换问题

    我目前正在学习 Haskell 并且一直在编写一些非常简单的程序来练习 我的程序之一是 import System IO main do putStrLn Give me year y lt getLine let res show cal
  • 在 C# 中转换为反射类型

    考虑以下代码 object objFoo MakeFoo object MakeFoo return new Foo MethodInfo methodInfo typeof Program GetMethod Baz Foo Baz re
  • 隐秘模板模板参数错误

    我正在尝试创建一个从 a 获取密钥的函数std map or an std unordered map 我可以使用简单的重载 但首先我想知道这段代码有什么问题 template
  • 用于测试对象类型的通用 Swift 函数

    我正在尝试编写一个函数 该函数接受一个对象和一个类型作为参数 并返回一个布尔值 指示该对象是否属于给定类型 似乎没有 Type 类型 所以我不知道如何做到这一点 我能做的最好的就是 func objectIsType
  • 命名和未命名类型

    问题 我最近开始阅读Golang规格手册 https golang org ref spec并陷入试图理解的困境有名和无名类型在相关部分 https golang org ref spec Types 我来自动态语言 这让我有点头疼 手册指
  • 将类型信息传递给 Scala 中的函数

    我有对 json 对象执行一些常见操作的代码 即提取 所以我想创建一个通用函数 它接受哪个类的类型参数 代码如下所示 def getMessageType T json JValue Either GenericError T try Ri
  • Oracle中“NUMBER”和“NUMBER(*,0)”相同吗?

    在甲骨文中文档 http docs oracle com cd B28359 01 server 111 b28318 datatype htm i22289据说 数字 精度 小数位数 如果未指定精度 则该列将存储给定的值 如果 未指定比例
  • TypeScript 类型中 bivarianceHack 的目的是什么?

    在阅读 React 的 TypeScript 类型时 我看到了这种模式的一些用法 涉及bivarianceHack 函数声明 types react index d ts https github com DefinitelyTyped D
  • 是否可以在 .NET 中编写仅接受数字类型的通用函数?

    假设我想编写一个如下所示的函数 像往常一样 一个简单的示例用于说明目的 Public Function calcSqSum Of T ByVal list As IEnumerable Of T As T Dim sumSq As T Fo
  • 存在函数依赖关系时类型推断如何工作

    考虑下面的代码 LANGUAGE MultiParamTypeClasses FlexibleInstances FunctionalDependencies UndecidableInstances FlexibleContexts cl
  • Scala Array.apply 有何魔力

    来自 scala 2 10 4 的 array scala Array定义为 final class Array T length Int extends java io Serializable with java lang Clonea
  • 类型擦除露出丑陋的头,如何规避?

    所以我有这个界面 public interface EventHandler
  • 在Python中检测re(regexp)对象

    我想知道什么是正确的 pythonic 向后和向前兼容的方法如何检查对象是否已编译re object isinstance方法不能轻易使用 而生成的对象声称是 sre SRE Pattern object gt gt gt import r
  • 为什么 Go 中只有 int 而没有 float?

    在 Go 中 有这样的类型int这可能相当于int32 or int64取决于系统架构 我可以声明一个整数变量而不用担心它的大小 var x int 为什么没有这个类型float 这相当于float32 or float64取决于我的系统架

随机推荐

  • Crontab - 简单的 echo 未运行

    我有这样的情况 我想在 Linux 服务器上使用 crontab 安排一个作业 我不是超级用户 所以我只编辑 使用 crontab l 编辑器 vim 我的 crontab 文件 为了测试 我放在那里 echo asdf 并且该作业没有运行
  • C++ 模板继承方案

    我想知道我的编码方式是否正确 我可以创建一个继承模板类的模板类吗 如果可以的话 以下代码是否正确 template
  • 从 HTML5 Canvas 导出矢量图形

    我很好奇这可能吗 我有兴趣在 HTML5 中构建一个矢量绘图应用程序 它能够保存为矢量 而不仅仅是 JPG PNG BMP Thanks 不 这是不可能的 绘图操作完成后 剩下的一切都在canvas是一堆像素 您必须保留所有绘图选项 然后使
  • 在 Visual Studio 中创建 hpp 文件

    当我要使用 Visual Studio 将新文件添加到项目中并且我希望它是 hpp only h文件可用 如何创建 hpp files 添加新文件时 您可以将扩展名更改为您想要的任何内容 只需将名称从 Header h 或它为您提供的任何默
  • Java HttpURLConnection - 带 Cookie 的 POST

    我正在尝试发送带有 cookie 的发布请求 这是代码 try String query URLEncoder encode key UTF 8 URLEncoder encode value UTF 8 String cookies se
  • 反序列化时二进制流“0”不包含有效的 BinaryHeader 错误

    在过去两天寻找这个问题的答案后 我希望这里有人能提供帮助 我使用 VS2012 用 c 编写了一个程序 该程序使用 BinaryFormatter 保存用户的项目数据 以将可序列化的类序列化为 Stream 然后再将其保存到文件中 该程序已
  • JavaScript 数组上的 getter/setter?

    有没有办法在数组上获取 设置行为 我想象这样的事情 var arr one two three var arr new Array for var i 0 i lt arr length i arr i defineGetter value
  • 如何从 ngModel 渲染 HTML 标签?

    我使用 AngularJS 将 JS 变量绑定到我的 HTML 内容 它工作得很好 JS var app angular module Tabs controller TabsController scope function scope
  • 如何以唯一的顺序对数组进行排序

    给定一个数组 var myList Normal Urgent Alert Casual Follow up 我想以下拉菜单的形式输出这个列表 我想 Urgent 首先出现 然后是 Alert 其余的应按字母顺序排序 我知道我可以按字母顺序
  • 如何在 Hapi 中获取请求的完整 URL

    在我的 hapijs 应用程序中 给定Request object http hapijs com api request object 如何找到原始的 未解析的 未修改的 URL function getRequestUrl reques
  • 您使用 Matlab/F#/R 进行数据分析和建模算法的经验

    我已经使用 F 一段时间来对算法进行建模 然后再用 C 进行编码 之后还使用它来检查 C 代码的结果 以及对照实际记录的数据 对于建模方面 它非常方便 但对于 数据混搭 之类的东西 从 CSV 和其他来源提取数据 生成统计数据 绘制图表等
  • 无法将 RoboMongo 与 Amazon 实例连接

    我无法将 RoboMongo 与 Amazon 实例连接 试过这个http blog mongohq com robomongo your next shell http blog mongohq com robomongo your ne
  • Django ModelForm 有一个隐藏的输入

    所以我有我的 TagStatus 模型 我正在尝试为其制作一个 ModelForm 但是 我的表单要求用 tag name 填充隐藏输入 我一直在浏览文档 但不知道如何使标签字段成为隐藏输入 也许 ModelForm 不是正确的选择 模型
  • 如何使用 Android ZoomButtonsController?

    好吧 我已经无计可施了 我不知道该怎么做使用 android widget ZoomButtonsController http developer android com reference android widget ZoomButt
  • 为什么我的 base64 编码的 png 在我的 svg 中不可见?

    我想将 png 转换为 base64 并将编码后的字符串插入 svg 中 fIm open name png rb dataIm fIm read encode base64 replace n baseIm
  • Java 语言规范中是否曾经发生过“重大变化”?

    除了引入 assert 关键字这一可能广为人知的例外情况之外 Java 语言规范是否曾发生过变化 导致旧代码不再与 JDK 的较新源代码级别兼容 到目前为止的总结 非常感谢您的评论 当升级到更高版本时 如果代码使用使用 Java 语言规范
  • Android:单击按钮时转到 HTTP URL

    我想通过单击 Android 应用程序中的按钮来访问网页 比如说 我有一个名为 Google 的按钮 当用户单击该按钮时 我希望 google com 在屏幕上打开 这是如何实现的 另外 当用户使用完 Google 后 有没有办法可以重新获
  • python:动态获取字典中的子字典?

    假设我想编写一个函数 它将从字典返回任意值 例如 mydict foo bar baz 如果不存在则返回空字符串 不过 我不知道是否mydict foo 必然存在 更不用说mydict foo bar baz 我想做这样的事情 safe n
  • 在 Safari 中使用 location.hash 滚动页面

    我有一个论坛页面 在当前选定的消息下方显示消息的树视图 当您单击树中的消息时 新消息正文将加载到div使用 AJAX 靠近页面顶部 然后运行以下代码 window location hash page top 当然 page top 是页面
  • LLVM 的整数类型

    LLVM语言将整数类型指定为iN 其中N是整数的位宽 范围从1到2 23 1 根据 http llvm org docs LangRef html integer type http llvm org docs LangRef html i