Skip to content
Draft
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
344 commits
Select commit Hold shift + click to select a range
533ada3
Merge branch 'master' into flattening
athas Dec 29, 2023
c8ba2a7
Merge branch 'master' into flattening
athas Apr 11, 2024
8fcf415
Merge branch 'master' into flattening
athas Jul 19, 2024
a711470
Merge branch 'master' into flattening
athas Nov 23, 2024
3912379
Merge branch 'master' into flattening
athas Dec 4, 2024
be27284
Strangle some warnings.
athas Dec 4, 2024
f71c51e
Merge branch 'master' into flattening
athas Dec 6, 2024
41f7431
Merge branch 'master' into flattening
athas Dec 6, 2024
332c83b
Embellish comment.
athas Dec 6, 2024
76439b4
Style fixes.
athas Dec 6, 2024
25fc164
Reverse the regular dimensions here.
athas Dec 6, 2024
0ded15d
Progress.
athas Dec 11, 2024
f0782fb
Finally fix this demon.
athas Dec 11, 2024
9e5a132
Kill warnings.
athas Dec 16, 2024
6d7bcea
Merge branch 'master' into flattening
athas Jan 6, 2025
cfb0cf5
Flatten concat (#2215)
athas Jan 28, 2025
17bb870
Merge branch 'master' into flattening
athas May 7, 2025
ac787b6
Merge remote-tracking branch 'origin/flattening' into flattening
athas May 7, 2025
800e4f7
Fix final reshape.
athas May 8, 2025
fc1da2b
Merge branch 'master' into flattening
athas Jul 3, 2025
a77dd6f
Merge branch 'master' into flattening
athas Aug 8, 2025
0f5dbdf
Merge branch 'master' into flattening
athas Sep 12, 2025
d14bb73
Merge branch 'master' into flattening
athas Oct 6, 2025
482424b
Merge branch 'master' into flattening
athas Oct 14, 2025
86fc080
Merge branch 'master' into flattening
athas Feb 1, 2026
7bd102a
Merge branch 'master' into flattening
athas Feb 5, 2026
2203c53
Merge branch 'master' into flattening
athas Feb 12, 2026
5a29872
Hack.
athas Feb 12, 2026
9d952f6
Address reduction operator special case.
athas Feb 13, 2026
7d48bfe
Add sequentialisation fallback.
athas Feb 13, 2026
528f074
Fix update with constant value
AmirSpurs Feb 13, 2026
75a5940
Add basic support for array literals?
AmirSpurs Feb 15, 2026
59e73b1
Add const it for-loop
AmirSpurs Feb 17, 2026
2cc4f29
Fix scope
AmirSpurs Feb 18, 2026
3a065ca
Better tag handling
AmirSpurs Feb 19, 2026
8d1b1b4
Add messy while
AmirSpurs Feb 22, 2026
bc40e6c
Add messy while
AmirSpurs Feb 22, 2026
2038fc9
Add filter
AmirSpurs Feb 23, 2026
39a5794
filter instead of doPartition
AmirSpurs Feb 23, 2026
32d7bef
Fallback to doPartition
AmirSpurs Feb 24, 2026
0f3c1ab
add infinite loop
AmirSpurs Feb 24, 2026
1ca08f9
Add generalised IF
AmirSpurs Feb 25, 2026
a45ba12
Allow multiple output bindings
AmirSpurs Feb 25, 2026
7218605
Fix transformInnerMap bug
AmirSpurs Mar 1, 2026
e65f49f
Add Scan SOAC and lots of traceM
AmirSpurs Mar 3, 2026
ea709c0
Add Scratch, fall back WithAcc, and more traceM
AmirSpurs Mar 4, 2026
a753372
Merge branch 'master' into flattening
athas Mar 5, 2026
81120cb
Merge branch 'flattening' into amir-full-flattening
athas Mar 5, 2026
4c22194
Fix concatIrreg type bug
AmirSpurs Mar 5, 2026
61007bb
Add messy test cases
AmirSpurs Mar 5, 2026
559613f
cleanup
AmirSpurs Mar 8, 2026
696842c
Merge remote-tracking branch 'origin/master' into amir-full-flattening
AmirSpurs Mar 8, 2026
e937c8f
Lift for array param smarter
AmirSpurs Mar 10, 2026
6ee670b
Add initial avoidance
AmirSpurs Mar 11, 2026
8a453ef
Add another replicate test.
athas Mar 12, 2026
9501ed3
Add multi-dim-constant replicate
AmirSpurs Mar 13, 2026
c588779
lambda param result might be DistInput
AmirSpurs Mar 13, 2026
a875f57
Change in inner maps handling, add some tests
AmirSpurs Mar 13, 2026
1d13e15
Add multi-dim-var replicate
AmirSpurs Mar 16, 2026
743a9f9
Add basic support for flattening of regular WithAcc.
athas Mar 16, 2026
fe07d00
Merge branch 'master' into flattening
athas Mar 16, 2026
8fafd44
Refactor flattening pass into multiple modules.
athas Mar 16, 2026
bb5cc2e
Add Better isScalarDistStm
AmirSpurs Mar 16, 2026
4b36e25
Add multi-dim replicate tests
AmirSpurs Mar 16, 2026
595b041
Add outer Certs to scalar statements
AmirSpurs Mar 17, 2026
86b44bc
Better function naming
AmirSpurs Mar 17, 2026
a2a6dc4
Add Inner map failing tests
AmirSpurs Mar 19, 2026
c153ce3
Better DistStm classification strategy
AmirSpurs Mar 19, 2026
1b681ba
Fix name collision in readInputs
AmirSpurs Mar 19, 2026
12452e7
Start pretending to handle multiple segment dims.
athas Mar 19, 2026
f08ac64
Kill warnings.
athas Mar 19, 2026
6447417
Cleanup this code.
athas Mar 19, 2026
85ea180
Allow distribution over multiple dimensions.
athas Mar 19, 2026
80208c2
Add messy fix for inner map problem
AmirSpurs Mar 19, 2026
d929e8b
Adjust expected error.
athas Mar 20, 2026
2cdd647
Reformat.
athas Mar 20, 2026
1842c05
Merge branch 'master' into flattening
athas Mar 21, 2026
55bc177
Clean up
AmirSpurs Mar 22, 2026
414ba10
Add first support for regular maps
AmirSpurs Mar 24, 2026
730df2f
Some progress on multi-dim segs
AmirSpurs Mar 25, 2026
0636d56
Reformat
AmirSpurs Mar 25, 2026
c4da12b
Add highly irregular case - currently fails.
athas Mar 25, 2026
5907217
Matches can be parallel.
athas Mar 26, 2026
70ac9b7
Handle builtins.
athas Mar 26, 2026
30d808c
Flatten inside non-top-level statements.
athas Mar 26, 2026
87d3f17
Refactoring
AmirSpurs Mar 26, 2026
1fa1ef5
Clean up transformDistributed
AmirSpurs Mar 27, 2026
b16e28e
Fix scope bug in distributeAndTransformInnerMap
AmirSpurs Mar 27, 2026
1e90d14
Fix inner map result ordering
AmirSpurs Mar 27, 2026
68e518d
Add test for inner map result ordering
AmirSpurs Mar 27, 2026
f3ba162
Reject variant neutral elements in scan/reduce
AmirSpurs Mar 27, 2026
ebc12be
Fix name collision in readInputs again
AmirSpurs Mar 27, 2026
da5d172
read current dims for irregular rearrange and update
AmirSpurs Mar 30, 2026
428d0bb
Add generalized concat
AmirSpurs Mar 30, 2026
0f9e667
Add preprocessing to get rid of Stream
AmirSpurs Mar 31, 2026
2a72cf6
Add more general Reshape
AmirSpurs Mar 31, 2026
1d1ccd7
Get rid of complex Screma in pre process
AmirSpurs Mar 31, 2026
e921566
Add complex-screma test case
AmirSpurs Mar 31, 2026
c9a04a2
Interchanging reduce/scans with inner maps
AmirSpurs Apr 1, 2026
ad08178
MultiDim path can still have irregular result
AmirSpurs Apr 2, 2026
13aa026
Assume 1D IrregularD in onMapInputArr
AmirSpurs Apr 2, 2026
a9c70b9
Add irregular inputs handling in multidim path
AmirSpurs Apr 2, 2026
48f0a57
Reformat
AmirSpurs Apr 2, 2026
eefcfc9
Clean up with onMapIrregularInputArr
AmirSpurs Apr 2, 2026
589318d
No more trying to be smart, actually replicate in onMapFreeVar
AmirSpurs Apr 2, 2026
65cd3e7
Add parallel irreg arraylit
AmirSpurs Apr 4, 2026
7b0928d
Fix num_segments in ArrayLit
AmirSpurs Apr 4, 2026
d3c71d5
Add non-variant arraylit
AmirSpurs Apr 4, 2026
0e1281a
Add missing isAcc check in transformDistributedInnerMap
AmirSpurs Apr 4, 2026
ba14b65
Merge branch 'master' into flattening
athas Apr 6, 2026
64435ed
Add ArrayVal
AmirSpurs Apr 5, 2026
a1adf4b
classify some basicOps as parallel
AmirSpurs Apr 5, 2026
51e5014
Switch back to simpler classifier
AmirSpurs Apr 7, 2026
f5e742f
Add multi-dim support for unifrom for loops
AmirSpurs Apr 7, 2026
9090043
don't create empty scalars
AmirSpurs Apr 7, 2026
99a48bc
make the loop param/result shapes agree
AmirSpurs Apr 7, 2026
c93cbe0
Support for invariant ifs
AmirSpurs Apr 8, 2026
2168892
add multi-dim variant if
AmirSpurs Apr 8, 2026
770ce00
test case
AmirSpurs Apr 8, 2026
7329d6e
clean up
AmirSpurs Apr 9, 2026
ec8e6f4
do not lift every array to irreg in while loops
AmirSpurs Apr 10, 2026
a412494
Reformat
AmirSpurs Apr 10, 2026
bd47bbf
Clean up
AmirSpurs Apr 10, 2026
e1f9373
don't force irregualr for Match
AmirSpurs Apr 11, 2026
a953d63
clean up
AmirSpurs Apr 11, 2026
81c4067
more clean up
AmirSpurs Apr 11, 2026
73399fa
multi-dim support for transformFortoWhile
AmirSpurs Apr 11, 2026
28d5560
Use liftSubExpRegular in transformMatch
AmirSpurs Apr 13, 2026
0587aaf
Back to not replicating irregular free vars
AmirSpurs Apr 15, 2026
19441f9
Add IrregularKind to support replicated irregs
AmirSpurs Apr 15, 2026
041b06e
Some progress on replication avoidance
AmirSpurs Apr 15, 2026
ffb94b5
Merge branch 'master' into flattening
athas Apr 16, 2026
23d8412
Fix irregular array representation comment
AmirSpurs Apr 17, 2026
1eb0e42
Modify how we make our segops input ready
AmirSpurs Apr 20, 2026
982a02e
Clean up
AmirSpurs Apr 20, 2026
b2e45f2
Add segscan with pre map
AmirSpurs Apr 21, 2026
98b1bff
Add genSegRedomap
AmirSpurs Apr 21, 2026
b017db7
Add integrated redomap/scanomap
AmirSpurs Apr 21, 2026
74af6d5
Add MaposcanomapSOAC support
AmirSpurs Apr 22, 2026
5d06c26
Add multi-dim seg support for functions
AmirSpurs Apr 22, 2026
71444db
Use withacc new inputs instead of old inps
AmirSpurs Apr 23, 2026
502e7af
Add basic incremental flattening for inner maps
AmirSpurs Apr 23, 2026
7f5e4e1
Fix maposcanomap post map irregular rep problem
AmirSpurs Apr 23, 2026
df7baa1
Merge branch 'master' into flattening
athas Apr 23, 2026
8361e05
Merge branch 'master' into flattening
athas Apr 25, 2026
69e8d27
Add some tests
AmirSpurs Apr 23, 2026
2835bea
Fix map incremental flattening
AmirSpurs Apr 23, 2026
8dee272
improve outerOnly body
AmirSpurs Apr 23, 2026
c6276d7
formatting
AmirSpurs Apr 24, 2026
59373c1
Add worthSequentialising
AmirSpurs Apr 24, 2026
ba218c3
Support invariant free vars in segred/segscan
AmirSpurs Apr 24, 2026
acedc86
FIx isRedomapSOAC pre process
AmirSpurs Apr 25, 2026
5fabd29
Add top level map vectorization avoidance
AmirSpurs Apr 27, 2026
3e11ee6
Do not enforce dense result
AmirSpurs Apr 28, 2026
0161617
Reforamt
AmirSpurs Apr 28, 2026
c929007
An map incremental flattening test
AmirSpurs Apr 28, 2026
57226ac
Remove unused code
AmirSpurs Apr 28, 2026
c7d18a1
Use ReplicatedIrregularRep instead of replicating regular arrays
AmirSpurs Apr 29, 2026
02695d5
Merge branch 'master' into flattening
athas May 4, 2026
c0349cf
Nicer to read with linebreaks.
athas May 5, 2026
72b210f
Formatting.
athas May 5, 2026
c6d40b7
Work on irregular WithAcc.
athas May 5, 2026
3f18a13
Do not use FOT
AmirSpurs May 5, 2026
135e49d
Add scalar irregular reading in readInputs
AmirSpurs May 5, 2026
853e9da
Work on intrablock
AmirSpurs May 6, 2026
644da67
Merge branch 'master' into flattening
athas May 7, 2026
94c048e
I think this should be like this
AmirSpurs May 7, 2026
3f81625
check for acc type in liftSubExpRegular
AmirSpurs May 8, 2026
bfec09f
Force liftDistResultRep to return dense irregular
AmirSpurs May 8, 2026
f9a8ca3
More WithAcc tests pass
AmirSpurs May 8, 2026
fa0ef67
smaller inputs so it doesn't time out
AmirSpurs May 8, 2026
d2317a8
Fix shapeIota and fix multidim acc
AmirSpurs May 8, 2026
f2d9a24
Add uniform segred/segscan
AmirSpurs May 11, 2026
1c7bcff
Larger input and fix reduce test
AmirSpurs May 12, 2026
ab0db42
Use commutativeLambda to check if operations is commutative
AmirSpurs May 12, 2026
2f9b124
Remove comment
AmirSpurs May 12, 2026
ab33563
Merge remote-tracking branch 'origin/flattening' into flattening
athas May 12, 2026
9d20252
Merge branch 'master' into flattening
athas May 12, 2026
b4561b9
Use new version of regular segscan/segred
AmirSpurs May 12, 2026
b8fba97
Merge branch 'master' into flattening
athas May 12, 2026
7562cc8
Add support for if inside with_acc
AmirSpurs May 13, 2026
a478459
Always carry the size with free vars, remove duplicates
AmirSpurs May 13, 2026
7c87e73
Make segscan noncommutative
AmirSpurs May 15, 2026
b7e0f17
Do not allow variant free vars in segbinop lambda
AmirSpurs May 15, 2026
9e037fc
Fix the expected shape in withacc uniform inputs
AmirSpurs May 15, 2026
fe135f7
fix restag collision in distribute
AmirSpurs May 15, 2026
456426a
Support for inside withacc
AmirSpurs May 15, 2026
c173b06
Support while in withacc (if it is possible)
AmirSpurs May 15, 2026
ceda6d7
Do not geenrate unused incremental flattening code
AmirSpurs May 17, 2026
831dfe0
Formatting
AmirSpurs May 17, 2026
478b1a8
Add vectorized uniform scan/reduce
AmirSpurs May 17, 2026
54c0f4c
Merge remote-tracking branch 'origin/master' into flattening
AmirSpurs May 17, 2026
3ecb17c
Merge branch 'master' into flattening
athas May 18, 2026
05cfbeb
Use segThreadCapped
AmirSpurs May 18, 2026
ded0177
Add top level sequential_outer and sequential handling
AmirSpurs May 18, 2026
0052b92
Add support for top level reduce and scan
AmirSpurs May 18, 2026
ade5bdf
Fix top level map outer only body
AmirSpurs May 18, 2026
d06ad7d
Change preprocess func names
AmirSpurs May 19, 2026
529279e
Preprocess one level at a time
AmirSpurs May 19, 2026
4e028af
Add multi version scan/red
AmirSpurs May 20, 2026
dbc7624
Fix capThreadSegLevel namings
AmirSpurs May 20, 2026
d5d40ee
Fix testcases
AmirSpurs May 20, 2026
c9c3d2d
Clean up debug tracing
AmirSpurs May 20, 2026
4b29214
Merge branch 'master' into flattening
athas May 21, 2026
67f99d6
Define isParallelBasicOp for FlatUpdate/FlatIndex.
athas May 21, 2026
679e57a
Style fixes.
athas May 21, 2026
7f7252f
We can have irregular primitive type
AmirSpurs May 21, 2026
27548c0
Add reading irregular variables in readInputVar.
AmirSpurs May 21, 2026
7123daa
Unhandled WithVJP.
AmirSpurs May 21, 2026
6aaa669
Add Unifrom SegHist
AmirSpurs May 23, 2026
fa40b91
copy array-typed free vars
AmirSpurs May 23, 2026
2634f58
Merge branch 'master' into flattening
athas May 28, 2026
6aa6e23
Bring 'inps' into scope with constructing withacc_lam'.
athas May 28, 2026
d4b3760
Merge branch 'master' into flattening
athas Jun 4, 2026
7dd2011
Accept Irregular ResCerts.
AmirSpurs Jun 5, 2026
85d1ecf
Sequentialise unsuitable SOACs and intrablock applys
AmirSpurs Jun 5, 2026
9ed374e
Add Uniform Replicate.
AmirSpurs Jun 9, 2026
fb8bc7d
Add Uniform Concat
AmirSpurs Jun 9, 2026
037545e
Add uniform concat and replicate tests
AmirSpurs Jun 9, 2026
ab007f9
Do not mess up with scope for collecting types
AmirSpurs Jun 9, 2026
973786e
Add uniform update
AmirSpurs Jun 9, 2026
daeaf36
Add FlatUpdate and FlatIndex
AmirSpurs Jun 10, 2026
461185d
Clean Up flatUpdate
AmirSpurs Jun 10, 2026
cef4c4d
Add manifest
AmirSpurs Jun 10, 2026
ae784b6
Look inside the function body to check if it has parallelism when it …
AmirSpurs Jun 10, 2026
97a684e
Rearrange is paralell
AmirSpurs Jun 10, 2026
7b8c47b
Add Match and general Loop to worthSequentialising
AmirSpurs Jun 10, 2026
a2d229d
Add worthSequentialising TODO
AmirSpurs Jun 10, 2026
4e743d8
Better worthSequentialising
AmirSpurs Jun 10, 2026
36294b6
Update Rearange handling
AmirSpurs Jun 12, 2026
1a483e5
Avoid versioning maps that call parallel functions.
AmirSpurs Jun 12, 2026
367f6b1
Add Unifrom Index and FlatIndex
AmirSpurs Jun 13, 2026
a418590
Uniform Reshape
AmirSpurs Jun 14, 2026
20ee80f
oops forgot top-level hist
AmirSpurs Jun 15, 2026
df4396c
Merge branch 'master' into flattening
athas Jun 18, 2026
e080e3a
Merge branch 'master' into flattening
athas Jun 18, 2026
71c7032
Just disable this; it is not interesting.
athas Jun 18, 2026
fd204ee
Don't split apart MatchEquivs.
athas Jun 18, 2026
331d0a8
Fix Irregular Rearrange.
AmirSpurs Jun 19, 2026
38f7405
Factor SOAC flattening into submodule.
athas Jun 19, 2026
814854f
Reduce duplication.
athas Jun 19, 2026
9eedb6c
Move BasicOps into submodule.
athas Jun 19, 2026
2ba3a0c
Factor loops into submodule.
athas Jun 19, 2026
5556bb5
Centralise things more.
athas Jun 19, 2026
c9d6d9d
Move uniform match into submodule.
athas Jun 19, 2026
8a2bf26
Clean up some ugly style.
athas Jun 19, 2026
06865dc
Do not care about error message.
athas Jun 19, 2026
b0024db
Merge branch 'master' into flattening
athas Jun 20, 2026
ecf2ec8
Put flattening in FlattenM monad.
athas Jun 20, 2026
73743df
No need for MaybeT here.
athas Jun 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions futhark.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,9 @@ library
Futhark.Pass.ExtractKernels.ToGPU
Futhark.Pass.ExtractMulticore
Futhark.Pass.FirstOrderTransform
Futhark.Pass.Flatten
Futhark.Pass.Flatten.Builtins
Futhark.Pass.Flatten.Distribute
Futhark.Pass.KernelBabysitting
Futhark.Pass.LiftAllocations
Futhark.Pass.LowerAllocations
Expand Down Expand Up @@ -491,6 +494,7 @@ library
, lsp >= 1.5.0
, mainland-pretty >=0.7.1
, cmark-gfm >=0.2.1
, OneTuple
, megaparsec >=9.0.0
, mtl >=2.2.1
, neat-interpolation >=0.3
Expand Down
15 changes: 7 additions & 8 deletions src/Futhark/AD/Rev/Scan.hs
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ mkScanFusedMapLam ops w scn_lam xs ys ys_adj s d = do
( buildBody_ $ do
j <- letSubExp "j" =<< toExp (pe64 w - (le64 i + 1))
y_s <- forM ys_adj $ \y_ ->
letSubExp (baseString y_ ++ "_j") =<< eIndex y_ (eSubExp j)
letSubExp (baseString y_ ++ "_j") =<< eIndex y_ [eSubExp j]
let zso = orderArgs s y_s
let ido = orderArgs s $ case_jac k sc idmat
pure $ subExpsRes $ concat $ zipWith (++) zso $ fmap concat ido
Expand All @@ -89,10 +89,10 @@ mkScanFusedMapLam ops w scn_lam xs ys ys_adj s d = do
j <- letSubExp "j" =<< toExp (pe64 w - (le64 i + 1))
j1 <- letSubExp "j1" =<< toExp (pe64 w - le64 i)
y_s <- forM ys_adj $ \y_ ->
letSubExp (baseString y_ ++ "_j") =<< eIndex y_ (eSubExp j)
letSubExp (baseString y_ ++ "_j") =<< eIndex y_ [eSubExp j]

let args =
map (`eIndex` eSubExp j) ys ++ map (`eIndex` eSubExp j1) xs
map (`eIndex` [eSubExp j]) ys ++ map (`eIndex` [eSubExp j1]) xs
lam_rs <- traverse (`eLambda` args) lams

let yso = orderArgs s $ subExpsRes y_s
Expand Down Expand Up @@ -171,7 +171,7 @@ mkScanFinalMap ops w scan_lam xs ys ds = do

dj <-
traverse
(\dd -> letExp (baseString dd ++ "_dj") =<< eIndex dd (eSubExp j))
(\dd -> letExp (baseString dd ++ "_dj") =<< eIndex dd [eSubExp j])
ds

fmap varsRes . letTupExp "scan_contribs"
Expand All @@ -182,9 +182,8 @@ mkScanFinalMap ops w scan_lam xs ys ds = do
lam <- mkScanAdjointLam ops scan_lam WrtSecond $ fmap Var dj

im1 <- letSubExp "im1" =<< toExp (le64 i - 1)
ys_im1 <- forM ys $ \y -> do
y_t <- lookupType y
letSubExp (baseString y ++ "_last") $ BasicOp $ Index y $ fullSlice y_t [DimFix im1]
ys_im1 <- forM ys $ \y ->
letSubExp (baseString y <> "_im1") =<< eIndex y [eSubExp im1]

let args = map eSubExp $ ys_im1 ++ map (Var . paramName) par_x
eLambda lam args
Expand Down Expand Up @@ -341,5 +340,5 @@ diffScanAdd _ops ys n lam' ne as = do
mkLambda [par_i] $ do
a <-
letExp "ys_bar_rev"
=<< eIndex arr (toExp (pe64 n - le64 (paramName par_i) - 1))
=<< eIndex arr [toExp (pe64 n - le64 (paramName par_i) - 1)]
pure [varRes a]
2 changes: 2 additions & 0 deletions src/Futhark/CLI/Dev.hs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ import Futhark.Pass.ExplicitAllocations.Seq qualified as Seq
import Futhark.Pass.ExtractKernels
import Futhark.Pass.ExtractMulticore
import Futhark.Pass.FirstOrderTransform
import Futhark.Pass.Flatten (flattenSOACs)
import Futhark.Pass.KernelBabysitting
import Futhark.Pass.LiftAllocations as LiftAllocations
import Futhark.Pass.LowerAllocations as LowerAllocations
Expand Down Expand Up @@ -605,6 +606,7 @@ commandLineOptions =
kernelsPassOption sinkGPU [],
kernelsPassOption reduceDeviceSyncs [],
typedPassOption soacsProg GPU extractKernels [],
typedPassOption soacsProg GPU flattenSOACs [],
typedPassOption soacsProg MC extractMulticore [],
iplOption [],
allocateOption "a",
Expand Down
10 changes: 5 additions & 5 deletions src/Futhark/Construct.hs
Original file line number Diff line number Diff line change
Expand Up @@ -417,11 +417,11 @@ eOutOfBounds arr is = do
foldBinOp LogOr (constant False) =<< zipWithM checkDim ws is'

-- | The array element at this index.
eIndex :: MonadBuilder m => VName -> m (Exp (Rep m)) -> m (Exp (Rep m))
eIndex arr i = do
i' <- letSubExp "i" =<< i
eIndex :: MonadBuilder m => VName -> [m (Exp (Rep m))] -> m (Exp (Rep m))
eIndex arr is = do
is' <- mapM (letSubExp "i" =<<) is
arr_t <- lookupType arr
pure $ BasicOp $ Index arr $ fullSlice arr_t [DimFix i']
pure $ BasicOp $ Index arr $ fullSlice arr_t $ map DimFix is'

-- | The last element of the given array.
eLast :: MonadBuilder m => VName -> m (Exp (Rep m))
Expand All @@ -430,7 +430,7 @@ eLast arr = do
nm1 <-
letSubExp "nm1" . BasicOp $
BinOp (Sub Int64 OverflowUndef) n (intConst Int64 1)
eIndex arr (eSubExp nm1)
eIndex arr [eSubExp nm1]

-- | Construct an unspecified value of the given type.
eBlank :: MonadBuilder m => Type -> m (Exp (Rep m))
Expand Down
6 changes: 3 additions & 3 deletions src/Futhark/IR/TypeCheck.hs
Original file line number Diff line number Diff line change
Expand Up @@ -723,7 +723,7 @@ checkSubExp (Var ident) = context ("In subexp " <> prettyText ident) $ do
lookupType ident

checkCerts :: Checkable rep => Certs -> TypeM rep ()
checkCerts (Certs cs) = mapM_ (requireI [Prim Unit]) cs
checkCerts = mapM_ lookupType . unCerts

checkSubExpRes :: Checkable rep => SubExpRes -> TypeM rep Type
checkSubExpRes (SubExpRes cs se) = do
Expand Down Expand Up @@ -1276,8 +1276,8 @@ checkStm ::
Stm (Aliases rep) ->
TypeM rep a ->
TypeM rep a
checkStm stm@(Let pat (StmAux (Certs cs) _ (_, dec)) e) m = do
context "When checking certificates" $ mapM_ (requireI [Prim Unit]) cs
checkStm stm@(Let pat (StmAux cs _ (_, dec)) e) m = do
context "When checking certificates" $ checkCerts cs
context "When checking expression annotation" $ checkExpDec dec
context ("When matching\n" <> message " " pat <> "\nwith\n" <> message " " e) $
matchPat pat e
Expand Down
4 changes: 4 additions & 0 deletions src/Futhark/Pass/ExtractKernels/ToGPU.hs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ module Futhark.Pass.ExtractKernels.ToGPU
segThread,
soacsLambdaToGPU,
soacsStmToGPU,
soacsExpToGPU,
scopeForGPU,
scopeForSOACs,
injectSOACS,
Expand Down Expand Up @@ -74,6 +75,9 @@ injectSOACS f =
soacsStmToGPU :: Stm SOACS -> Stm GPU
soacsStmToGPU = runIdentity . rephraseStm (injectSOACS OtherOp)

soacsExpToGPU :: Exp SOACS -> Exp GPU
soacsExpToGPU = runIdentity . rephraseExp (injectSOACS OtherOp)

soacsLambdaToGPU :: Lambda SOACS -> Lambda GPU
soacsLambdaToGPU = runIdentity . rephraseLambda (injectSOACS OtherOp)

Expand Down
Loading