CN103577242A - 针对已调度汇编代码的控制流图重构方法 - Google Patents
针对已调度汇编代码的控制流图重构方法 Download PDFInfo
- Publication number
- CN103577242A CN103577242A CN201310565945.3A CN201310565945A CN103577242A CN 103577242 A CN103577242 A CN 103577242A CN 201310565945 A CN201310565945 A CN 201310565945A CN 103577242 A CN103577242 A CN 103577242A
- Authority
- CN
- China
- Prior art keywords
- instruction
- flow graph
- bag
- execution
- information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Abstract
本发明涉及一种针对已调度汇编代码的控制流图重构方法,包括:对源程序进行静态分析,根据全局延迟槽列表信息,获取源程序所有可能的执行路径,由此构建指令流图;其中,指令流图中的每个结点代表一条指令;遍历指令流图中的各个结点,根据各个结点的入度和出度信息,创建基本块,生成控制流图;基于控制流图,分析各基本块中的各个执行包,对执行包建立汇编级数据依赖图;根据源体系结构指令集信息,确定执行包中各条指令的时间戳信息;根据各条指令的时间戳信息,进行指令的跨块或跨包移动;根据汇编级数据依赖图,修改各条指令的时间戳信息;根据各条指令修改后的时间戳信息,重排序各条指令,由此复原源程序中每条指令的等价执行。
Description
技术领域
本发明涉及数字数据处理领域,具体涉及一种针对已调度汇编代码的控制流图重构方法。
背景技术
在数字信号处理器领域中,很多软件都是针对具体的目标体系结构特征,以汇编的形式实现。这些软件难以理解和维护,也不易完成不同体系结构之间的移植。在逆向工程、二进制翻译领域,完成这些工作的第一步是对源汇编程序控制流的重构。
在编译器设计领域,很多代码优化技术都是直接针对汇编代码进行,主要包括:链接时程序全局分析及优化、代码压缩、二进制翻译等。这些优化技术都是基于汇编代码的控制流图(Control Flow Graph,CFG)完成。然而,编译器生成的汇编代码具有特定的体系结构特征,其涵盖的调度信息使得汇编代码的CFG的构建更加复杂。
对于具有超长指令字架构(very long instruction word,VLIW)结构的微处理器,分支指令是提高其性能的一个重要障碍。等待分支结果的延迟会造成流水线停顿,从而降低指令并行度。硬件设计中的延迟槽结构有助于解决此类控制相关而带来的性能问题,并与编译器配合完成分支指令的延迟槽调度。现有技术中,为了减少分支指令带来的流水线停顿周期,将一些与分支指令不相关的有用指令填充到该分支指令后的延迟槽中,以提升处理器的性能。这些指令不受分支指令结果的影响,无论分支成功与否,流水线都会执行这些指令。因此,在还原源程序的控制流时,常用方法是,根据分支指令的执行周期数,将其延迟槽中的所有指令前移,由此得到源程序执行时机器无关的控制流。然而,对于一些高性能的处理器,其优化的编译器允许延迟槽调度的对象是分支指令。对于这种延迟槽中有其他的分支指令的情况时,现有的控制流分析方法不再适用。
针对带延迟槽的分支指令的汇编程序的CFG的建立,一般方法是:首先根据子片段信息将汇编代码分块,其次不考虑延迟槽,将各个基本块之间的简单跳转关系添加至CFG中,最后,针对带有延迟槽的分支指令,通过多次迭代,在CFG中添加所有可能的跳转边,但这种方法仅仅将源汇编代码按基本块分割,添加可能的跳转分支,从中很难恢复源程序的执行序。
对上述一般方法做改进后,提出的方法是:针对调度后的汇编代码提出建立控制数据流图(Control and Data Flow Graph,CDFG)的算法,该算法是在上述一般方法的基础上生成CFG,在处理带有延迟槽的指令时,通过引入虚拟寄存器来打破原指令的多周期执行,完成去延迟槽操作。但是该方法在解决多周期指令的去延迟槽操作时,引入了较多的额外指令,效率较低。
发明内容
本发明的目的是提供一种针对已调度汇编代码的控制流图重构的方法。
本发明提供了一种针对已调度汇编代码的控制流图重构方法,包括:
对源程序进行静态分析,根据全局延迟槽列表信息,获取源程序所有可能的执行路径,由此构建指令流图;其中,指令流图中的每个结点代表一条指令,每一条边代表一条指令到另一条指令一种的可能执行序关系;
遍历所述指令流图中的各个结点,根据所述各个结点的入度和出度信息,创建基本块,生成控制流图;
基于控制流图,分析各基本块中的各个执行包,对所述执行包建立汇编级数据依赖图;根据源体系结构指令集信息,确定所述执行包中各条指令的时间戳信息;
根据所述各条指令的时间戳信息,进行指令的跨块或跨包移动;
根据所述汇编级数据依赖图,修改所述各条指令的时间戳信息;根据各条指令修改后的时间戳信息,重排序所述各条指令,由此复原所述程序中每条指令的等价执行。
优选地,对源程序进行静态分析,初始化指令队列和全局延迟槽列表,添加初始指令至指令队列,在指令队列为非空时,根据所述全局延迟槽列表,分析处理指令队列中的队首指令,建立所述队首指令与其所有可能的直接后继指令的连接关系,并将非空的所有可能的直接后继指令加入所述指令队列,在所述指令为分支指令时,将该分支指令的延迟槽信息添加至全局延迟槽列表中,重复上述操作,直到指令队列为空,由此生成指令流图。
优选地,广度优先遍历所述指令流图中的各个结点,以所述指令结点的入度和出度是否大于1,作为基本块边界划分的依据,以此合并指令序列,创建基本块,并添加所述指令流图中的边信息,生成控制流图。
优选地,通过对所述执行包建立汇编级数据依赖图,描述执行包中的各条指令间的写后读依赖和/或读后写依赖。
优选地,根据当前指令所在执行包分配的基准时间Tb,计算指令的发射时间Tf=Tb+0.01*n,计算指令的写回时间Tw=Tf+delay;其中,delay为指令执行时需要的周期数,0.01为一任意数值。
优选地,在[TW]大于当前执行包的基准时间Tb1时,比较[TW]和当前基本块中最后一个执行包的基准时间Tb2;在[TW]大于当前基本块中最后一个执行包的基准时间Tb2时,当前指令进行跨块移动;在[TW]不大于当前基本块中最后一个执行包的基准时间Tb2时,当前指令进行跨包移动;其中,[TW]为对当前指令的写回时间TW的下取整。
本发明针对已调度汇编代码,能够准确完成源程序的控制流图的重构,从中恢复源程序的执行序,而且在解决多周期指令的去延迟槽操作时,根据指令的时间戳信息完成指令的移动,引入的额外指令较少。
附图说明
图1为本发明实施例已调度汇编代码的控制流图重构方法流程图;
图2为本发明实施例构建指令流图的流程图
图3A为本发明实施例汇编代码片段;
图3B为图3A的指令流图;
图3C为图3B的控制流图;
图4为本发明实施例中并行代码线性化流程。
具体实施方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
图1是本发明实施例已调度汇编代码的控制流图重构方法流程图。如图1所示,本发明实施例包括:
步骤110,对源程序进行静态分析,根据全局延迟槽列表信息,获取源程序所有可能的执行路径,由此构建指令流图;其中,指令流图中的每个结点代表一条指令,每一条边代表一条指令到另一条指令一种可能的执行序关系。
指令集中只有分支指令才影响程序的控制走向。对于特定的目标体系结构,分支指令的延迟槽个数一定。在对源程序进行静态分析时,根据分支指令的延迟槽信息,从指令级获取程序所有可能的执行路径,获得指令流图(Instruction Flow Graph,IFG)。IFG着重关心程序中的各条指令间可能的逻辑控制流向,是有向图。其中的每个结点代表一条指令,每一条边代表从一条指令到另一条指令一种可能的执行序关系。
下面具体说明构建IFG的方法。图2为本发明实施例中构建IFG的流程图。在图2中,首先,初始化指令队列和全局延迟槽列表,添加初始指令,并将该初始指令加入指令队列中。其次,判断指令队列的长度是否大于0,在指令队列的长度不大于0时,结束当前操作,在指令队列长度大于0时,分析处理指令队列中的队首元素,对队首元素Head调用ProcessNode函数,建立队首指令与其所有可能的直接后继指令的连接关系,并将非空的所有可能的直接后继指令加入所述指令队列,重复上述步骤,直到指令队列为空,由此生成IFG。其中的核心函数ProcessNode的处理步骤如下:
1)判断当前指令是否为当前文件的最后一条指令,如果不是,则暂定当前指令的1-分支指令True_Insn为其直接后继指令,暂定当前指令的0-分支指令False_Insn为空,如果是,判断延迟槽列表的长度是否为0,如果是,则转至6);
2)遍历全局延迟槽列表中的每条分支指令的延迟槽信息,将其延迟槽个数减1。如果有任意一条分支指令的延迟槽个数为0,则暂定当前指令的1-分支指令True_Insn为分支指令的目标地址所在的指令,判断该分支指令是否为条件分支,如果为条件分支,则暂定当前指令的0-分支指令False_Insn为其直接后继指令;
3)如果当前指令的0-分支指令False_Insn在IFG中已经存在,则在IFG中建立当前指令与False_Insn的连接关系,否则,添加False_Insn至IFG中,并建立当前指令与False_Insn的连接关系;
4)如果当前指令的1-分支指令True_Insn在IFG中已经存在,则在IFG中建立当前指令与True_Insn的连接关系,否则,添加True_Insn至IFG中,并建立当前指令与True_Insn的连接关系;
5)判断当前指令是否为分支指令,如果是,添加当前分支指令的延迟槽信息至全局延迟槽列表;
6)函数返回。
图3A为本发明实施例汇编代码片段。依照图2对图3A中汇编代码片段构建的指令流图如图3B所示。
步骤120,遍历所述指令流图中的各个结点,根据所述各个结点的入度和出度信息,创建基本块,生成控制流图。
编译器设计中的控制流图(Control Flow Graph,CFG)是对程序中分支跳转关系的抽象,描述程序所有可能的执行路径,常用于编译调度优化。传统的CFG构建有两步:创建基本块,添加基本块之间的连接关系。
基本块是程序中的只有一个执行入口和执行出口的指令序列。在CFG中,每个结点代表一个基本块,且控制流只能从每个结点的第一条指令进入,从其最后一条指令退出。
构建CFG的步骤如下(开始时当前基本块cur_block为空):
步骤121,广度优先遍历IFG中的各个结点xi;
步骤122,判断当前结点xi的入度是否大于1,如果是,说明cur_block已经到最远出口位置,初始化新基本块succ_block,将当前结点添加到succ_block中,添加边信息<cur_block,succ_block>至CFG中,succ_block作为当前基本块,转到步骤125;
步骤123,判断当前结点xi的出度是否大于1,如果是,则说明cur_block已经到最远出口位置,将当前结点添加到cur_block中,初始化新基本块succ_block,添加边信息<cur_block,succ_block>至CFG中,succ_block作为当前基本块,转到步骤125;
步骤124,添加当前结点xi至当前基本块cur_block中;
步骤125,重复上述步骤121-124,直到遍历完所有的结点。
CFG中各个结点(每个结点代表一个基本块)间的连接关系代表着源程序的执行序,因此在创建基本块时,原有的分支跳转指令不必添加至CFG中。
依据上述步骤121-125,构建的图3B的CFG如图3C所示。
步骤130,基于控制流图,分析各基本块中的各个执行包,建立所述执行包的汇编级数据依赖图;根据源体系结构指令集信息,确定所述执行包中各条指令的时间戳信息。
步骤140,根据所述各条指令的时间戳信息,进行指令的跨块或跨包移动。
步骤150,根据所述汇编级数据依赖图,修改所述各条指令的时间戳信息;根据各条指令修改后的时间戳信息,重排序所述各条指令,由此复原所述程序中每条指令的等价执行。
需要说明的是,步骤130-150是并行代码线性化的过程,是基于步骤120生成的CFG,复原程序中每条指令的等价执行。图4为本发明实施例中并行代码线性化流程。下面结合步骤130-150及图4,对并行代码线性化流程的过程作具体的描述:
1)遍历CFG中的基本块;
2)遍历基本块中的执行包;分析执行包内的各条指令,建立汇编级数据依赖图(Assembly data dependence graph,ADDG),进行数据依赖分析;为每个执行包分配包发射的基准时间Tb;
3)遍历执行包中的每条指令;根据源体系结构指令集信息,计算当前指令的写回时间Tw;判断[TW]是否大于当前执行包的Tb1;在[TW]不大于当前执行包的Tb1时,直接跳转到5);
4)在[TW]大于当前执行包的基准时间Tb1时,判断[TW]是否大于当前基本块中最后一个执行包的Tb2;在[TW]大于当前基本块中最后一个执行包的基准时间Tb2时,根据Tw对当前指令进行跨块移动;在[TW]不大于当前基本块中最后一个执行包的基准时间Tb2时,根据Tw对当前指令进行基本块内的跨包移动;
5)判断当前指令与执行包内其他指令是否存在读后写依赖(write afterread,WAR)、写后读依赖(read after write,RAW)的依赖关系;在当前指令与执行包内其他指令存在WAR、RAW关系时,修改当前指令的写回时间Tw;在当前指令与执行包内其他指令不存在读后写依赖WAR、写后读依赖RAW的依赖关系时,重复上述操作。
需要说明的是,[TW]为对当前指令的写回时间TW的下取整。
在一个实施例中,以TI汇编代码片段和经线性化后的TI代码片段为例,说明汇编代码线性化的过程,下表是汇编代码片段和经时间戳定义的汇编代码片段,以下内容仅为方便说明:
超长指令字架构VLIW采用多个功能单元实现指令级并行,挖掘程序中的指令级并行度,由此改善程序的并行效率。编译器进行静态调度,形成包含多个并行字段的超长指令,在多个硬件功能单元上并行处理。因此,已调度的汇编代码的并行执行与机器相关。
多周期执行的指令的发射和结果的写回不在同一个周期。以带有4个延迟槽的LDW指令为例,上表左侧为汇编代码片段,设当前执行包在第i拍发射,寄存器A3,B2的新值在第i+5拍时才可用。因此,为每条指令定义时间戳,根据指令的具体时间戳信息,在CFG上进行指令的跨块或跨包移动。为每一个执行包(Execution Packet,EP)分配基准时间Tb,当前包中每条指令的发射时间为Tf=Tb+0.01*n,每条指令的写回时间为Tw=Tf+delay,Tw为指令的等价执行时间。上表右侧表示为各条指令定义时间戳后的汇编代码,设定当前执行包的基准时间为1.00,其中,delay为指令执行时需要的周期数,0.01为一任意数值。
数据依赖是指指令之间存在的数据约束关系,如果两条连续的指令执行结果与它们的执行顺序有关,则这两条指令之间就被认为存在数据约束关系。数据依赖关系主要有三种:写后读依赖RAW,读后写依赖WAR,写后写依赖WAW。如上表左侧中寄存器A4在指令(4)处被修改,而指令(3)、(5)中存在对寄存器A4的引用,则指令(3)、(4)在寄存器A4上存在WAR相关,指令(4)、(5)在寄存器A4上存在RAW相关。通过建立汇编级数据依赖图ADDG来描述汇编代码中的并行包内指令间存在的数据依赖关系WAR、RAW。
对于多周期指令,不仅需要将该指令移动到正确的目标位置,当与包内其他指令存在数据依赖关系WAR、RAW,需要引入虚拟寄存器来暂存原值。
根据汇编级数据依赖图,修改各指令的时间戳信息,并根据修改后的时间戳信息,重排序各条指令,由此复原各条指令的等价执行。对于上表左侧的汇编代码,经线性化后的汇编代码如下表所示,其中的Tw代表汇编代码的线性执行顺序。
综上,本发明实施例能够准确完成源程序的CFG的重构,从中恢复源程序的执行序;在解决多周期指令的去延迟槽操作时,根据指令的时间戳信息完成指令的移动,引入的额外指令较少。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种针对已调度汇编代码的控制流图重构方法,其特征在于,所述方法包括:
对源程序进行静态分析,根据全局延迟槽列表信息,获取源程序所有可能的执行路径,由此构建指令流图;其中,指令流图中的每个结点代表一条指令,每一条边代表一条指令到另一条指令一种可能的执行序关系;
遍历所述指令流图中的各个结点,根据所述各个结点的入度和出度信息,创建基本块,生成控制流图;
基于控制流图,分析各基本块中的各个执行包,对所述执行包建立汇编级数据依赖图;根据源体系结构指令集信息,确定所述执行包中各条指令的时间戳信息;
根据所述各条指令的时间戳信息,进行指令的跨块或跨包移动;
根据所述汇编级数据依赖图,修改所述各条指令的时间戳信息;根据各条指令修改后的时间戳信息,重排序所述各条指令,由此复原所述源程序中每条指令的等价执行。
2.如权利要求1所述的针对已调度汇编代码的控制流图重构方法,其特征在于,所述对源程序进行静态分析,根据全局延迟槽列表信息,获取源程序所有可能的执行路径,由此构建指令流图包括:
对源程序进行静态分析,初始化指令队列和全局延迟槽列表,添加初始指令至指令队列,在指令队列为非空时,根据所述全局延迟槽列表,分析处理指令队列中的队首指令,建立所述队首指令与其所有可能的直接后继指令的连接关系,并将非空的所有可能的直接后继指令加入所述指令队列,在所述指令为分支指令时,将该分支指令的延迟槽信息添加至全局延迟槽列表中,重复上述操作,直到指令队列为空,由此生成指令流图。
3.如权利要求1所述的针对已调度汇编代码的控制流图重构方法,其特征在于,所述遍历所述指令流图中的各个结点,根据所述各个结点的入度和出度信息,创建基本块,生成控制流图包括:
广度优先遍历所述指令流图中的各个结点,以所述指令结点的入度和出度是否大于1,作为基本块边界划分的依据,以此合并指令序列,创建基本块,并添加所述指令流图中的边信息,生成控制流图。
4.如权利要求1所述的针对已调度汇编代码的控制流图重构方法,其特征在于,所述基于控制流图,分析各基本块中的各个执行包,建立所述执行包的汇编级数据依赖图,包括:
通过建立所述执行包的汇编级数据依赖图,描述执行包中的各条指令间的写后读依赖和/或读后写依赖。
5.如权利要求1所述的针对已调度汇编代码的控制流图重构方法,其特征在于,所述根据源体系结构指令集信息,确定所述执行包中各条指令的时间戳信息,包括:
根据当前指令所在执行包分配的基准时间Tb,计算指令的发射时间Tf=Tb+0.01*n,计算指令的写回时间Tw=Tf+delay;其中,delay为指令执行时需要的周期数,0.01为一任意数值。
6.如权利要求1所述的针对已调度汇编代码的控制流图重构方法,其特征在于,所述进行指令的跨块或跨包移动包括:
在[TW]大于当前执行包的基准时间Tb1时,比较[TW]和当前基本块中的最后一个执行包的基准时间Tb2;在[TW]大于当前基本块中最后一个执行包的基准时间Tb2时,当前指令进行跨块移动;在[TW]不大于当前基本块中最后一个执行包的基准时间Tb2时,当前指令进行跨包移动;其中,[TW]为对当前指令的写回时间TW的下取整。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310565945.3A CN103577242B (zh) | 2013-11-14 | 2013-11-14 | 针对已调度汇编代码的控制流图重构方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310565945.3A CN103577242B (zh) | 2013-11-14 | 2013-11-14 | 针对已调度汇编代码的控制流图重构方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103577242A true CN103577242A (zh) | 2014-02-12 |
CN103577242B CN103577242B (zh) | 2016-11-02 |
Family
ID=50049087
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310565945.3A Expired - Fee Related CN103577242B (zh) | 2013-11-14 | 2013-11-14 | 针对已调度汇编代码的控制流图重构方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103577242B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104035825A (zh) * | 2014-06-17 | 2014-09-10 | 龙芯中科技术有限公司 | 跳转源列表处理方法、装置及编译器 |
CN105843660A (zh) * | 2016-03-21 | 2016-08-10 | 同济大学 | 一种编译器的代码优化调度方法 |
CN109992307A (zh) * | 2017-12-29 | 2019-07-09 | 上海寒武纪信息科技有限公司 | 指令列表调度方法、装置、计算机设备及存储介质 |
CN111949306A (zh) * | 2020-07-06 | 2020-11-17 | 北京大学 | 一种支持开源项目碎片化学习的推送方法和系统 |
CN113157318A (zh) * | 2021-04-21 | 2021-07-23 | 中国人民解放军国防科技大学 | 基于倒计时缓冲的gpdsp汇编移植优化方法及系统 |
CN113722218A (zh) * | 2021-08-23 | 2021-11-30 | 南京审计大学 | 一种基于编译器中间表示的软件缺陷预测模型构建方法 |
CN115470737A (zh) * | 2022-08-04 | 2022-12-13 | 芯华章科技(北京)有限公司 | 生成数据流图的方法、电子设备及存储介质 |
CN117251171A (zh) * | 2023-11-20 | 2023-12-19 | 常熟理工学院 | 一种控制流图中谓词基本块检测方法及设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2348399A1 (en) * | 2009-12-21 | 2011-07-27 | Ceva D.S.P. Ltd. | System and method for processing interrupts in a computing system |
CN102360283A (zh) * | 2011-09-28 | 2012-02-22 | 中国科学院声学研究所 | 一种微处理器子程序调用的处理方法及其装置 |
CN102880449A (zh) * | 2012-09-18 | 2013-01-16 | 中国科学院声学研究所 | 一种超长指令字结构下延迟槽调度方法及其系统 |
-
2013
- 2013-11-14 CN CN201310565945.3A patent/CN103577242B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2348399A1 (en) * | 2009-12-21 | 2011-07-27 | Ceva D.S.P. Ltd. | System and method for processing interrupts in a computing system |
CN102360283A (zh) * | 2011-09-28 | 2012-02-22 | 中国科学院声学研究所 | 一种微处理器子程序调用的处理方法及其装置 |
CN102880449A (zh) * | 2012-09-18 | 2013-01-16 | 中国科学院声学研究所 | 一种超长指令字结构下延迟槽调度方法及其系统 |
Non-Patent Citations (2)
Title |
---|
DAVID C.ZARETSKY ET AL: ""generation of control and data flow graphs from scheduled and pipelined assembly code"", 《18TH INTERNATIONAL WORKSHOP,LCPC 2005》, 31 October 2005 (2005-10-31) * |
NERINA BERMUDO ET AL: ""control flow graph reconstruction for assembly language programs with delayed instructions"", 《2005 FIFTH IEEE INTERNATIONAL WORKSHOP ON SOURCE CODE ANALYSIS AND MANIPULATION》, 30 September 2005 (2005-09-30) * |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104035825A (zh) * | 2014-06-17 | 2014-09-10 | 龙芯中科技术有限公司 | 跳转源列表处理方法、装置及编译器 |
CN104035825B (zh) * | 2014-06-17 | 2018-01-02 | 龙芯中科技术有限公司 | 跳转源列表处理方法、装置及编译器 |
CN105843660A (zh) * | 2016-03-21 | 2016-08-10 | 同济大学 | 一种编译器的代码优化调度方法 |
CN105843660B (zh) * | 2016-03-21 | 2019-04-02 | 同济大学 | 一种编译器的代码优化调度方法 |
CN109992307A (zh) * | 2017-12-29 | 2019-07-09 | 上海寒武纪信息科技有限公司 | 指令列表调度方法、装置、计算机设备及存储介质 |
CN109992307B (zh) * | 2017-12-29 | 2020-05-05 | 上海寒武纪信息科技有限公司 | 指令列表调度方法、装置、计算机设备及存储介质 |
CN111104169A (zh) * | 2017-12-29 | 2020-05-05 | 上海寒武纪信息科技有限公司 | 指令列表调度方法、装置、计算机设备及存储介质 |
CN111949306B (zh) * | 2020-07-06 | 2021-05-28 | 北京大学 | 一种支持开源项目碎片化学习的推送方法和系统 |
CN111949306A (zh) * | 2020-07-06 | 2020-11-17 | 北京大学 | 一种支持开源项目碎片化学习的推送方法和系统 |
CN113157318A (zh) * | 2021-04-21 | 2021-07-23 | 中国人民解放军国防科技大学 | 基于倒计时缓冲的gpdsp汇编移植优化方法及系统 |
CN113157318B (zh) * | 2021-04-21 | 2024-03-26 | 中国人民解放军国防科技大学 | 基于倒计时缓冲的gpdsp汇编移植优化方法及系统 |
CN113722218A (zh) * | 2021-08-23 | 2021-11-30 | 南京审计大学 | 一种基于编译器中间表示的软件缺陷预测模型构建方法 |
CN113722218B (zh) * | 2021-08-23 | 2022-06-03 | 南京审计大学 | 一种基于编译器中间表示的软件缺陷预测模型构建方法 |
CN115470737A (zh) * | 2022-08-04 | 2022-12-13 | 芯华章科技(北京)有限公司 | 生成数据流图的方法、电子设备及存储介质 |
CN117251171A (zh) * | 2023-11-20 | 2023-12-19 | 常熟理工学院 | 一种控制流图中谓词基本块检测方法及设备 |
CN117251171B (zh) * | 2023-11-20 | 2024-04-12 | 常熟理工学院 | 一种控制流图中谓词基本块检测方法及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN103577242B (zh) | 2016-11-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103577242A (zh) | 针对已调度汇编代码的控制流图重构方法 | |
Bhowmik et al. | A general compiler framework for speculative multithreading | |
Engblom | Processor pipelines and static worst-case execution time analysis | |
US20100325608A1 (en) | Generation of parallel code representations | |
Chupin et al. | Functional reactive programming, restated | |
Kristensen et al. | Fusion of parallel array operations | |
Puschner | Transforming execution-time boundable code into temporally predictable code | |
Bashford et al. | Phase-coupled mapping of data flow graphs to irregular data paths | |
CN103617049B (zh) | 基于互补谓词的代码移动方法 | |
CN103530471A (zh) | 一种基于模拟器的关键路径分析方法 | |
Butkova et al. | A Modest approach to modelling and checking Markov automata | |
Zhai et al. | Compiler and hardware support for reducing the synchronization of speculative threads | |
Plazar et al. | WCET-driven branch prediction aware code positioning | |
Kultala et al. | Aggressively bypassing list scheduler for transport triggered architectures | |
Nanjundappa et al. | A new multi-threaded code synthesis methodology and tool for correct-by-construction synthesis from polychronous specifications | |
CN101907999B (zh) | 超长指令字程序的二进制翻译方法 | |
Tretter et al. | Executing dataflow actors as Kahn processes | |
Shobaki et al. | Optimal trace scheduling using enumeration | |
Deantoni | Towards formal system modeling: Making explicit and formal the concurrent and timed operational semantics to better understand heterogeneous models | |
Dahlby | Applying agile methods to embedded systems development | |
Jeanmougin et al. | Warp-Level CFG Construction for GPU Kernel WCET Analysis | |
Přikryl et al. | Design and simulation of high performance parallel architectures using the ISAC language | |
Bednarski | Integrated optimal code generation for Digital Signal Processors | |
Kempf et al. | Direct handling of infeasible paths in the event dependency analysis | |
César et al. | Modeling pipeline applications in poetries |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20161102 Termination date: 20201114 |