gimple 操作码,支持这些:

DEFGSCODE(GIMPLE_symbol, printable name, GSS_symbol).  */
DEFGSCODE(GIMPLE_ERROR_MARK, "gimple_error_mark", GSS_BASE)
DEFGSCODE(GIMPLE_COND, "gimple_cond", GSS_WITH_OPS)
DEFGSCODE(GIMPLE_DEBUG, "gimple_debug", GSS_WITH_OPS)
DEFGSCODE(GIMPLE_GOTO, "gimple_goto", GSS_WITH_OPS)
DEFGSCODE(GIMPLE_LABEL, "gimple_label", GSS_WITH_OPS)
DEFGSCODE(GIMPLE_SWITCH, "gimple_switch", GSS_WITH_OPS)
DEFGSCODE(GIMPLE_ASSIGN, "gimple_assign", GSS_WITH_MEM_OPS)
DEFGSCODE(GIMPLE_ASM, "gimple_asm", GSS_ASM)
DEFGSCODE(GIMPLE_CALL, "gimple_call", GSS_CALL)
DEFGSCODE(GIMPLE_TRANSACTION, "gimple_transaction", GSS_TRANSACTION)
DEFGSCODE(GIMPLE_RETURN, "gimple_return", GSS_WITH_MEM_OPS)
DEFGSCODE(GIMPLE_BIND, "gimple_bind", GSS_BIND)
DEFGSCODE(GIMPLE_CATCH, "gimple_catch", GSS_CATCH)
DEFGSCODE(GIMPLE_EH_FILTER, "gimple_eh_filter", GSS_EH_FILTER)
DEFGSCODE(GIMPLE_EH_MUST_NOT_THROW, "gimple_eh_must_not_throw", GSS_EH_MNT)
DEFGSCODE(GIMPLE_EH_ELSE, "gimple_eh_else", GSS_EH_ELSE)
DEFGSCODE(GIMPLE_RESX, "gimple_resx", GSS_EH_CTRL)
DEFGSCODE(GIMPLE_EH_DISPATCH, "gimple_eh_dispatch", GSS_EH_CTRL)
DEFGSCODE(GIMPLE_PHI, "gimple_phi", GSS_PHI)
DEFGSCODE(GIMPLE_TRY, "gimple_try", GSS_TRY)
DEFGSCODE(GIMPLE_NOP, "gimple_nop", GSS_BASE)
DEFGSCODE(GIMPLE_OMP_ATOMIC_LOAD, "gimple_omp_atomic_load",
DEFGSCODE(GIMPLE_OMP_ATOMIC_STORE, "gimple_omp_atomic_store",
DEFGSCODE(GIMPLE_OMP_CONTINUE, "gimple_omp_continue", GSS_OMP_CONTINUE)
DEFGSCODE(GIMPLE_OMP_CRITICAL, "gimple_omp_critical", GSS_OMP_CRITICAL)
DEFGSCODE(GIMPLE_OMP_FOR, "gimple_omp_for", GSS_OMP_FOR)
DEFGSCODE(GIMPLE_OMP_STRUCTURED_BLOCK, "gimple_omp_structured_block", GSS_OMP)
DEFGSCODE(GIMPLE_OMP_MASTER, "gimple_omp_master", GSS_OMP)
DEFGSCODE(GIMPLE_OMP_MASKED, "gimple_omp_masked", GSS_OMP_SINGLE_LAYOUT)
DEFGSCODE(GIMPLE_OMP_TASKGROUP, "gimple_omp_taskgroup", GSS_OMP_SINGLE_LAYOUT)
DEFGSCODE(GIMPLE_OMP_PARALLEL, "gimple_omp_parallel", GSS_OMP_PARALLEL_LAYOUT)
DEFGSCODE(GIMPLE_OMP_TASK, "gimple_omp_task", GSS_OMP_TASK)
DEFGSCODE(GIMPLE_OMP_RETURN, "gimple_omp_return", GSS_OMP_ATOMIC_STORE_LAYOUT)
DEFGSCODE(GIMPLE_OMP_SCAN, "gimple_omp_scan", GSS_OMP_SINGLE_LAYOUT)
DEFGSCODE(GIMPLE_OMP_SCOPE, "gimple_omp_scope", GSS_OMP_SINGLE_LAYOUT)
DEFGSCODE(GIMPLE_OMP_DISPATCH, "gimple_omp_dispatch", GSS_OMP_SINGLE_LAYOUT)
DEFGSCODE(GIMPLE_OMP_INTEROP, "gimple_omp_interop", GSS_OMP_SINGLE_LAYOUT)
DEFGSCODE(GIMPLE_OMP_SECTION, "gimple_omp_section", GSS_OMP)
DEFGSCODE(GIMPLE_OMP_SECTIONS, "gimple_omp_sections", GSS_OMP_SECTIONS)
DEFGSCODE(GIMPLE_OMP_SECTIONS_SWITCH, "gimple_omp_sections_switch", GSS_BASE)
DEFGSCODE(GIMPLE_OMP_SINGLE, "gimple_omp_single", GSS_OMP_SINGLE_LAYOUT)
DEFGSCODE(GIMPLE_OMP_TARGET, "gimple_omp_target", GSS_OMP_PARALLEL_LAYOUT)
DEFGSCODE(GIMPLE_OMP_TEAMS, "gimple_omp_teams", GSS_OMP_PARALLEL_LAYOUT)
DEFGSCODE(GIMPLE_OMP_ORDERED, "gimple_omp_ordered", GSS_OMP_SINGLE_LAYOUT)
DEFGSCODE(GIMPLE_PREDICT, "gimple_predict", GSS_BASE)
DEFGSCODE(GIMPLE_WITH_CLEANUP_EXPR, "gimple_with_cleanup_expr", GSS_WCE)
DEFGSCODE(GIMPLE_ASSUME, "gimple_assume", GSS_ASSUME)

/* Class of GIMPLE expressions suitable for the RHS of assignments.  See
get_gimple_rhs_class.  */

enum gimple_rhs_class
{
GIMPLE_INVALID_RHS,    /* The expression cannot be used on the RHS.  */
GIMPLE_TERNARY_RHS,    /* The expression is a ternary operation.  */
GIMPLE_BINARY_RHS,    /* The expression is a binary operation.  */
GIMPLE_UNARY_RHS,    /* The expression is a unary operation.  */
GIMPLE_SINGLE_RHS    /* The expression is a single object (an SSA
name, a _DECL, a _REF, etc.  */
};

gimple 操作指令基础结构

struct 
gimple

{
/* [ WORD 1 ]
     Main identifying code for a tuple.  */
ENUM_BITFIELD(gimple_code) code : 8;

  /* Nonzero if a warning should not be emitted on this tuple.  */
unsigned int no_warning    : 1;

  /* Nonzero if this tuple has been visited.  Passes are responsible
for clearing this bit before using it.  */
unsigned int visited        : 1;

  /* Nonzero if this tuple represents a non-temporal move; currently
only stores are supported.  */
unsigned int nontemporal_move    : 1;

  /* Pass local flags.  These flags are free for any pass to use as
they see fit.  Passes should not assume that these flags contain
any useful value when the pass starts.  Any initial state that
the pass requires should be set on entry to the pass.  See
gimple_set_plf and gimple_plf for usage.  */
unsigned int plf        : 2;

  /* Nonzero if this statement has been modified and needs to have its
operands rescanned.  */
unsigned modified         : 1;

  /* Nonzero if this statement contains volatile operands.  */
unsigned has_volatile_ops     : 1;

  /* Padding to get subcode to 16 bit alignment.  */
unsigned pad            : 1;

  /* The SUBCODE field can be used for tuple-specific flags for tuples
that do not require subcodes.  Note that SUBCODE should be at
least as wide as tree codes, as several tuples store tree codes
in there.  */
unsigned int subcode        : 16;

  /* UID of this statement.  This is used by passes that want to assign IDs
to statements.  It must be assigned and used by each pass.  By default
it should be assumed to contain garbage.  */
unsigned uid;

  /* [ WORD 2 ]
Number of operands in this tuple.  */
unsigned num_ops;

  /* Unused 32 bits padding on 64-bit hosts.  */

  /* [ WORD 3 ]
Locus information for debug info.  */
location_t location;

  /* [ WORD 4 ]
Basic block holding this statement.  */
basic_block bb;

  /* [ WORD 5-6 ]
Linked lists of gimple statements.  The next pointers form
a NULL terminated list, the prev pointers are a cyclic list.
A gimple statement is hence also a double-ended list of
statements, with the pointer itself being the first element,
and the prev pointer being the last.  */
gimple *next;
gimple * prev;
}

继续自gimple的各个不同指令结构的实现:

295:  gimple_statement_with_ops_base : public gimple
311:  gimple_statement_with_ops : public gimple_statement_with_ops_base
326:  gimple_statement_with_memory_ops_base : public gimple_statement_with_ops_base
342:    public gimple_statement_with_memory_ops_base
357:  gcall : public gimple_statement_with_memory_ops_base
384:  gimple_statement_omp : public gimple
396:  gbind : public gimple
420:  gcatch : public gimple
435:  geh_filter : public gimple
451:  geh_else : public gimple
462:  geh_mnt : public gimple
473:  gphi : public gimple
492:  gimple_statement_eh_ctrl : public gimple
502:  gresx : public gimple_statement_eh_ctrl
509:  geh_dispatch : public gimple_statement_eh_ctrl
519:  gtry : public gimple
549:  gimple_statement_wce : public gimple
567:  gasm : public gimple_statement_with_memory_ops_base
592:  gomp_critical : public gimple_statement_omp
625:  gomp_for : public gimple_statement_omp
648:  gimple_statement_omp_parallel_layout : public gimple_statement_omp
667:  gimple_statement_omp_taskreg : public gimple_statement_omp_parallel_layout
677:  gomp_parallel : public gimple_statement_omp_taskreg
685:  gomp_target : public gimple_statement_omp_parallel_layout
694:  gomp_task : public gimple_statement_omp_taskreg
716:  gomp_sections : public gimple_statement_omp
735:  gomp_continue : public gimple
751:  gimple_statement_omp_single_layout : public gimple_statement_omp
760:  gomp_single : public gimple_statement_omp_single_layout
767:  gomp_teams : public gimple_statement_omp_taskreg
774:  gomp_ordered : public gimple_statement_omp_single_layout
781:  gomp_scan : public gimple_statement_omp_single_layout
793:  gomp_atomic_load : public gimple
805:  gimple_statement_omp_atomic_store_layout : public gimple
815:    public gimple_statement_omp_atomic_store_layout
823:    public gimple_statement_omp_atomic_store_layout
832:  gimple_statement_assume : public gimple
872:  gtransaction : public gimple_statement_with_memory_ops_base
897:  gcond : public gimple_statement_with_ops
908:  gdebug : public gimple_statement_with_ops
918:  ggoto : public gimple_statement_with_ops
928:  glabel : public gimple_statement_with_ops
938:  gswitch : public gimple_statement_with_ops
948:  gassign : public gimple_statement_with_memory_ops
959:  greturn : public gimple_statement_with_memory_ops

类型定义

typedef gimple *gimple_seq_node;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914545.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914545.shtml
英文地址,请注明出处:http://en.pswp.cn/news/914545.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TDengine GREATEST 和 LEAST 函数用户手册

TDengine GREATEST 和 LEAST 函数用户手册 1. 需求背景 1.1 问题描述 在实际生产过程中,客户经常需要计算三相电流、电压的最大值和最小值。传统的实现方式需要使用复杂的 CASE WHEN 语句,例如: -- 传统方式:计算三相电流最大…

Redis 与数据库不一致问题及解决方案

一、不一致的原因分析 1. 缓存更新策略不当 先更新数据库后删除缓存:删除缓存失败会导致不一致 先删除缓存后更新数据库:并发请求可能导致不一致 缓存穿透:大量请求直接打到数据库,绕过缓存 2. 并发操作问题 读写并发:读请求获取旧缓存时,写请求更新了数据库但未更新缓存…

iOS 加固工具使用经验与 App 安全交付流程的实战分享

在实际开发中,iOS App不仅要安全,还要能被稳定、快速、无误地交付。这在外包、B端项目、渠道分发、企业自用系统等场景中尤为常见。 然而,许多开发者在引入加固工具后会遇到以下困扰: 混淆后App运行异常、不稳定;资源路…

Windows 下 Visual Studio 开发 C++ 项目的部署流程

在Windows环境中使用Visual Studio(以下简称VS)开发C项目时,“部署”是确保程序能在目标设备上正常运行的关键环节。部署的核心目标是:将编译生成的可执行文件(.exe)、依赖的动态链接库(.dll&am…

yolo8+声纹识别(实时字幕)

现在已经完成了人脸识别跟踪 ✅,接下来要: ✅ 加入「声纹识别(说话人识别)」功能,识别谁在讲话,并在视频中“这个人”的名字旁边加上「正在讲话」。 这属于多模态识别(视觉 音频)&a…

DH(Denavit–Hartenberg)矩阵

DH 矩阵(Denavit-Hartenberg 矩阵)是 1955 年由 Denavit 和 Hartenberg 提出的一种机器人运动学建模方法,用于描述机器人连杆和关节之间的关系。该方法通过在机器人每个连杆上建立坐标系,并用 44 的齐次变换矩阵(DH 矩…

Vim的magic模式

在 Vim 中,magic 模式用于控制正则表达式中特殊字符的解析方式。它决定了哪些字符需要转义才能发挥特殊作用,从而影响搜索和替换命令的写法。以下是详细介绍: 一、三种 magic 模式 Vim 提供三种 magic 模式,通过在正则表达式前添加…

Git 使用技巧与原理(一)—— 基础操作

1、起步 1.1 版本控制 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 版本控制系统(VCS,Version Control System)通常可以分为三类: 本地版本控制系统:大多都是采用某…

软件测试之自动化测试

目录 1.什么是自动化测试 2.web⾃动化测试 2.1驱动 WebDriverManager 3. Selenium 3.1selenium驱动浏览器的⼯作原理 4.常用函数 4.1元素的定位 4.1.1cssSelector选择器 4.2.2xpath 4.2操作测试对象 4.3窗⼝ 4.4等待 4.5浏览器导航 4.6弹窗 4.7文件上传 4.8设置…

sqlserver迁移日志文件和数据文件

sqlserver安装后没有指定日志存储路径或者还原库指定的日志存储位置不理想想要更改,都可以按照这种方式来更换;1.前提准备:数据库的备份bak文件2.查看自己当前数据库的日志文件和数据文件存储路径是否理想选中当前数据库,右键属性…

MFC UI表格制作从专家到入门

文章目录CListCtrl常见问题增强版CGridCtrl(第三方)第三方库ReoGridCListCtrl 默认情况下,CListCtrl不支持直接编辑单元格,需通过消息处理实现。 1.添加控件到资源视图 在对话框资源编辑器中拖入List Control控件,设…

数字后端APR innovus sroute到底是如何选取宽度来铺power rail的?

吾爱IC社区新一期IC训练营将于7月初开班(07.06号晚上第一次直播课)!社区所有IC后端训练营课程均为直播课!全网唯一一家敢开后端直播课的(口碑不好招生一定存在困难,自然就无法开直播课)&#xf…

LVS集群技术

LVS(Linux Virtual Server)是一种基于Linux内核的高性能、高可用性服务器集群技术,它通过负载均衡将客户端请求分发到多台后端真实服务器,实现 scalability 和 fault tolerance。LVS工作在传输层(OSI Layer 4&#xff…

git项目,有idea文件夹,怎么去掉

要从Git项目中排除.idea文件夹(IntelliJ IDEA的配置文件目录),可以通过以下步骤操作: 1. 添加.gitignore规则 在项目根目录创建或编辑.gitignore文件,添加以下内容: .idea/2. 从Git缓存中删除已跟踪的.idea…

springboot+swagger2文档从swagger-bootstrap-ui更换为knife4j及文档接口参数不显示问题

背景 已有springboot项目,且使用的是swagger2+swagger-bootstrap-ui的版本 1.pom依赖如下 <!-- Swagger接口管理工具 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9…

mysql数据库表只能查询,对于插入、更新、删除操作一直卡住,直到报错Lost connection to MySQL server during query

诊断步骤1. 查看阻塞进程SELECT * FROM performance_schema.metadata_locks WHERE LOCK_STATUS PENDING;SELECT * FROM sys.schema_table_lock_waits;2. 查看当前活动事务SELECT * FROM information_schema.INNODB_TRX;3. 查看进程列表SHOW PROCESSLIST;通过SELECT * FROM in…

Redis BigKey 深度解析:从原理到实战解决方案

引言&#xff1a;什么是 BigKey&#xff1f;在 Redis 的使用场景中&#xff0c;BigKey&#xff08;大键&#xff09;是指那些数据量异常庞大的键值&#xff0c;通常表现为&#xff1a;String 类型&#xff1a;值大小超过 10KBHash/Set 等&#xff1a;元素数量超过 5000List/ZSe…

Qt 实现新手引导

Qt实现新手引导 对于一个新安装的软件或者一个新的功能&#xff0c;提供一个新手引导步骤&#xff0c;能够让用户快速熟悉。这是最终效果&#xff0c;每一个按钮都会有一个简单引导&#xff0c;通过点击上一步、下一步来切换不同的指导。当前引导的功能&#xff0c;会有一个高光…

Maven+Spring

一、Maven 相关- 本地仓库设置&#xff1a;- 在 IDE&#xff08;如 IntelliJ IDEA&#xff09;中可以设置 Maven 的本地仓库路径&#xff0c;本地仓库用于存储从远程仓库下载的依赖库&#xff0c;方便项目重复使用。- 仓库关系&#xff1a;- 项目&#xff1a;开发中的项目&…

Android Handler 消息机制

常用场景&#xff1a; 子线程发送Message 主线程处理Message 子线程发送消息 public final boolean sendEmptyMessageDelayed(int what, long delayMillis) {Message msg Message.obtain();msg.what what;return sendMessageDelayed(msg, delayMillis);}public final boole…