mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-11 05:35:11 +00:00
c8f01da286
The current logic assumes that any constant global will never be SRA'd. I presume this is because normally constant globals can be pushed into their uses and deleted. However, that sometimes can't happen (which is where you really want SRA, so the elements that can be eliminated, are!). There seems to be no reason why we can't SRA constants too, so let's do it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@267393 91177308-0d34-0410-b5e6-96231b3b80d8
46 lines
1.9 KiB
LLVM
46 lines
1.9 KiB
LLVM
; RUN: opt < %s -globalopt -S | not grep global
|
|
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
|
|
|
|
@G = internal global { i32, float, { double } } {
|
|
i32 1,
|
|
float 1.000000e+00,
|
|
{ double } { double 1.727000e+01 } } ; <{ i32, float, { double } }*> [#uses=3]
|
|
|
|
define void @onlystore() {
|
|
store i32 123, i32* getelementptr ({ i32, float, { double } }, { i32, float, { double } }* @G, i32 0, i32 0)
|
|
ret void
|
|
}
|
|
|
|
define float @storeinit() {
|
|
store float 1.000000e+00, float* getelementptr ({ i32, float, { double } }, { i32, float, { double } }* @G, i32 0, i32 1)
|
|
%X = load float, float* getelementptr ({ i32, float, { double } }, { i32, float, { double } }* @G, i32 0, i32 1) ; <float> [#uses=1]
|
|
ret float %X
|
|
}
|
|
|
|
define double @constantize() {
|
|
%X = load double, double* getelementptr ({ i32, float, { double } }, { i32, float, { double } }* @G, i32 0, i32 2, i32 0) ; <double> [#uses=1]
|
|
ret double %X
|
|
}
|
|
|
|
@G2 = internal constant { i32, float, { double } } {
|
|
i32 1,
|
|
float 1.000000e+00,
|
|
{ double } { double 1.727000e+01 } } ; <{ i32, float, { double } }*> [#uses=3]
|
|
|
|
define void @onlystore2() {
|
|
store i32 123, i32* getelementptr ({ i32, float, { double } }, { i32, float, { double } }* @G2, i32 0, i32 0)
|
|
ret void
|
|
}
|
|
|
|
define float @storeinit2() {
|
|
store float 1.000000e+00, float* getelementptr ({ i32, float, { double } }, { i32, float, { double } }* @G2, i32 0, i32 1)
|
|
%X = load float, float* getelementptr ({ i32, float, { double } }, { i32, float, { double } }* @G2, i32 0, i32 1) ; <float> [#uses=1]
|
|
ret float %X
|
|
}
|
|
|
|
define double @constantize2() {
|
|
%X = load double, double* getelementptr ({ i32, float, { double } }, { i32, float, { double } }* @G2, i32 0, i32 2, i32 0) ; <double> [#uses=1]
|
|
ret double %X
|
|
}
|
|
|