原文:LLVM笔记(7) - 指令的side effect

什么是指令的side effect 在后端优化中常常见到MI.hasUnmodeledSideEffects 这个接口, 其代表该指令具有无法衡量的副作用. 对于这类指令, 编译器在优化时会保守处理, 比如指令调度会以此为边界 在其之后的指令不会调度到之前 . 查看指令的side effect属性 通常情况下不同架构的指令定义在 llvm build dir lib Target arch ar ...

2019-12-23 01:06 0 933 推荐指数:

查看详情

LLVM笔记(9) - 指令选择(一) 概述

本文最初是基于对新员工培训, 使其快速上手编译器后端代码而写的入门简介. 为方便阅读又根据模块细分为若干章, 内容以分析代码为主, 偶尔也会穿插一些理论扩展. 什么是指令选择 指令选择(instruction selection)是将中间语言转换成汇编或机器代码的过程. 如果仅为单一语言在单一 ...

Sun May 03 23:50:00 CST 2020 1 2764
什么是副作用(Side Effect)

副作用(Side Effect)是指函数或者表达式的行为依赖于外部世界。具体可参照Wiki上的定义,副作用是指 1)函数或者表达式修改了它的SCOPE之外的状态 2)函数或者表达式除了返回语句外还与外部世界或者它所调用的函数有明显的交互行为 对于1)而言,考虑如下函数定义: int ...

Mon Nov 13 01:53:00 CST 2017 0 2447
LLVM笔记(11) - 指令选择(三) combine

本节将要介绍指令选择中combine优化的概念, combine的目的是简化DAG, 合并/消除冗余节点, 为生成更优的指令做准备. 大部分combine是与架构无关的优化, 但LLVM也提供了修改combine的custom接口. 尽管本节介绍的是combine的流程, 但combine ...

Fri May 08 08:51:00 CST 2020 0 1709
LLVM笔记(13) - 指令选择(五) select

本节主要介绍指令选择的具体步骤(select). select是将基于ISD SDNode的DAG替换成基于机器指令节点的DAG的过程. select基本流程 在完成combine与legalize之后SelectionDAGISel::CodeGenAndEmitDAG()会调 ...

Mon May 25 05:53:00 CST 2020 0 2019
LLVM笔记(12) - 指令选择(四) legalize

本节介绍指令选择中legalize的概念, 为中端IR精确匹配机器指令需要同时检查操作符与操作数, 在正式指令选择前对不合法的操作符或操作数作出转换的过程即legalize. 通常情况下给定一个后端架构其支持的指令集: 不一定能支持表达所有中端IR的操作. 一个显而易见的例子是在一个不支持 ...

Thu May 14 10:01:00 CST 2020 0 1710
LLVM笔记(10) - 指令选择(二) lowering

本节主要介绍SelectionDAG的构成与lowering的过程. SelectionDAG是LLVM指令选择的基础框架, 不论是O0编译时使用的FastISel还是O2编译时使用的SelectionDAGISel都会使用SelectionDAG来描述输入的程序流. 将输入的IR转换成 ...

Wed May 06 05:13:00 CST 2020 1 3364
LLVM 笔记(五)—— LLVM IR

ilocker:关注 Android 安全(新手) QQ: 2597294287 LLVM 的 IR (Intermediate Representation) 是其设计中的最重要的部分。优化器在进行代码优化时所进行的分析和转换都是针对 IR 的。 在设计 IR 时,考虑到了很多明确的目标 ...

Sun Oct 25 22:29:00 CST 2015 0 2166
Vue报错 Unexpected side effect in "*" computed property

这时候会提示这样写有问题。计算属性只要单纯的运算,依赖某些值,得到某个值。不要做其他的操作,赋值,修改dom等。 真的需要操作就放到watch里面。 ...

Wed Jul 15 02:41:00 CST 2020 0 3812
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM