mirror of
https://github.com/RPCS3/llvm.git
synced 2025-04-02 13:21:43 +00:00
Move GlobalMerge from Transform to CodeGen.
This patch is to move GlobalMerge pass from Transform/Scalar to CodeGen, because GlobalMerge depends on TargetMachine. In the mean time, the macro INITIALIZE_TM_PASS is also moved to CodeGen/Passes.h. With this fix we can avoid making libScalarOpts depend on libCodeGen. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210951 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7354a3fe57
commit
c5bc067a0f
@ -592,4 +592,21 @@ namespace llvm {
|
||||
ModulePass *createJumpInstrTablesPass();
|
||||
} // End llvm namespace
|
||||
|
||||
/// This initializer registers TargetMachine constructor, so the pass being
|
||||
/// initialized can use target dependent interfaces. Please do not move this
|
||||
/// macro to be together with INITIALIZE_PASS, which is a complete target
|
||||
/// independent initializer, and we don't want to make libScalarOpts depend
|
||||
/// on libCodeGen.
|
||||
#define INITIALIZE_TM_PASS(passName, arg, name, cfg, analysis) \
|
||||
static void* initialize##passName##PassOnce(PassRegistry &Registry) { \
|
||||
PassInfo *PI = new PassInfo(name, arg, & passName ::ID, \
|
||||
PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis, \
|
||||
PassInfo::TargetMachineCtor_t(callTargetMachineCtor< passName >)); \
|
||||
Registry.registerPass(*PI, true); \
|
||||
return PI; \
|
||||
} \
|
||||
void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
|
||||
CALL_ONCE_INITIALIZATION(initialize##passName##PassOnce) \
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -53,18 +53,6 @@ class TargetMachine;
|
||||
} \
|
||||
TsanHappensAfter(&initialized);
|
||||
|
||||
#define INITIALIZE_TM_PASS(passName, arg, name, cfg, analysis) \
|
||||
static void* initialize##passName##PassOnce(PassRegistry &Registry) { \
|
||||
PassInfo *PI = new PassInfo(name, arg, & passName ::ID, \
|
||||
PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis, \
|
||||
PassInfo::TargetMachineCtor_t(callTargetMachineCtor< passName >)); \
|
||||
Registry.registerPass(*PI, true); \
|
||||
return PI; \
|
||||
} \
|
||||
void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
|
||||
CALL_ONCE_INITIALIZATION(initialize##passName##PassOnce) \
|
||||
}
|
||||
|
||||
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis) \
|
||||
static void* initialize##passName##PassOnce(PassRegistry &Registry) { \
|
||||
PassInfo *PI = new PassInfo(name, arg, & passName ::ID, \
|
||||
|
@ -22,6 +22,7 @@ add_llvm_library(LLVMCodeGen
|
||||
GCMetadata.cpp
|
||||
GCMetadataPrinter.cpp
|
||||
GCStrategy.cpp
|
||||
GlobalMerge.cpp
|
||||
IfConversion.cpp
|
||||
InlineSpiller.cpp
|
||||
InterferenceCache.cpp
|
||||
|
@ -64,6 +64,7 @@
|
||||
#include "llvm/IR/Intrinsics.h"
|
||||
#include "llvm/IR/Module.h"
|
||||
#include "llvm/Pass.h"
|
||||
#include "llvm/CodeGen/Passes.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Target/TargetLowering.h"
|
||||
#include "llvm/Target/TargetLoweringObjectFile.h"
|
@ -8,7 +8,6 @@ add_llvm_library(LLVMScalarOpts
|
||||
EarlyCSE.cpp
|
||||
FlattenCFGPass.cpp
|
||||
GVN.cpp
|
||||
GlobalMerge.cpp
|
||||
IndVarSimplify.cpp
|
||||
JumpThreading.cpp
|
||||
LICM.cpp
|
||||
|
@ -38,7 +38,6 @@ void llvm::initializeScalarOpts(PassRegistry &Registry) {
|
||||
initializeDSEPass(Registry);
|
||||
initializeGVNPass(Registry);
|
||||
initializeEarlyCSEPass(Registry);
|
||||
initializeGlobalMergePass(Registry);
|
||||
initializeIndVarSimplifyPass(Registry);
|
||||
initializeJumpThreadingPass(Registry);
|
||||
initializeLICMPass(Registry);
|
||||
|
26
test/CodeGen/AArch64/global-merge-1.ll
Normal file
26
test/CodeGen/AArch64/global-merge-1.ll
Normal file
@ -0,0 +1,26 @@
|
||||
; RUN: llc %s -mtriple=aarch64-none-linux-gnu -enable-global-merge -o - | FileCheck %s
|
||||
; RUN: llc %s -mtriple=aarch64-none-linux-gnu -enable-global-merge -global-merge-on-external -o - | FileCheck %s
|
||||
|
||||
; RUN: llc %s -mtriple=aarch64-linux-gnuabi -enable-global-merge -o - | FileCheck %s
|
||||
; RUN: llc %s -mtriple=aarch64-linux-gnuabi -enable-global-merge -global-merge-on-external -o - | FileCheck %s
|
||||
|
||||
; RUN: llc %s -mtriple=aarch64-apple-ios -enable-global-merge -o - | FileCheck %s --check-prefix=CHECK-APPLE-IOS
|
||||
; RUN: llc %s -mtriple=aarch64-apple-ios -enable-global-merge -global-merge-on-external -o - | FileCheck %s --check-prefix=CHECK-APPLE-IOS
|
||||
|
||||
@m = internal global i32 0, align 4
|
||||
@n = internal global i32 0, align 4
|
||||
|
||||
define void @f1(i32 %a1, i32 %a2) {
|
||||
;CHECK-APPLE-IOS: adrp x8, __MergedGlobals@PAGE
|
||||
;CHECK-APPLE-IOS-NOT: adrp
|
||||
;CHECK-APPLE-IOS: add x8, x8, __MergedGlobals@PAGEOFF
|
||||
store i32 %a1, i32* @m, align 4
|
||||
store i32 %a2, i32* @n, align 4
|
||||
ret void
|
||||
}
|
||||
|
||||
;CHECK: .type _MergedGlobals,@object // @_MergedGlobals
|
||||
;CHECK: .local _MergedGlobals
|
||||
;CHECK: .comm _MergedGlobals,8,8
|
||||
|
||||
;CHECK-APPLE-IOS: .zerofill __DATA,__bss,__MergedGlobals,8,3 ; @_MergedGlobals
|
51
test/CodeGen/AArch64/global-merge-2.ll
Normal file
51
test/CodeGen/AArch64/global-merge-2.ll
Normal file
@ -0,0 +1,51 @@
|
||||
; RUN: llc %s -mtriple=aarch64-none-linux-gnu -enable-global-merge -global-merge-on-external -o - | FileCheck %s
|
||||
; RUN: llc %s -mtriple=aarch64-linux-gnuabi -enable-global-merge -global-merge-on-external -o - | FileCheck %s
|
||||
; RUN: llc %s -mtriple=aarch64-apple-ios -enable-global-merge -global-merge-on-external -o - | FileCheck %s --check-prefix=CHECK-APPLE-IOS
|
||||
|
||||
@x = global i32 0, align 4
|
||||
@y = global i32 0, align 4
|
||||
@z = global i32 0, align 4
|
||||
|
||||
define void @f1(i32 %a1, i32 %a2) {
|
||||
;CHECK-APPLE-IOS-LABEL: _f1:
|
||||
;CHECK-APPLE-IOS: adrp x8, __MergedGlobals_x@PAGE
|
||||
;CHECK-APPLE-IOS: add x8, x8, __MergedGlobals_x@PAGEOFF
|
||||
;CHECK-APPLE-IOS-NOT: adrp
|
||||
store i32 %a1, i32* @x, align 4
|
||||
store i32 %a2, i32* @y, align 4
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @g1(i32 %a1, i32 %a2) {
|
||||
;CHECK-APPLE-IOS-LABEL: _g1:
|
||||
;CHECK-APPLE-IOS: adrp x8, __MergedGlobals_x@PAGE
|
||||
;CHECK-APPLE-IOS: add x8, x8, __MergedGlobals_x@PAGEOFF
|
||||
;CHECK-APPLE-IOS-NOT: adrp
|
||||
store i32 %a1, i32* @y, align 4
|
||||
store i32 %a2, i32* @z, align 4
|
||||
ret void
|
||||
}
|
||||
|
||||
;CHECK: .type _MergedGlobals_x,@object // @_MergedGlobals_x
|
||||
;CHECK: .globl _MergedGlobals_x
|
||||
;CHECK: .align 3
|
||||
;CHECK: _MergedGlobals_x:
|
||||
;CHECK: .size _MergedGlobals_x, 12
|
||||
|
||||
;CHECK: .globl x
|
||||
;CHECK: x = _MergedGlobals_x
|
||||
;CHECK: .globl y
|
||||
;CHECK: y = _MergedGlobals_x+4
|
||||
;CHECK: .globl z
|
||||
;CHECK: z = _MergedGlobals_x+8
|
||||
|
||||
;CHECK-APPLE-IOS: .globl __MergedGlobals_x ; @_MergedGlobals_x
|
||||
;CHECK-APPLE-IOS: .zerofill __DATA,__common,__MergedGlobals_x,12,3
|
||||
|
||||
;CHECK-APPLE-IOS: .globl _x
|
||||
;CHECK-APPLE-IOS: _x = __MergedGlobals_x
|
||||
;CHECK-APPLE-IOS: .globl _y
|
||||
;CHECK-APPLE-IOS: _y = __MergedGlobals_x+4
|
||||
;CHECK-APPLE-IOS: .globl _z
|
||||
;CHECK-APPLE-IOS: _z = __MergedGlobals_x+8
|
||||
;CHECK-APPLE-IOS: .subsections_via_symbols
|
51
test/CodeGen/AArch64/global-merge-3.ll
Normal file
51
test/CodeGen/AArch64/global-merge-3.ll
Normal file
@ -0,0 +1,51 @@
|
||||
; RUN: llc %s -mtriple=aarch64-none-linux-gnu -enable-global-merge -global-merge-on-external -o - | FileCheck %s
|
||||
; RUN: llc %s -mtriple=aarch64-linux-gnuabi -enable-global-merge -global-merge-on-external -o - | FileCheck %s
|
||||
; RUN: llc %s -mtriple=aarch64-apple-ios -enable-global-merge -global-merge-on-external -o - | FileCheck %s --check-prefix=CHECK-APPLE-IOS
|
||||
|
||||
@x = global [1000 x i32] zeroinitializer, align 1
|
||||
@y = global [1000 x i32] zeroinitializer, align 1
|
||||
@z = internal global i32 1, align 4
|
||||
|
||||
define void @f1(i32 %a1, i32 %a2, i32 %a3) {
|
||||
;CHECK-APPLE-IOS: adrp x8, __MergedGlobals_x@PAGE
|
||||
;CHECK-APPLE-IOS-NOT: adrp
|
||||
;CHECK-APPLE-IOS: add x8, x8, __MergedGlobals_x@PAGEOFF
|
||||
;CHECK-APPLE-IOS: adrp x9, __MergedGlobals_y@PAGE
|
||||
;CHECK-APPLE-IOS: add x9, x9, __MergedGlobals_y@PAGEOFF
|
||||
%x3 = getelementptr inbounds [1000 x i32]* @x, i32 0, i64 3
|
||||
%y3 = getelementptr inbounds [1000 x i32]* @y, i32 0, i64 3
|
||||
store i32 %a1, i32* %x3, align 4
|
||||
store i32 %a2, i32* %y3, align 4
|
||||
store i32 %a3, i32* @z, align 4
|
||||
ret void
|
||||
}
|
||||
|
||||
;CHECK: .type _MergedGlobals_x,@object // @_MergedGlobals_x
|
||||
;CHECK: .globl _MergedGlobals_x
|
||||
;CHECK: .align 4
|
||||
;CHECK: _MergedGlobals_x:
|
||||
;CHECK: .size _MergedGlobals_x, 4004
|
||||
|
||||
;CHECK: .type _MergedGlobals_y,@object // @_MergedGlobals_y
|
||||
;CHECK: .globl _MergedGlobals_y
|
||||
;CHECK: _MergedGlobals_y:
|
||||
;CHECK: .size _MergedGlobals_y, 4000
|
||||
|
||||
;CHECK-APPLE-IOS: .globl __MergedGlobals_x ; @_MergedGlobals_x
|
||||
;CHECK-APPLE-IOS: .align 4
|
||||
;CHECK-APPLE-IOS: __MergedGlobals_x:
|
||||
;CHECK-APPLE-IOS: .long 1
|
||||
;CHECK-APPLE-IOS: .space 4000
|
||||
|
||||
;CHECK-APPLE-IOS: .globl __MergedGlobals_y ; @_MergedGlobals_y
|
||||
;CHECK-APPLE-IOS: .zerofill __DATA,__common,__MergedGlobals_y,4000,4
|
||||
|
||||
;CHECK: .globl x
|
||||
;CHECK: x = _MergedGlobals_x+4
|
||||
;CHECK: .globl y
|
||||
;CHECK: y = _MergedGlobals_y
|
||||
|
||||
;CHECK-APPLE-IOS:.globl _x
|
||||
;CHECK-APPLE-IOS: _x = __MergedGlobals_x+4
|
||||
;CHECK-APPLE-IOS:.globl _y
|
||||
;CHECK-APPLE-IOS: _y = __MergedGlobals_y
|
@ -1,6 +1,4 @@
|
||||
; RUN: opt %s -mtriple=aarch64-linux-gnuabi -global-merge -S -o - | FileCheck %s
|
||||
|
||||
; CHECK: @_MergedGlobals = internal global { [5 x i32], [5 x i32], [5 x i32] } zeroinitializer
|
||||
; RUN: llc %s -mtriple=aarch64-linux-gnuabi -enable-global-merge -o - | FileCheck %s
|
||||
|
||||
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-n32:64-S128"
|
||||
target triple = "arm64-apple-ios7.0.0"
|
||||
@ -66,6 +64,10 @@ define internal i32* @returnFoo() #1 {
|
||||
ret i32* getelementptr inbounds ([5 x i32]* @foo, i64 0, i64 0)
|
||||
}
|
||||
|
||||
;CHECK: .type _MergedGlobals,@object // @_MergedGlobals
|
||||
;CHECK: .local _MergedGlobals
|
||||
;CHECK: .comm _MergedGlobals,60,16
|
||||
|
||||
attributes #0 = { nounwind ssp }
|
||||
attributes #1 = { nounwind readnone ssp }
|
||||
attributes #2 = { nounwind }
|
@ -1,22 +0,0 @@
|
||||
; RUN: opt %s -mtriple=aarch64-none-linux-gnu -global-merge -S -o - | FileCheck %s
|
||||
; RUN: opt %s -mtriple=aarch64-none-linux-gnu -global-merge -global-merge-on-external -S -o - | FileCheck %s
|
||||
|
||||
; RUN: opt %s -mtriple=aarch64-linux-gnuabi -global-merge -S -o - | FileCheck %s
|
||||
; RUN: opt %s -mtriple=aarch64-linux-gnuabi -global-merge -global-merge-on-external -S -o - | FileCheck %s
|
||||
|
||||
; RUN: opt %s -mtriple=aarch64-apple-ios -global-merge -S -o - | FileCheck %s
|
||||
; RUN: opt %s -mtriple=aarch64-apple-ios -global-merge -global-merge-on-external -S -o - | FileCheck %s
|
||||
|
||||
@m = internal global i32 0, align 4
|
||||
@n = internal global i32 0, align 4
|
||||
|
||||
; CHECK: @_MergedGlobals = internal global { i32, i32 } zeroinitializer
|
||||
|
||||
define void @f1(i32 %a1, i32 %a2) {
|
||||
; CHECK-LABEL: @f1
|
||||
; CHECK: getelementptr inbounds ({ i32, i32 }* @_MergedGlobals, i32 0, i32 0)
|
||||
; CHECK: getelementptr inbounds ({ i32, i32 }* @_MergedGlobals, i32 0, i32 1)
|
||||
store i32 %a1, i32* @m, align 4
|
||||
store i32 %a2, i32* @n, align 4
|
||||
ret void
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
; RUN: opt %s -mtriple=aarch64-none-linux-gnu -global-merge -global-merge-on-external -S -o - | FileCheck %s
|
||||
; RUN: opt %s -mtriple=aarch64-linux-gnuabi -global-merge -global-merge-on-external -S -o - | FileCheck %s
|
||||
; RUN: opt %s -mtriple=aarch64-apple-ios -global-merge -global-merge-on-external -S -o - | FileCheck %s
|
||||
|
||||
@x = global i32 0, align 4
|
||||
@y = global i32 0, align 4
|
||||
@z = global i32 0, align 4
|
||||
|
||||
; CHECK: @_MergedGlobals_x = global { i32, i32, i32 } zeroinitializer
|
||||
; CHECK: @x = alias getelementptr inbounds ({ i32, i32, i32 }* @_MergedGlobals_x, i32 0, i32 0)
|
||||
; CHECK: @y = alias getelementptr inbounds ({ i32, i32, i32 }* @_MergedGlobals_x, i32 0, i32 1)
|
||||
; CHECK: @z = alias getelementptr inbounds ({ i32, i32, i32 }* @_MergedGlobals_x, i32 0, i32 2)
|
||||
|
||||
define void @f1(i32 %a1, i32 %a2) {
|
||||
; CHECK-LABEL: @f1
|
||||
; CHECK: getelementptr inbounds ({ i32, i32, i32 }* @_MergedGlobals_x, i32 0, i32 0)
|
||||
; CHECK: getelementptr inbounds ({ i32, i32, i32 }* @_MergedGlobals_x, i32 0, i32 1)
|
||||
store i32 %a1, i32* @x, align 4
|
||||
store i32 %a2, i32* @y, align 4
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @g1(i32 %a1, i32 %a2) {
|
||||
; CHECK-LABEL: @g1
|
||||
; CHECK: getelementptr inbounds ({ i32, i32, i32 }* @_MergedGlobals_x, i32 0, i32 1)
|
||||
; CHECK: getelementptr inbounds ({ i32, i32, i32 }* @_MergedGlobals_x, i32 0, i32 2)
|
||||
store i32 %a1, i32* @y, align 4
|
||||
store i32 %a2, i32* @z, align 4
|
||||
ret void
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
; RUN: opt %s -mtriple=aarch64-none-linux-gnu -global-merge -global-merge-on-external -S -o - | FileCheck %s
|
||||
; RUN: opt %s -mtriple=aarch64-linux-gnuabi -global-merge -global-merge-on-external -S -o - | FileCheck %s
|
||||
; RUN: opt %s -mtriple=aarch64-apple-ios -global-merge -global-merge-on-external -S -o - | FileCheck %s
|
||||
|
||||
@x = global [1000 x i32] zeroinitializer, align 1
|
||||
@y = global [1000 x i32] zeroinitializer, align 1
|
||||
@z = internal global i32 1, align 4
|
||||
|
||||
; CHECK: @_MergedGlobals_x = global { i32, [1000 x i32] } { i32 1, [1000 x i32] zeroinitializer }
|
||||
; CHECK: @_MergedGlobals_y = global { [1000 x i32] } zeroinitializer
|
||||
|
||||
; CHECK: @x = alias getelementptr inbounds ({ i32, [1000 x i32] }* @_MergedGlobals_x, i32 0, i32 1)
|
||||
; CHECK: @y = alias getelementptr inbounds ({ [1000 x i32] }* @_MergedGlobals_y, i32 0, i32 0)
|
||||
|
||||
define void @f1(i32 %a1, i32 %a2, i32 %a3) {
|
||||
; CHECK-LABEL: @f1
|
||||
; CHECK: %x3 = getelementptr inbounds [1000 x i32]* getelementptr inbounds ({ i32, [1000 x i32] }* @_MergedGlobals_x, i32 0, i32 1), i32 0, i64 3
|
||||
; CHECK: %y3 = getelementptr inbounds [1000 x i32]* getelementptr inbounds ({ [1000 x i32] }* @_MergedGlobals_y, i32 0, i32 0), i32 0, i64 3
|
||||
; CHECK: store i32 %a3, i32* getelementptr inbounds ({ i32, [1000 x i32] }* @_MergedGlobals_x, i32 0, i32 0), align 4
|
||||
|
||||
%x3 = getelementptr inbounds [1000 x i32]* @x, i32 0, i64 3
|
||||
%y3 = getelementptr inbounds [1000 x i32]* @y, i32 0, i64 3
|
||||
store i32 %a1, i32* %x3, align 4
|
||||
store i32 %a2, i32* %y3, align 4
|
||||
store i32 %a3, i32* @z, align 4
|
||||
ret void
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
if not 'AArch64' in config.root.targets:
|
||||
config.unsupported = True
|
||||
|
@ -1,55 +0,0 @@
|
||||
; RUN: opt %s -mtriple=arm-linux-gnuabi -global-merge -S -o - | FileCheck %s
|
||||
|
||||
target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32"
|
||||
target triple = "thumbv7-apple-ios3.0.0"
|
||||
|
||||
@bar = internal global [5 x i32] zeroinitializer, align 4
|
||||
@baz = internal global [5 x i32] zeroinitializer, align 4
|
||||
@foo = internal global [5 x i32] zeroinitializer, align 4
|
||||
|
||||
; CHECK: @_MergedGlobals = internal global { [5 x i32], [5 x i32], [5 x i32] } zeroinitializer
|
||||
|
||||
; Function Attrs: nounwind ssp
|
||||
define internal void @initialize() #0 {
|
||||
%1 = tail call i32 bitcast (i32 (...)* @calc to i32 ()*)() #3
|
||||
store i32 %1, i32* getelementptr inbounds ([5 x i32]* @bar, i32 0, i32 0), align 4
|
||||
%2 = tail call i32 bitcast (i32 (...)* @calc to i32 ()*)() #3
|
||||
store i32 %2, i32* getelementptr inbounds ([5 x i32]* @baz, i32 0, i32 0), align 4
|
||||
%3 = tail call i32 bitcast (i32 (...)* @calc to i32 ()*)() #3
|
||||
store i32 %3, i32* getelementptr inbounds ([5 x i32]* @bar, i32 0, i32 1), align 4
|
||||
%4 = tail call i32 bitcast (i32 (...)* @calc to i32 ()*)() #3
|
||||
store i32 %4, i32* getelementptr inbounds ([5 x i32]* @baz, i32 0, i32 1), align 4
|
||||
%5 = tail call i32 bitcast (i32 (...)* @calc to i32 ()*)() #3
|
||||
store i32 %5, i32* getelementptr inbounds ([5 x i32]* @bar, i32 0, i32 2), align 4
|
||||
%6 = tail call i32 bitcast (i32 (...)* @calc to i32 ()*)() #3
|
||||
store i32 %6, i32* getelementptr inbounds ([5 x i32]* @baz, i32 0, i32 2), align 4
|
||||
%7 = tail call i32 bitcast (i32 (...)* @calc to i32 ()*)() #3
|
||||
store i32 %7, i32* getelementptr inbounds ([5 x i32]* @bar, i32 0, i32 3), align 4
|
||||
%8 = tail call i32 bitcast (i32 (...)* @calc to i32 ()*)() #3
|
||||
store i32 %8, i32* getelementptr inbounds ([5 x i32]* @baz, i32 0, i32 3), align 4
|
||||
%9 = tail call i32 bitcast (i32 (...)* @calc to i32 ()*)() #3
|
||||
store i32 %9, i32* getelementptr inbounds ([5 x i32]* @bar, i32 0, i32 4), align 4
|
||||
%10 = tail call i32 bitcast (i32 (...)* @calc to i32 ()*)() #3
|
||||
store i32 %10, i32* getelementptr inbounds ([5 x i32]* @baz, i32 0, i32 4), align 4
|
||||
ret void
|
||||
}
|
||||
|
||||
declare i32 @calc(...) #1
|
||||
|
||||
; Function Attrs: nounwind ssp
|
||||
define internal void @calculate() #0 {
|
||||
%1 = load <4 x i32>* bitcast ([5 x i32]* @bar to <4 x i32>*), align 4
|
||||
%2 = load <4 x i32>* bitcast ([5 x i32]* @baz to <4 x i32>*), align 4
|
||||
%3 = mul <4 x i32> %2, %1
|
||||
store <4 x i32> %3, <4 x i32>* bitcast ([5 x i32]* @foo to <4 x i32>*), align 4
|
||||
%4 = load i32* getelementptr inbounds ([5 x i32]* @bar, i32 0, i32 4), align 4
|
||||
%5 = load i32* getelementptr inbounds ([5 x i32]* @baz, i32 0, i32 4), align 4
|
||||
%6 = mul nsw i32 %5, %4
|
||||
store i32 %6, i32* getelementptr inbounds ([5 x i32]* @foo, i32 0, i32 4), align 4
|
||||
ret void
|
||||
}
|
||||
|
||||
; Function Attrs: nounwind readnone ssp
|
||||
define internal i32* @returnFoo() #2 {
|
||||
ret i32* getelementptr inbounds ([5 x i32]* @foo, i32 0, i32 0)
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
if not 'ARM' in config.root.targets:
|
||||
config.unsupported = True
|
||||
|
Loading…
x
Reference in New Issue
Block a user