You've already forked linux-packaging-mono
acceptance-tests
data
debian
docs
external
Newtonsoft.Json
api-doc-tools
api-snapshot
aspnetwebstack
binary-reference-assemblies
bockbuild
boringssl
cecil
cecil-legacy
corefx
corert
helix-binaries
ikdasm
ikvm
illinker-test-assets
linker
llvm
bindings
cmake
docs
examples
include
lib
projects
resources
runtimes
scripts
test
Analysis
AliasSet
AssumptionCache
BasicAA
BlockFrequencyInfo
BranchProbabilityInfo
CFLAliasAnalysis
CallGraph
ConstantFolding
CostModel
Delinearization
a.ll
constant_functions_multi_dim.ll
divide_by_one.ll
gcd_multiply_expr.ll
himeno_1.ll
himeno_2.ll
iv_times_constant_in_subscript.ll
lit.local.cfg
multidim_ivs_and_integer_offsets_3d.ll
multidim_ivs_and_integer_offsets_nts_3d.ll
multidim_ivs_and_parameteric_offsets_3d.ll
multidim_only_ivs_2d.ll
multidim_only_ivs_2d_nested.ll
multidim_only_ivs_3d.ll
multidim_only_ivs_3d_cast.ll
multidim_two_accesses_different_delinearization.ll
parameter_addrec_product.ll
terms_with_identity_factor.ll
type_mismatch.ll
undef.ll
DemandedBits
DependenceAnalysis
DivergenceAnalysis
DominanceFrontier
Dominators
GlobalsModRef
IVUsers
LazyCallGraph
LazyValueAnalysis
Lint
LoopAccessAnalysis
LoopInfo
MemoryDependenceAnalysis
MemorySSA
PostDominators
ProfileSummary
RegionInfo
ScalarEvolution
ScopedNoAliasAA
TypeBasedAliasAnalysis
ValueTracking
alias-analysis-uses.ll
Assembler
Bindings
Bitcode
BugPoint
CodeGen
DebugInfo
Examples
ExecutionEngine
Feature
FileCheck
Instrumentation
Integer
JitListener
LTO
Linker
MC
Object
ObjectYAML
Other
SafepointIRVerifier
SymbolRewriter
TableGen
ThinLTO
Transforms
Unit
Verifier
YAMLParser
tools
.clang-format
CMakeLists.txt
TestRunner.sh
lit.cfg.py
lit.site.cfg.py.in
tools
unittests
utils
.arcconfig
.clang-format
.clang-tidy
.gitattributes
.gitignore
CMakeLists.txt
CODE_OWNERS.TXT
CREDITS.TXT
LICENSE.TXT
LLVMBuild.txt
README.txt
RELEASE_TESTERS.TXT
configure
llvm.spec.in
nuget-buildtasks
nunit-lite
roslyn-binaries
rx
xunit-binaries
how-to-bump-roslyn-binaries.md
ikvm-native
libgc
llvm
m4
man
mcs
mk
mono
msvc
po
runtime
samples
scripts
support
tools
COPYING.LIB
LICENSE
Makefile.am
Makefile.in
NEWS
README.md
acinclude.m4
aclocal.m4
autogen.sh
code_of_conduct.md
compile
config.guess
config.h.in
config.rpath
config.sub
configure.REMOVED.git-id
configure.ac.REMOVED.git-id
depcomp
install-sh
ltmain.sh.REMOVED.git-id
missing
mkinstalldirs
mono-uninstalled.pc.in
test-driver
winconfig.h
154 lines
5.2 KiB
LLVM
154 lines
5.2 KiB
LLVM
![]() |
; RUN: opt < %s -basicaa -da -analyze -delinearize
|
||
|
;
|
||
|
; a, b, c, d, g, h;
|
||
|
; char *f;
|
||
|
; static fn1(p1) {
|
||
|
; char *e = p1;
|
||
|
; for (; d;) {
|
||
|
; a = 0;
|
||
|
; for (;; ++a)
|
||
|
; for (; b; ++b)
|
||
|
; c = e[b + a];
|
||
|
; }
|
||
|
; }
|
||
|
;
|
||
|
; fn2() {
|
||
|
; for (;;)
|
||
|
; fn1(&f[g * h]);
|
||
|
; }
|
||
|
|
||
|
@g = common global i32 0, align 4
|
||
|
@h = common global i32 0, align 4
|
||
|
@f = common global i8* null, align 4
|
||
|
@a = common global i32 0, align 4
|
||
|
@b = common global i32 0, align 4
|
||
|
@c = common global i32 0, align 4
|
||
|
@d = common global i32 0, align 4
|
||
|
|
||
|
define i32 @fn2() {
|
||
|
entry:
|
||
|
%.pr = load i32, i32* @d, align 4
|
||
|
%phitmp = icmp eq i32 %.pr, 0
|
||
|
br label %for.cond
|
||
|
|
||
|
for.cond:
|
||
|
%0 = phi i1 [ true, %for.cond ], [ %phitmp, %entry ]
|
||
|
br i1 %0, label %for.cond, label %for.cond2thread-pre-split.preheader.i
|
||
|
|
||
|
for.cond2thread-pre-split.preheader.i:
|
||
|
%1 = load i32, i32* @g, align 4
|
||
|
%2 = load i32, i32* @h, align 4
|
||
|
%mul = mul nsw i32 %2, %1
|
||
|
%3 = load i8*, i8** @f, align 4
|
||
|
%.pr.pre.i = load i32, i32* @b, align 4
|
||
|
br label %for.cond2thread-pre-split.i
|
||
|
|
||
|
for.cond2thread-pre-split.i:
|
||
|
%.pr.i = phi i32 [ 0, %for.inc5.i ], [ %.pr.pre.i, %for.cond2thread-pre-split.preheader.i ]
|
||
|
%storemerge.i = phi i32 [ %inc6.i, %for.inc5.i ], [ 0, %for.cond2thread-pre-split.preheader.i ]
|
||
|
store i32 %storemerge.i, i32* @a, align 4
|
||
|
%tobool31.i = icmp eq i32 %.pr.i, 0
|
||
|
br i1 %tobool31.i, label %for.inc5.i, label %for.body4.preheader.i
|
||
|
|
||
|
for.body4.preheader.i:
|
||
|
%4 = icmp slt i32 %.pr.i, -7
|
||
|
%add.i = add i32 %storemerge.i, %mul
|
||
|
br i1 %4, label %for.body4.i.preheader, label %for.body4.ur.i.preheader
|
||
|
|
||
|
for.body4.i.preheader:
|
||
|
%5 = sub i32 -8, %.pr.i
|
||
|
%6 = lshr i32 %5, 3
|
||
|
%7 = mul i32 %6, 8
|
||
|
br label %for.body4.i
|
||
|
|
||
|
for.body4.i:
|
||
|
%8 = phi i32 [ %inc.7.i, %for.body4.i ], [ %.pr.i, %for.body4.i.preheader ]
|
||
|
%arrayidx.sum1 = add i32 %add.i, %8
|
||
|
%arrayidx.i = getelementptr inbounds i8, i8* %3, i32 %arrayidx.sum1
|
||
|
%9 = load i8, i8* %arrayidx.i, align 1
|
||
|
%conv.i = sext i8 %9 to i32
|
||
|
store i32 %conv.i, i32* @c, align 4
|
||
|
%inc.i = add nsw i32 %8, 1
|
||
|
store i32 %inc.i, i32* @b, align 4
|
||
|
%arrayidx.sum2 = add i32 %add.i, %inc.i
|
||
|
%arrayidx.1.i = getelementptr inbounds i8, i8* %3, i32 %arrayidx.sum2
|
||
|
%10 = load i8, i8* %arrayidx.1.i, align 1
|
||
|
%conv.1.i = sext i8 %10 to i32
|
||
|
store i32 %conv.1.i, i32* @c, align 4
|
||
|
%inc.1.i = add nsw i32 %8, 2
|
||
|
store i32 %inc.1.i, i32* @b, align 4
|
||
|
%arrayidx.sum3 = add i32 %add.i, %inc.1.i
|
||
|
%arrayidx.2.i = getelementptr inbounds i8, i8* %3, i32 %arrayidx.sum3
|
||
|
%11 = load i8, i8* %arrayidx.2.i, align 1
|
||
|
%conv.2.i = sext i8 %11 to i32
|
||
|
store i32 %conv.2.i, i32* @c, align 4
|
||
|
%inc.2.i = add nsw i32 %8, 3
|
||
|
store i32 %inc.2.i, i32* @b, align 4
|
||
|
%arrayidx.sum4 = add i32 %add.i, %inc.2.i
|
||
|
%arrayidx.3.i = getelementptr inbounds i8, i8* %3, i32 %arrayidx.sum4
|
||
|
%12 = load i8, i8* %arrayidx.3.i, align 1
|
||
|
%conv.3.i = sext i8 %12 to i32
|
||
|
store i32 %conv.3.i, i32* @c, align 4
|
||
|
%inc.3.i = add nsw i32 %8, 4
|
||
|
store i32 %inc.3.i, i32* @b, align 4
|
||
|
%arrayidx.sum5 = add i32 %add.i, %inc.3.i
|
||
|
%arrayidx.4.i = getelementptr inbounds i8, i8* %3, i32 %arrayidx.sum5
|
||
|
%13 = load i8, i8* %arrayidx.4.i, align 1
|
||
|
%conv.4.i = sext i8 %13 to i32
|
||
|
store i32 %conv.4.i, i32* @c, align 4
|
||
|
%inc.4.i = add nsw i32 %8, 5
|
||
|
store i32 %inc.4.i, i32* @b, align 4
|
||
|
%arrayidx.sum6 = add i32 %add.i, %inc.4.i
|
||
|
%arrayidx.5.i = getelementptr inbounds i8, i8* %3, i32 %arrayidx.sum6
|
||
|
%14 = load i8, i8* %arrayidx.5.i, align 1
|
||
|
%conv.5.i = sext i8 %14 to i32
|
||
|
store i32 %conv.5.i, i32* @c, align 4
|
||
|
%inc.5.i = add nsw i32 %8, 6
|
||
|
store i32 %inc.5.i, i32* @b, align 4
|
||
|
%arrayidx.sum7 = add i32 %add.i, %inc.5.i
|
||
|
%arrayidx.6.i = getelementptr inbounds i8, i8* %3, i32 %arrayidx.sum7
|
||
|
%15 = load i8, i8* %arrayidx.6.i, align 1
|
||
|
%conv.6.i = sext i8 %15 to i32
|
||
|
store i32 %conv.6.i, i32* @c, align 4
|
||
|
%inc.6.i = add nsw i32 %8, 7
|
||
|
store i32 %inc.6.i, i32* @b, align 4
|
||
|
%arrayidx.sum8 = add i32 %add.i, %inc.6.i
|
||
|
%arrayidx.7.i = getelementptr inbounds i8, i8* %3, i32 %arrayidx.sum8
|
||
|
%16 = load i8, i8* %arrayidx.7.i, align 1
|
||
|
%conv.7.i = sext i8 %16 to i32
|
||
|
store i32 %conv.7.i, i32* @c, align 4
|
||
|
%inc.7.i = add nsw i32 %8, 8
|
||
|
store i32 %inc.7.i, i32* @b, align 4
|
||
|
%tobool3.7.i = icmp sgt i32 %inc.7.i, -8
|
||
|
br i1 %tobool3.7.i, label %for.inc5.loopexit.ur-lcssa.i, label %for.body4.i
|
||
|
|
||
|
for.inc5.loopexit.ur-lcssa.i:
|
||
|
%17 = add i32 %.pr.i, 8
|
||
|
%18 = add i32 %17, %7
|
||
|
%19 = icmp eq i32 %18, 0
|
||
|
br i1 %19, label %for.inc5.i, label %for.body4.ur.i.preheader
|
||
|
|
||
|
for.body4.ur.i.preheader:
|
||
|
%.ph = phi i32 [ %18, %for.inc5.loopexit.ur-lcssa.i ], [ %.pr.i, %for.body4.preheader.i ]
|
||
|
br label %for.body4.ur.i
|
||
|
|
||
|
for.body4.ur.i:
|
||
|
%20 = phi i32 [ %inc.ur.i, %for.body4.ur.i ], [ %.ph, %for.body4.ur.i.preheader ]
|
||
|
%arrayidx.sum = add i32 %add.i, %20
|
||
|
%arrayidx.ur.i = getelementptr inbounds i8, i8* %3, i32 %arrayidx.sum
|
||
|
%21 = load i8, i8* %arrayidx.ur.i, align 1
|
||
|
%conv.ur.i = sext i8 %21 to i32
|
||
|
store i32 %conv.ur.i, i32* @c, align 4
|
||
|
%inc.ur.i = add nsw i32 %20, 1
|
||
|
store i32 %inc.ur.i, i32* @b, align 4
|
||
|
%tobool3.ur.i = icmp eq i32 %inc.ur.i, 0
|
||
|
br i1 %tobool3.ur.i, label %for.inc5.i.loopexit, label %for.body4.ur.i
|
||
|
|
||
|
for.inc5.i.loopexit:
|
||
|
br label %for.inc5.i
|
||
|
|
||
|
for.inc5.i:
|
||
|
%inc6.i = add nsw i32 %storemerge.i, 1
|
||
|
br label %for.cond2thread-pre-split.i
|
||
|
}
|