Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
GHC
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Iterations
Merge Requests
0
Merge Requests
0
Requirements
Requirements
List
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Package Registry
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issue
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Alex D
GHC
Commits
77e899c3
Commit
77e899c3
authored
Jul 02, 2010
by
dterei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
LLVM: Use the inbounds keyword for getelementptr instructions.
parent
12ec40c5
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
10 additions
and
8 deletions
+10
-8
compiler/llvmGen/Llvm/AbsSyn.hs
compiler/llvmGen/Llvm/AbsSyn.hs
+2
-1
compiler/llvmGen/Llvm/PpLlvm.hs
compiler/llvmGen/Llvm/PpLlvm.hs
+5
-4
compiler/llvmGen/LlvmCodeGen/CodeGen.hs
compiler/llvmGen/LlvmCodeGen/CodeGen.hs
+3
-3
No files found.
compiler/llvmGen/Llvm/AbsSyn.hs
View file @
77e899c3
...
...
@@ -171,12 +171,13 @@ data LlvmExpression
{- |
Navigate in an structure, selecting elements
* inbound: Is the pointer inbounds? (computed pointer doesn't overflow)
* ptr: Location of the structure
* indexes: A list of indexes to select the correct value. For example
the first element of the third element of the structure ptr
is selected with [3,1] (zero indexed)
-}
|
GetElemPtr
LlvmVar
[
Int
]
|
GetElemPtr
Bool
LlvmVar
[
Int
]
{- |
Cast the variable from to the to type. This is an abstraction of three
...
...
compiler/llvmGen/Llvm/PpLlvm.hs
View file @
77e899c3
...
...
@@ -177,7 +177,7 @@ ppLlvmExpression expr
Call
tp
fp
args
attrs
->
ppCall
tp
fp
args
attrs
Cast
op
from
to
->
ppCast
op
from
to
Compare
op
left
right
->
ppCmpOp
op
left
right
GetElemPtr
ptr
indexes
->
ppGetElementPtr
ptr
indexes
GetElemPtr
inb
ptr
indexes
->
ppGetElementPtr
inb
ptr
indexes
Load
ptr
->
ppLoad
ptr
Malloc
tp
amount
->
ppMalloc
tp
amount
Phi
tp
precessors
->
ppPhi
tp
precessors
...
...
@@ -268,10 +268,11 @@ ppAlloca tp amount =
in
text
"alloca"
<+>
texts
tp
<>
comma
<+>
texts
amount'
ppGetElementPtr
::
LlvmVar
->
[
Int
]
->
Doc
ppGetElementPtr
ptr
idx
=
ppGetElementPtr
::
Bool
->
LlvmVar
->
[
Int
]
->
Doc
ppGetElementPtr
inb
ptr
idx
=
let
indexes
=
hcat
$
map
((
comma
<+>
texts
i32
<+>
)
.
texts
)
idx
in
text
"getelementptr"
<+>
texts
ptr
<>
indexes
inbound
=
if
inb
then
text
"inbounds"
else
empty
in
text
"getelementptr"
<+>
inbound
<+>
texts
ptr
<>
indexes
ppReturn
::
Maybe
LlvmVar
->
Doc
...
...
compiler/llvmGen/LlvmCodeGen/CodeGen.hs
View file @
77e899c3
...
...
@@ -482,7 +482,7 @@ genStore_fast env addr r n val
True
->
do
(
env'
,
vval
,
stmts
,
top
)
<-
exprToVar
env
val
(
gv
,
s1
)
<-
doExpr
grt
$
Load
gr
(
ptr
,
s2
)
<-
doExpr
grt
$
GetElemPtr
gv
[
ix
]
(
ptr
,
s2
)
<-
doExpr
grt
$
GetElemPtr
True
gv
[
ix
]
-- We might need a different pointer type, so check
case
pLower
grt
==
getVarType
vval
of
-- were fine
...
...
@@ -722,7 +722,7 @@ genMachOp_fast env opt op r n e
in
case
isPointer
grt
&&
rem
==
0
of
True
->
do
(
gv
,
s1
)
<-
doExpr
grt
$
Load
gr
(
ptr
,
s2
)
<-
doExpr
grt
$
GetElemPtr
gv
[
ix
]
(
ptr
,
s2
)
<-
doExpr
grt
$
GetElemPtr
True
gv
[
ix
]
(
var
,
s3
)
<-
doExpr
llvmWord
$
Cast
LM_Ptrtoint
ptr
llvmWord
return
(
env
,
var
,
unitOL
s1
`
snocOL
`
s2
`
snocOL
`
s3
,
[]
)
...
...
@@ -920,7 +920,7 @@ genLoad_fast env e r n ty =
in
case
isPointer
grt
&&
rem
==
0
of
True
->
do
(
gv
,
s1
)
<-
doExpr
grt
$
Load
gr
(
ptr
,
s2
)
<-
doExpr
grt
$
GetElemPtr
gv
[
ix
]
(
ptr
,
s2
)
<-
doExpr
grt
$
GetElemPtr
True
gv
[
ix
]
-- We might need a different pointer type, so check
case
grt
==
ty'
of
-- were fine
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment