From 6812a2270698282c5f1e7ef3459ac63bbc050e10 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Thu, 10 Mar 2016 06:50:48 -0600 Subject: [PATCH] Slimming down Terra samples --- samples/Terra/abouttocompile.t | 22 -- samples/Terra/addlanguage1.t | 17 - samples/Terra/aggregatearr.t | 18 - samples/Terra/ainline.t | 24 -- samples/Terra/alignment.t | 7 - samples/Terra/and.t | 9 - samples/Terra/anon.t | 26 -- samples/Terra/anon3.t | 18 - samples/Terra/anonstruct.t | 12 - samples/Terra/anonstruct2.t | 7 - samples/Terra/antiquote1.t | 12 - samples/Terra/antiquote2.t | 13 - samples/Terra/antiquote3.t | 16 - samples/Terra/antiquote4.t | 11 - samples/Terra/antiquote5.t | 21 - samples/Terra/array.t | 60 --- samples/Terra/arraylit.t | 29 -- samples/Terra/arrayt2.t | 82 ---- samples/Terra/arrptr.t | 5 - samples/Terra/asm.t | 28 -- samples/Terra/atoi.t | 7 - samples/Terra/avxhadd.t | 32 -- samples/Terra/badname.t | 4 - samples/Terra/benchmark_fannkuchredux.t | 148 ------- samples/Terra/bf.t | 60 --- samples/Terra/blankexp.t | 7 - samples/Terra/blockescape.t | 23 -- samples/Terra/blocking.t | 57 --- samples/Terra/blocking2-fixed.t | 68 ---- samples/Terra/blocking2.t | 81 ---- samples/Terra/blocking3.t | 85 ----- samples/Terra/bounce.t | 23 -- samples/Terra/bug.t | 20 - samples/Terra/bug2.t | 20 - samples/Terra/bug3.t | 15 - samples/Terra/bug4.t | 14 - samples/Terra/calc.t | 33 -- samples/Terra/call.t | 53 --- samples/Terra/callbackcache.t | 9 - samples/Terra/canon.t | 45 --- samples/Terra/canon2.t | 41 -- samples/Terra/cast.t | 11 - samples/Terra/cbool.t | 13 - samples/Terra/cconv.t | 488 ------------------------ samples/Terra/cfgbug.t | 14 - samples/Terra/clanginfo.t | 1 - samples/Terra/class.t | 235 ------------ samples/Terra/class2.t | 45 --- samples/Terra/class3.t | 36 -- samples/Terra/class4.t | 22 -- samples/Terra/class5.t | 54 --- samples/Terra/class6.t | 66 ---- samples/Terra/classifyfloatstructs.t | 137 ------- samples/Terra/clean.t | 17 - samples/Terra/cnames.t | 25 -- samples/Terra/cnamespace.t | 24 -- samples/Terra/cnamespaces.t | 32 -- samples/Terra/compilecallback.t | 16 - samples/Terra/completec.t | 13 - samples/Terra/conflict.t | 12 - samples/Terra/constant.t | 35 -- samples/Terra/constant2.t | 21 - samples/Terra/constructor.t | 12 - samples/Terra/coverage.t | 47 --- samples/Terra/coverage2.t | 209 ---------- samples/Terra/coverage3.t | 107 ------ samples/Terra/crash1.t | 1 - samples/Terra/crash2.t | 1 - samples/Terra/cstruct.t | 20 - samples/Terra/cstruct2.t | 8 - samples/Terra/cudaagg.t | 56 --- samples/Terra/cudaaggregate.t | 45 --- samples/Terra/cudaatomic.t | 39 -- samples/Terra/cudaconst2.t | 14 - samples/Terra/cudaglobal.t | 48 --- samples/Terra/cudahello.t | 30 -- samples/Terra/cudaoffline.t | 65 ---- samples/Terra/cudaoo.t | 20 - samples/Terra/cudaprintf.t | 50 --- samples/Terra/cudashared.t | 47 --- samples/Terra/cudatest.t | 47 --- samples/Terra/cudatex.t | 59 --- samples/Terra/cunion.t | 34 -- samples/Terra/cunion2.t | 35 -- samples/Terra/customline.t | 10 - samples/Terra/customtable.t | 10 - samples/Terra/cvar.t | 9 - samples/Terra/debugcallback.t | 23 -- samples/Terra/declerrors.t | 29 -- samples/Terra/decltwice.t | 18 - samples/Terra/def1.t | 16 - samples/Terra/defaultoperator.t | 9 - samples/Terra/defer.t | 111 ------ samples/Terra/deferbreak.t | 35 -- samples/Terra/defercond.t | 82 ---- samples/Terra/defergoto.t | 35 -- samples/Terra/dgemm.t | 143 ------- samples/Terra/dgemm2.t | 163 -------- samples/Terra/dgemm3.t | 213 ----------- samples/Terra/dgemmpaper.t | 75 ---- samples/Terra/diffuse.t | 237 ------------ samples/Terra/dynlib.t | 47 --- samples/Terra/eager.t | 10 - samples/Terra/emptycalls.t | 31 -- samples/Terra/emptyname.t | 5 - samples/Terra/emptystruct.t | 30 -- samples/Terra/enumc.t | 14 - samples/Terra/evenodd.t | 20 - samples/Terra/examplecompiler1.t | 41 -- samples/Terra/examplelanguage1.t | 7 - samples/Terra/exampleparser1.t | 22 -- samples/Terra/exittest.t | 9 - samples/Terra/explicitcast.t | 11 - samples/Terra/exportdynamic.t | 9 - samples/Terra/expvec.t | 34 -- samples/Terra/f2.t | 17 - samples/Terra/fact.t | 16 - samples/Terra/fakeasm.t | 31 -- samples/Terra/falsespec.t | 8 - samples/Terra/fastcall.t | 24 -- samples/Terra/fib.t | 26 -- samples/Terra/fib2.t | 27 -- samples/Terra/fnames.t | 5 - samples/Terra/fncalltest.t | 16 - samples/Terra/fnpointer.t | 24 -- samples/Terra/fnptr.t | 7 - samples/Terra/fnptrc.t | 25 -- samples/Terra/foo.t | 1 - samples/Terra/for.t | 31 -- samples/Terra/for2.t | 31 -- samples/Terra/forbreak.t | 17 - samples/Terra/forlist.t | 24 -- samples/Terra/forlist2.t | 37 -- samples/Terra/forp.t | 21 - samples/Terra/forsym.t | 24 -- samples/Terra/forwardtodef.t | 7 - samples/Terra/functionnoproto.t | 6 - samples/Terra/gctest.t | 18 - samples/Terra/gemm.t | 207 ---------- samples/Terra/getmethod.t | 19 - samples/Terra/gettype.t | 18 - samples/Terra/globals.t | 26 -- samples/Terra/goto.t | 16 - samples/Terra/goto2.t | 18 - samples/Terra/gvarfault.t | 24 -- samples/Terra/hasbeenfrozen.t | 33 -- samples/Terra/hello.t | 8 - samples/Terra/hello2.t | 10 - samples/Terra/hexf.t | 9 - samples/Terra/huge.t | 7 - samples/Terra/ifelse.t | 17 - samples/Terra/includec.t | 42 -- samples/Terra/includetwice.t | 21 - samples/Terra/incomplete.t | 32 -- samples/Terra/incomplete2.t | 25 -- samples/Terra/incomplete3.t | 29 -- samples/Terra/incomplete4.t | 22 -- samples/Terra/incomplete5.t | 65 ---- samples/Terra/incompletetypetest.t | 13 - samples/Terra/incompletetypetest2.t | 13 - samples/Terra/incompletetypetest3.t | 13 - samples/Terra/indexing64.t | 10 - samples/Terra/indexingbug.t | 31 -- samples/Terra/interface.t | 33 -- samples/Terra/interface2.t | 38 -- samples/Terra/intrinsic.t | 21 - samples/Terra/isvolatile.t | 7 - samples/Terra/labelbug.t | 5 - samples/Terra/latelink.t | 24 -- samples/Terra/lazycstring.t | 21 - samples/Terra/lazylog.t | 61 --- samples/Terra/leaktest.t | 27 -- samples/Terra/let1.t | 15 - samples/Terra/let2.t | 64 ---- samples/Terra/linkllvm.t | 13 - samples/Terra/localenv.t | 46 --- samples/Terra/localenv2.t | 7 - samples/Terra/logical.t | 33 -- samples/Terra/luabridge.t | 18 - samples/Terra/luabridge2.t | 92 ----- samples/Terra/luabridgefn.t | 23 -- samples/Terra/luabridgerec.t | 10 - samples/Terra/luabridgeunion.t | 14 - samples/Terra/luaterramethod.t | 40 -- samples/Terra/lvaluepointer.t | 10 - samples/Terra/lvaluequote.t | 22 -- samples/Terra/lvaluetreelist.t | 9 - samples/Terra/macro.t | 50 --- samples/Terra/macro2.t | 14 - samples/Terra/macro3.t | 14 - samples/Terra/macrokey.t | 9 - samples/Terra/macrolet.t | 17 - samples/Terra/macroselect.t | 11 - samples/Terra/macrotest.t | 9 - samples/Terra/malloc.t | 23 -- samples/Terra/mathlib.t | 9 - samples/Terra/metatype.t | 16 - samples/Terra/method.t | 42 -- samples/Terra/methodantiquote.t | 18 - samples/Terra/methodmissing.t | 17 - samples/Terra/methodrvalue.t | 18 - samples/Terra/methodsugar.t | 15 - samples/Terra/missingfields.t | 14 - samples/Terra/mixed.t | 13 - samples/Terra/multiconstructor.t | 17 - samples/Terra/multimacro.t | 17 - samples/Terra/multiterra.t | 79 ---- samples/Terra/names.t | 16 - samples/Terra/nestedcalls.t | 11 - samples/Terra/nestextract.t | 40 -- samples/Terra/nestnoerror.t | 17 - samples/Terra/new.t | 14 - samples/Terra/nillocal.t | 6 - samples/Terra/niltype.t | 9 - samples/Terra/nojit.t | 20 - samples/Terra/nolengthop.t | 2 - samples/Terra/nonprototypec.t | 12 - samples/Terra/nontemporal.t | 7 - samples/Terra/numliteral.t | 14 - samples/Terra/objc.t | 25 -- samples/Terra/objc2.t | 42 -- samples/Terra/objtest.t | 45 --- samples/Terra/offsetcalc.t | 33 -- samples/Terra/opaquealloc.t | 19 - samples/Terra/or.t | 9 - samples/Terra/ordercomplete.t | 25 -- samples/Terra/output.t | 16 - samples/Terra/overload.t | 17 - samples/Terra/overload2.t | 15 - samples/Terra/overload3.t | 15 - samples/Terra/overloadcall.t | 12 - samples/Terra/overloadmethod.t | 24 -- samples/Terra/overloadmethod2.t | 17 - samples/Terra/overloadmethod3.t | 18 - samples/Terra/overloadproduct.t | 65 ---- samples/Terra/overloadrecv.t | 20 - samples/Terra/painfulrecstruct.t | 22 -- samples/Terra/paren.t | 5 - samples/Terra/parsecrash.t | 7 - samples/Terra/parsefail.t | 35 -- samples/Terra/parsefail2.t | 5 - samples/Terra/pattern.t | 43 --- samples/Terra/point.t | 13 - samples/Terra/pointerarith.t | 31 -- samples/Terra/pointerlike.t | 7 - samples/Terra/pow.t | 28 -- samples/Terra/ppltalk.t | 18 - samples/Terra/ppnil.t | 4 - samples/Terra/pratttest1.t | 4 - samples/Terra/prec.t | 4 - samples/Terra/prec2.t | 2 - samples/Terra/pretty.t | 69 ---- samples/Terra/printd.t | 5 - samples/Terra/printfarray.t | 12 - samples/Terra/printfloat.t | 7 - samples/Terra/proxystruct.t | 19 - samples/Terra/pt.t | 18 - samples/Terra/pthreads.t | 47 --- samples/Terra/quote.t | 10 - samples/Terra/quote10.t | 13 - samples/Terra/quote2.t | 9 - samples/Terra/quote3.t | 13 - samples/Terra/quote4.t | 9 - samples/Terra/quote5.t | 20 - samples/Terra/quote6.t | 12 - samples/Terra/quote7.t | 23 -- samples/Terra/quote8.t | 19 - samples/Terra/quote9.t | 19 - samples/Terra/quoteblock.t | 12 - samples/Terra/quoteenv.t | 25 -- samples/Terra/quoteselect.t | 12 - samples/Terra/rd.t | 1 - samples/Terra/receivercasts.t | 22 -- samples/Terra/recfn.t | 10 - samples/Terra/recoverfromerror.t | 15 - samples/Terra/recstruct.t | 33 -- samples/Terra/recstruct2.t | 17 - samples/Terra/rename.t | 8 - samples/Terra/renaming.t | 21 - samples/Terra/requiretwice.t | 3 - samples/Terra/rvaluerecv.t | 30 -- samples/Terra/scope.t | 13 - samples/Terra/selectoverload.t | 25 -- samples/Terra/setname.t | 7 - samples/Terra/setter.t | 39 -- samples/Terra/sgemm-old.t | 205 ---------- samples/Terra/sgemm.t | 162 -------- samples/Terra/sgemm3.t | 124 ------ samples/Terra/sgemmkernel.t | 164 -------- samples/Terra/shallowfreeze.t | 24 -- samples/Terra/sharedlib.t | 22 -- samples/Terra/shift.t | 7 - samples/Terra/signext.t | 12 - samples/Terra/simple.t | 6 - samples/Terra/simpleadd.t | 15 - samples/Terra/simpleapply.t | 19 - samples/Terra/simpleglobal.t | 19 - samples/Terra/simplerec.t | 25 -- samples/Terra/simplestruct.t | 10 - samples/Terra/simplevec.t | 12 - samples/Terra/sintable.t | 17 - samples/Terra/special.t | 61 --- samples/Terra/speed.t | 30 -- samples/Terra/splitprimary.t | 19 - samples/Terra/ssimple.t | 477 ----------------------- samples/Terra/staticmethod.t | 9 - samples/Terra/stattest.t | 13 - samples/Terra/stencil.t | 134 ------- samples/Terra/strerror.t | 9 - samples/Terra/string.t | 15 - samples/Terra/struct.t | 50 --- samples/Terra/structarg.t | 9 - samples/Terra/structcast.t | 38 -- samples/Terra/structconstructor.t | 9 - samples/Terra/structrvalue.t | 16 - samples/Terra/structsyntax.t | 14 - samples/Terra/sugar.t | 15 - samples/Terra/sumlanguage1.t | 2 - samples/Terra/sumlanguage2.t | 4 - samples/Terra/symbolmangling.t | 4 - samples/Terra/symbolvar.t | 11 - samples/Terra/symbolvar2.t | 16 - samples/Terra/symbolvar3.t | 16 - samples/Terra/symbolvar4.t | 16 - samples/Terra/symbolvar5.t | 16 - samples/Terra/symbolvar6.t | 16 - samples/Terra/symbolvar7.t | 15 - samples/Terra/symparam.t | 9 - samples/Terra/symparam2.t | 9 - samples/Terra/symparam3.t | 15 - samples/Terra/template.t | 6 - samples/Terra/terracast.t | 15 - samples/Terra/terralua.t | 32 -- samples/Terra/terraluamethod.t | 16 - samples/Terra/terranew.t | 19 - samples/Terra/testdebug.t | 57 --- samples/Terra/testimport.t | 6 - samples/Terra/testlang1.t | 21 - samples/Terra/testlang2.t | 4 - samples/Terra/testlog.t | 8 - samples/Terra/testrequire.t | 14 - samples/Terra/teststd.t | 45 --- samples/Terra/testvector.t | 57 --- samples/Terra/torturechain.t | 67 ---- samples/Terra/toterraexpression.t | 8 - samples/Terra/twolang.t | 23 -- samples/Terra/typeexp.t | 9 - samples/Terra/union.t | 26 -- samples/Terra/unm.t | 20 - samples/Terra/unpacktuple.t | 30 -- samples/Terra/unsafesym.t | 14 - samples/Terra/unstrict.t | 5 - samples/Terra/usercast.t | 24 -- samples/Terra/varargcstring.t | 2 - samples/Terra/vars.t | 23 -- samples/Terra/vars2.t | 17 - samples/Terra/vec.t | 27 -- samples/Terra/vecarith.t | 138 ------- samples/Terra/veclit.t | 29 -- samples/Terra/vecobj.t | 54 --- samples/Terra/vecptr.t | 4 - samples/Terra/vecsize.t | 5 - samples/Terra/vtablerec.t | 30 -- samples/Terra/zeroargs.t | 5 - samples/Terra/zeroreturn.t | 18 - samples/Terra/zeroreturn2.t | 17 - 366 files changed, 11582 deletions(-) delete mode 100644 samples/Terra/abouttocompile.t delete mode 100755 samples/Terra/addlanguage1.t delete mode 100644 samples/Terra/aggregatearr.t delete mode 100644 samples/Terra/ainline.t delete mode 100644 samples/Terra/alignment.t delete mode 100644 samples/Terra/and.t delete mode 100644 samples/Terra/anon.t delete mode 100644 samples/Terra/anon3.t delete mode 100644 samples/Terra/anonstruct.t delete mode 100644 samples/Terra/anonstruct2.t delete mode 100644 samples/Terra/antiquote1.t delete mode 100644 samples/Terra/antiquote2.t delete mode 100644 samples/Terra/antiquote3.t delete mode 100644 samples/Terra/antiquote4.t delete mode 100644 samples/Terra/antiquote5.t delete mode 100644 samples/Terra/array.t delete mode 100644 samples/Terra/arraylit.t delete mode 100644 samples/Terra/arrayt2.t delete mode 100644 samples/Terra/arrptr.t delete mode 100644 samples/Terra/asm.t delete mode 100644 samples/Terra/atoi.t delete mode 100644 samples/Terra/avxhadd.t delete mode 100644 samples/Terra/badname.t delete mode 100644 samples/Terra/benchmark_fannkuchredux.t delete mode 100644 samples/Terra/bf.t delete mode 100644 samples/Terra/blankexp.t delete mode 100644 samples/Terra/blockescape.t delete mode 100644 samples/Terra/blocking.t delete mode 100644 samples/Terra/blocking2-fixed.t delete mode 100644 samples/Terra/blocking2.t delete mode 100644 samples/Terra/blocking3.t delete mode 100644 samples/Terra/bounce.t delete mode 100644 samples/Terra/bug.t delete mode 100644 samples/Terra/bug2.t delete mode 100644 samples/Terra/bug3.t delete mode 100644 samples/Terra/bug4.t delete mode 100644 samples/Terra/calc.t delete mode 100644 samples/Terra/call.t delete mode 100644 samples/Terra/callbackcache.t delete mode 100644 samples/Terra/canon.t delete mode 100644 samples/Terra/canon2.t delete mode 100644 samples/Terra/cast.t delete mode 100644 samples/Terra/cbool.t delete mode 100644 samples/Terra/cconv.t delete mode 100644 samples/Terra/cfgbug.t delete mode 100644 samples/Terra/clanginfo.t delete mode 100644 samples/Terra/class.t delete mode 100644 samples/Terra/class2.t delete mode 100644 samples/Terra/class3.t delete mode 100644 samples/Terra/class4.t delete mode 100644 samples/Terra/class5.t delete mode 100644 samples/Terra/class6.t delete mode 100644 samples/Terra/classifyfloatstructs.t delete mode 100644 samples/Terra/clean.t delete mode 100644 samples/Terra/cnames.t delete mode 100644 samples/Terra/cnamespace.t delete mode 100644 samples/Terra/cnamespaces.t delete mode 100644 samples/Terra/compilecallback.t delete mode 100644 samples/Terra/completec.t delete mode 100644 samples/Terra/conflict.t delete mode 100644 samples/Terra/constant.t delete mode 100644 samples/Terra/constant2.t delete mode 100644 samples/Terra/constructor.t delete mode 100644 samples/Terra/coverage.t delete mode 100644 samples/Terra/coverage2.t delete mode 100644 samples/Terra/coverage3.t delete mode 100644 samples/Terra/crash1.t delete mode 100644 samples/Terra/crash2.t delete mode 100644 samples/Terra/cstruct.t delete mode 100644 samples/Terra/cstruct2.t delete mode 100644 samples/Terra/cudaagg.t delete mode 100644 samples/Terra/cudaaggregate.t delete mode 100644 samples/Terra/cudaatomic.t delete mode 100644 samples/Terra/cudaconst2.t delete mode 100644 samples/Terra/cudaglobal.t delete mode 100644 samples/Terra/cudahello.t delete mode 100644 samples/Terra/cudaoffline.t delete mode 100644 samples/Terra/cudaoo.t delete mode 100644 samples/Terra/cudaprintf.t delete mode 100644 samples/Terra/cudashared.t delete mode 100644 samples/Terra/cudatest.t delete mode 100644 samples/Terra/cudatex.t delete mode 100644 samples/Terra/cunion.t delete mode 100644 samples/Terra/cunion2.t delete mode 100644 samples/Terra/customline.t delete mode 100644 samples/Terra/customtable.t delete mode 100644 samples/Terra/cvar.t delete mode 100644 samples/Terra/debugcallback.t delete mode 100644 samples/Terra/declerrors.t delete mode 100644 samples/Terra/decltwice.t delete mode 100755 samples/Terra/def1.t delete mode 100644 samples/Terra/defaultoperator.t delete mode 100644 samples/Terra/defer.t delete mode 100644 samples/Terra/deferbreak.t delete mode 100644 samples/Terra/defercond.t delete mode 100644 samples/Terra/defergoto.t delete mode 100644 samples/Terra/dgemm.t delete mode 100644 samples/Terra/dgemm2.t delete mode 100644 samples/Terra/dgemm3.t delete mode 100644 samples/Terra/dgemmpaper.t delete mode 100644 samples/Terra/diffuse.t delete mode 100644 samples/Terra/dynlib.t delete mode 100644 samples/Terra/eager.t delete mode 100644 samples/Terra/emptycalls.t delete mode 100644 samples/Terra/emptyname.t delete mode 100644 samples/Terra/emptystruct.t delete mode 100644 samples/Terra/enumc.t delete mode 100644 samples/Terra/evenodd.t delete mode 100755 samples/Terra/examplecompiler1.t delete mode 100755 samples/Terra/examplelanguage1.t delete mode 100644 samples/Terra/exampleparser1.t delete mode 100644 samples/Terra/exittest.t delete mode 100644 samples/Terra/explicitcast.t delete mode 100644 samples/Terra/exportdynamic.t delete mode 100644 samples/Terra/expvec.t delete mode 100644 samples/Terra/f2.t delete mode 100644 samples/Terra/fact.t delete mode 100644 samples/Terra/fakeasm.t delete mode 100644 samples/Terra/falsespec.t delete mode 100644 samples/Terra/fastcall.t delete mode 100644 samples/Terra/fib.t delete mode 100644 samples/Terra/fib2.t delete mode 100644 samples/Terra/fnames.t delete mode 100644 samples/Terra/fncalltest.t delete mode 100644 samples/Terra/fnpointer.t delete mode 100644 samples/Terra/fnptr.t delete mode 100644 samples/Terra/fnptrc.t delete mode 100644 samples/Terra/foo.t delete mode 100644 samples/Terra/for.t delete mode 100644 samples/Terra/for2.t delete mode 100644 samples/Terra/forbreak.t delete mode 100644 samples/Terra/forlist.t delete mode 100644 samples/Terra/forlist2.t delete mode 100644 samples/Terra/forp.t delete mode 100644 samples/Terra/forsym.t delete mode 100644 samples/Terra/forwardtodef.t delete mode 100644 samples/Terra/functionnoproto.t delete mode 100644 samples/Terra/gctest.t delete mode 100644 samples/Terra/gemm.t delete mode 100644 samples/Terra/getmethod.t delete mode 100644 samples/Terra/gettype.t delete mode 100644 samples/Terra/globals.t delete mode 100644 samples/Terra/goto.t delete mode 100644 samples/Terra/goto2.t delete mode 100644 samples/Terra/gvarfault.t delete mode 100644 samples/Terra/hasbeenfrozen.t delete mode 100644 samples/Terra/hello.t delete mode 100644 samples/Terra/hello2.t delete mode 100644 samples/Terra/hexf.t delete mode 100644 samples/Terra/huge.t delete mode 100644 samples/Terra/ifelse.t delete mode 100644 samples/Terra/includec.t delete mode 100644 samples/Terra/includetwice.t delete mode 100644 samples/Terra/incomplete.t delete mode 100644 samples/Terra/incomplete2.t delete mode 100644 samples/Terra/incomplete3.t delete mode 100644 samples/Terra/incomplete4.t delete mode 100644 samples/Terra/incomplete5.t delete mode 100644 samples/Terra/incompletetypetest.t delete mode 100644 samples/Terra/incompletetypetest2.t delete mode 100644 samples/Terra/incompletetypetest3.t delete mode 100644 samples/Terra/indexing64.t delete mode 100644 samples/Terra/indexingbug.t delete mode 100644 samples/Terra/interface.t delete mode 100644 samples/Terra/interface2.t delete mode 100644 samples/Terra/intrinsic.t delete mode 100644 samples/Terra/isvolatile.t delete mode 100644 samples/Terra/labelbug.t delete mode 100644 samples/Terra/latelink.t delete mode 100644 samples/Terra/lazycstring.t delete mode 100644 samples/Terra/lazylog.t delete mode 100644 samples/Terra/leaktest.t delete mode 100644 samples/Terra/let1.t delete mode 100644 samples/Terra/let2.t delete mode 100644 samples/Terra/linkllvm.t delete mode 100644 samples/Terra/localenv.t delete mode 100644 samples/Terra/localenv2.t delete mode 100644 samples/Terra/logical.t delete mode 100644 samples/Terra/luabridge.t delete mode 100644 samples/Terra/luabridge2.t delete mode 100644 samples/Terra/luabridgefn.t delete mode 100644 samples/Terra/luabridgerec.t delete mode 100644 samples/Terra/luabridgeunion.t delete mode 100644 samples/Terra/luaterramethod.t delete mode 100644 samples/Terra/lvaluepointer.t delete mode 100644 samples/Terra/lvaluequote.t delete mode 100644 samples/Terra/lvaluetreelist.t delete mode 100644 samples/Terra/macro.t delete mode 100644 samples/Terra/macro2.t delete mode 100644 samples/Terra/macro3.t delete mode 100644 samples/Terra/macrokey.t delete mode 100644 samples/Terra/macrolet.t delete mode 100644 samples/Terra/macroselect.t delete mode 100644 samples/Terra/macrotest.t delete mode 100644 samples/Terra/malloc.t delete mode 100644 samples/Terra/mathlib.t delete mode 100644 samples/Terra/metatype.t delete mode 100644 samples/Terra/method.t delete mode 100644 samples/Terra/methodantiquote.t delete mode 100644 samples/Terra/methodmissing.t delete mode 100644 samples/Terra/methodrvalue.t delete mode 100644 samples/Terra/methodsugar.t delete mode 100644 samples/Terra/missingfields.t delete mode 100644 samples/Terra/mixed.t delete mode 100644 samples/Terra/multiconstructor.t delete mode 100644 samples/Terra/multimacro.t delete mode 100644 samples/Terra/multiterra.t delete mode 100644 samples/Terra/names.t delete mode 100644 samples/Terra/nestedcalls.t delete mode 100644 samples/Terra/nestextract.t delete mode 100644 samples/Terra/nestnoerror.t delete mode 100644 samples/Terra/new.t delete mode 100644 samples/Terra/nillocal.t delete mode 100644 samples/Terra/niltype.t delete mode 100644 samples/Terra/nojit.t delete mode 100644 samples/Terra/nolengthop.t delete mode 100644 samples/Terra/nonprototypec.t delete mode 100644 samples/Terra/nontemporal.t delete mode 100644 samples/Terra/numliteral.t delete mode 100644 samples/Terra/objc.t delete mode 100644 samples/Terra/objc2.t delete mode 100644 samples/Terra/objtest.t delete mode 100644 samples/Terra/offsetcalc.t delete mode 100644 samples/Terra/opaquealloc.t delete mode 100644 samples/Terra/or.t delete mode 100644 samples/Terra/ordercomplete.t delete mode 100644 samples/Terra/output.t delete mode 100644 samples/Terra/overload.t delete mode 100644 samples/Terra/overload2.t delete mode 100644 samples/Terra/overload3.t delete mode 100644 samples/Terra/overloadcall.t delete mode 100644 samples/Terra/overloadmethod.t delete mode 100644 samples/Terra/overloadmethod2.t delete mode 100644 samples/Terra/overloadmethod3.t delete mode 100644 samples/Terra/overloadproduct.t delete mode 100644 samples/Terra/overloadrecv.t delete mode 100644 samples/Terra/painfulrecstruct.t delete mode 100644 samples/Terra/paren.t delete mode 100644 samples/Terra/parsecrash.t delete mode 100644 samples/Terra/parsefail.t delete mode 100644 samples/Terra/parsefail2.t delete mode 100644 samples/Terra/pattern.t delete mode 100644 samples/Terra/point.t delete mode 100644 samples/Terra/pointerarith.t delete mode 100644 samples/Terra/pointerlike.t delete mode 100644 samples/Terra/pow.t delete mode 100644 samples/Terra/ppltalk.t delete mode 100644 samples/Terra/ppnil.t delete mode 100755 samples/Terra/pratttest1.t delete mode 100644 samples/Terra/prec.t delete mode 100644 samples/Terra/prec2.t delete mode 100644 samples/Terra/pretty.t delete mode 100644 samples/Terra/printd.t delete mode 100644 samples/Terra/printfarray.t delete mode 100644 samples/Terra/printfloat.t delete mode 100644 samples/Terra/proxystruct.t delete mode 100644 samples/Terra/pt.t delete mode 100644 samples/Terra/pthreads.t delete mode 100644 samples/Terra/quote.t delete mode 100644 samples/Terra/quote10.t delete mode 100644 samples/Terra/quote2.t delete mode 100644 samples/Terra/quote3.t delete mode 100644 samples/Terra/quote4.t delete mode 100644 samples/Terra/quote5.t delete mode 100644 samples/Terra/quote6.t delete mode 100644 samples/Terra/quote7.t delete mode 100644 samples/Terra/quote8.t delete mode 100644 samples/Terra/quote9.t delete mode 100644 samples/Terra/quoteblock.t delete mode 100644 samples/Terra/quoteenv.t delete mode 100644 samples/Terra/quoteselect.t delete mode 100644 samples/Terra/rd.t delete mode 100644 samples/Terra/receivercasts.t delete mode 100644 samples/Terra/recfn.t delete mode 100644 samples/Terra/recoverfromerror.t delete mode 100644 samples/Terra/recstruct.t delete mode 100644 samples/Terra/recstruct2.t delete mode 100644 samples/Terra/rename.t delete mode 100644 samples/Terra/renaming.t delete mode 100644 samples/Terra/requiretwice.t delete mode 100644 samples/Terra/rvaluerecv.t delete mode 100644 samples/Terra/scope.t delete mode 100644 samples/Terra/selectoverload.t delete mode 100644 samples/Terra/setname.t delete mode 100644 samples/Terra/setter.t delete mode 100644 samples/Terra/sgemm-old.t delete mode 100644 samples/Terra/sgemm.t delete mode 100644 samples/Terra/sgemm3.t delete mode 100644 samples/Terra/sgemmkernel.t delete mode 100644 samples/Terra/shallowfreeze.t delete mode 100644 samples/Terra/sharedlib.t delete mode 100644 samples/Terra/shift.t delete mode 100644 samples/Terra/signext.t delete mode 100644 samples/Terra/simple.t delete mode 100644 samples/Terra/simpleadd.t delete mode 100644 samples/Terra/simpleapply.t delete mode 100644 samples/Terra/simpleglobal.t delete mode 100644 samples/Terra/simplerec.t delete mode 100644 samples/Terra/simplestruct.t delete mode 100644 samples/Terra/simplevec.t delete mode 100644 samples/Terra/sintable.t delete mode 100644 samples/Terra/special.t delete mode 100644 samples/Terra/speed.t delete mode 100644 samples/Terra/splitprimary.t delete mode 100644 samples/Terra/ssimple.t delete mode 100644 samples/Terra/staticmethod.t delete mode 100644 samples/Terra/stattest.t delete mode 100644 samples/Terra/stencil.t delete mode 100644 samples/Terra/strerror.t delete mode 100644 samples/Terra/string.t delete mode 100644 samples/Terra/struct.t delete mode 100644 samples/Terra/structarg.t delete mode 100644 samples/Terra/structcast.t delete mode 100644 samples/Terra/structconstructor.t delete mode 100644 samples/Terra/structrvalue.t delete mode 100644 samples/Terra/structsyntax.t delete mode 100644 samples/Terra/sugar.t delete mode 100755 samples/Terra/sumlanguage1.t delete mode 100755 samples/Terra/sumlanguage2.t delete mode 100644 samples/Terra/symbolmangling.t delete mode 100644 samples/Terra/symbolvar.t delete mode 100644 samples/Terra/symbolvar2.t delete mode 100644 samples/Terra/symbolvar3.t delete mode 100644 samples/Terra/symbolvar4.t delete mode 100644 samples/Terra/symbolvar5.t delete mode 100644 samples/Terra/symbolvar6.t delete mode 100644 samples/Terra/symbolvar7.t delete mode 100644 samples/Terra/symparam.t delete mode 100644 samples/Terra/symparam2.t delete mode 100644 samples/Terra/symparam3.t delete mode 100644 samples/Terra/template.t delete mode 100644 samples/Terra/terracast.t delete mode 100644 samples/Terra/terralua.t delete mode 100644 samples/Terra/terraluamethod.t delete mode 100644 samples/Terra/terranew.t delete mode 100644 samples/Terra/testdebug.t delete mode 100644 samples/Terra/testimport.t delete mode 100755 samples/Terra/testlang1.t delete mode 100755 samples/Terra/testlang2.t delete mode 100644 samples/Terra/testlog.t delete mode 100644 samples/Terra/testrequire.t delete mode 100644 samples/Terra/teststd.t delete mode 100644 samples/Terra/testvector.t delete mode 100644 samples/Terra/torturechain.t delete mode 100644 samples/Terra/toterraexpression.t delete mode 100644 samples/Terra/twolang.t delete mode 100644 samples/Terra/typeexp.t delete mode 100644 samples/Terra/union.t delete mode 100644 samples/Terra/unm.t delete mode 100644 samples/Terra/unpacktuple.t delete mode 100644 samples/Terra/unsafesym.t delete mode 100644 samples/Terra/unstrict.t delete mode 100644 samples/Terra/usercast.t delete mode 100644 samples/Terra/varargcstring.t delete mode 100644 samples/Terra/vars.t delete mode 100644 samples/Terra/vars2.t delete mode 100644 samples/Terra/vec.t delete mode 100644 samples/Terra/vecarith.t delete mode 100644 samples/Terra/veclit.t delete mode 100644 samples/Terra/vecobj.t delete mode 100644 samples/Terra/vecptr.t delete mode 100644 samples/Terra/vecsize.t delete mode 100644 samples/Terra/vtablerec.t delete mode 100644 samples/Terra/zeroargs.t delete mode 100644 samples/Terra/zeroreturn.t delete mode 100644 samples/Terra/zeroreturn2.t diff --git a/samples/Terra/abouttocompile.t b/samples/Terra/abouttocompile.t deleted file mode 100644 index f6f9f6c8..00000000 --- a/samples/Terra/abouttocompile.t +++ /dev/null @@ -1,22 +0,0 @@ -struct A { - a : int; - b : int; -} - -function A.metamethods.__getentries(self) - print("GET ENTRIES") - for i,e in ipairs(self.entries) do - e.field = "foo"..e.field - end - return self.entries -end - -terra foo() - var a : A - a.fooa = 3 - a.foob = 4 - return a.fooa + a.foob -end - - -assert(foo() == 7) \ No newline at end of file diff --git a/samples/Terra/addlanguage1.t b/samples/Terra/addlanguage1.t deleted file mode 100755 index ad383d9e..00000000 --- a/samples/Terra/addlanguage1.t +++ /dev/null @@ -1,17 +0,0 @@ -do -import "lib/addlanguage" -local a = 4 -local b = add a,3,4+5,(function() terra one() return a end return one() end)() end -local inception = add add 3,4,a end,4 end -local test = require("test") - - -test.eq(b,20) -test.eq(inception,15) -end - -do -import "lib/addlanguage" -local c = add 4,5 end -assert(9 == c) -end \ No newline at end of file diff --git a/samples/Terra/aggregatearr.t b/samples/Terra/aggregatearr.t deleted file mode 100644 index b54f3dc3..00000000 --- a/samples/Terra/aggregatearr.t +++ /dev/null @@ -1,18 +0,0 @@ - - -a = terralib.new(int[4]) - -terra foo() - a[3] = 4 -end - -foo() -assert(4 == a[3]) - - -terra bar() - a = array(5,6,7,8) -end - -bar() -assert(a[3] == 8) diff --git a/samples/Terra/ainline.t b/samples/Terra/ainline.t deleted file mode 100644 index 4f6dcabe..00000000 --- a/samples/Terra/ainline.t +++ /dev/null @@ -1,24 +0,0 @@ - -C = terralib.includec("stdio.h") -terra foo() - C.printf("hello, world\n") - C.printf("hello, world\n") - C.printf("hello, world\n") - C.printf("hello, world\n") - C.printf("hello, world\n") - C.printf("hello, world\n") - C.printf("hello, world\n") - C.printf("hello, world\n") - C.printf("hello, world\n") - C.printf("hello, world\n") -end - -foo:getdefinitions()[1]:setinlined(true) - -terra bar() - foo() - return 4 -end - -bar:compile() -bar:disas() diff --git a/samples/Terra/alignment.t b/samples/Terra/alignment.t deleted file mode 100644 index 08b648f8..00000000 --- a/samples/Terra/alignment.t +++ /dev/null @@ -1,7 +0,0 @@ -local alignment = 16 -local aligned = terralib.aligned -terra foobar(a : &float) - terralib.attrstore(a,terralib.attrload(a+3,{ align = alignment }), { align = alignment }) -end - -foobar:disas() \ No newline at end of file diff --git a/samples/Terra/and.t b/samples/Terra/and.t deleted file mode 100644 index 87ea0284..00000000 --- a/samples/Terra/and.t +++ /dev/null @@ -1,9 +0,0 @@ -local test = require("test") - -terra foo(a : double, b : double, c : double) : bool - return a < b and b < c -end - -test.eq(foo(1,2,3),true) -test.eq(foo(1,2,1),false) -test.eq(foo(2,1,2),false) \ No newline at end of file diff --git a/samples/Terra/anon.t b/samples/Terra/anon.t deleted file mode 100644 index c5d3315f..00000000 --- a/samples/Terra/anon.t +++ /dev/null @@ -1,26 +0,0 @@ -local test = require("test") - -local Num = int - -local fib = -terra(a : Num) : Num - var i,c,p = 0,1,1 - while i < a do - c,p = c + p,c - i = i + 1 - end - return c -end - -function fib2(a) - local i,c,p = 0,1,1 - while i < a do - c,p = c + p,c - i = i + 1 - end - return c -end -for i = 0,10 do - print(fib(i)) - test.eq(fib(i),fib2(i)) -end \ No newline at end of file diff --git a/samples/Terra/anon3.t b/samples/Terra/anon3.t deleted file mode 100644 index 5d37c7c7..00000000 --- a/samples/Terra/anon3.t +++ /dev/null @@ -1,18 +0,0 @@ -C,T = terralib.includecstring [[ - struct D { - struct { int a; struct { int c; } c; } b; - } c; - typedef struct {int c;} B; - typedef struct { - struct { int a; } a; - struct { int b; } b; - B c; - } A; -]] - -terra foo(a : &C.A) - var c = a.a - var b = a.b.b - return c.a + b + a.c.c; -end -foo:compile() \ No newline at end of file diff --git a/samples/Terra/anonstruct.t b/samples/Terra/anonstruct.t deleted file mode 100644 index 5f661249..00000000 --- a/samples/Terra/anonstruct.t +++ /dev/null @@ -1,12 +0,0 @@ - -local C = tuple(int,tuple(int,int)) -terra anon() - var c : tuple(int,tuple(int,int)) = { 1, {2,3} } - var d : C = c - d._0 = 2 - return d._0 + c._1._0 + c._1._1 -end - -test = require("test") - -test.eq(anon(),7) \ No newline at end of file diff --git a/samples/Terra/anonstruct2.t b/samples/Terra/anonstruct2.t deleted file mode 100644 index 156e2a8b..00000000 --- a/samples/Terra/anonstruct2.t +++ /dev/null @@ -1,7 +0,0 @@ - -struct A { a : &A } - -terra foo() - var a : A -end -foo() \ No newline at end of file diff --git a/samples/Terra/antiquote1.t b/samples/Terra/antiquote1.t deleted file mode 100644 index 8bddcf3e..00000000 --- a/samples/Terra/antiquote1.t +++ /dev/null @@ -1,12 +0,0 @@ - - -function omgfunc() - return 2 -end - -terra foo() - return 1 + [{omgfunc()}] + [omgfunc()] -end - -local test = require("test") -test.eq(foo(),5) \ No newline at end of file diff --git a/samples/Terra/antiquote2.t b/samples/Terra/antiquote2.t deleted file mode 100644 index 7ad4f86d..00000000 --- a/samples/Terra/antiquote2.t +++ /dev/null @@ -1,13 +0,0 @@ - - -function omgfunc() - return 4 -end - -local what = `[ {2,3} ] -terra foo() - return [{3,`[ {2,3} ]}] -end - -local test = require("test") -test.meq({3,2,3},foo()) diff --git a/samples/Terra/antiquote3.t b/samples/Terra/antiquote3.t deleted file mode 100644 index 1d34ef7e..00000000 --- a/samples/Terra/antiquote3.t +++ /dev/null @@ -1,16 +0,0 @@ - - -function omgfunc() - return 2 -end - -a = global(0) - -terra foo() - [quote a = a + 1 end]; - [{quote a = a + 1 end,quote a = a + 1 end}] - return a -end - -local test = require("test") -test.eq(foo(),3) \ No newline at end of file diff --git a/samples/Terra/antiquote4.t b/samples/Terra/antiquote4.t deleted file mode 100644 index d6585edc..00000000 --- a/samples/Terra/antiquote4.t +++ /dev/null @@ -1,11 +0,0 @@ - - -terra foo() - var a = 4 - return [a] -end - -foo:printpretty() - -local test = require("test") -test.eq(foo(),4) \ No newline at end of file diff --git a/samples/Terra/antiquote5.t b/samples/Terra/antiquote5.t deleted file mode 100644 index 9ebbbed4..00000000 --- a/samples/Terra/antiquote5.t +++ /dev/null @@ -1,21 +0,0 @@ - - -function makeloop(N,body) - return quote - for i = 0, N do - body - end - end -end - - -terra stuff() - var a = 0; - [makeloop(10,quote - a = a + 1 - end)] - return a -end - - -print(stuff()) \ No newline at end of file diff --git a/samples/Terra/array.t b/samples/Terra/array.t deleted file mode 100644 index 28040709..00000000 --- a/samples/Terra/array.t +++ /dev/null @@ -1,60 +0,0 @@ - -terra bar() - var a : int[2] - a[0] = 1 - a[1] = 2 - return a -end - -terra foo() - var a : int[4] - a[1], a[2] = 4,2 - return a[1] + a[2] -end - -terra foo2() - var b = bar() - return b[0] + b[1] -end - -terra foo3() - return (bar())[0] -end - -terra foo4() - var a : int[4] - a[3] = 7 - var b = &a[0] - b[2] = 8 - return b[2] + b[3] -end - -terra bar2(a : &int) - a[1] = 100 - return a[0] -end - -terra foo5() - var a : int[4] - bar2(a) - return a[1] -end - -terra foo6() - return bar2(bar()) -end - - -terra foo7() - var a = array(1,2,3,4) - return a[1]+a[2] -end -local test = require("test") - -test.eq(6,foo()) -test.eq(3,foo2()) -test.eq(1,foo3()) -test.eq(15,foo4()) -test.eq(100,foo5()) -test.eq(1,foo6()) -test.eq(5,foo7()) \ No newline at end of file diff --git a/samples/Terra/arraylit.t b/samples/Terra/arraylit.t deleted file mode 100644 index 3731a367..00000000 --- a/samples/Terra/arraylit.t +++ /dev/null @@ -1,29 +0,0 @@ - -terra foo() - var a = array(1,2,3) - return a[0] + a[1] + a[2] -end - -terra foo2() - var a = array(1,2.5,3) - return a[1] -end -terra what() - return 3,4.5 -end -local expand = macro(function(a) return {`a._0,`a._1} end) -terra foo3() - var w = what() - var a = array(1,2.5,expand(w)) - return a[3] -end -terra foo4() - var a = array("what","magic","is","this") - return a[1][1] -end - -local test = require("test") -test.eq(foo(),6) -test.eq(foo2(),2.5) -test.eq(foo3(),4.5) -test.eq(foo4(),97) \ No newline at end of file diff --git a/samples/Terra/arrayt2.t b/samples/Terra/arrayt2.t deleted file mode 100644 index 8b6c9f2f..00000000 --- a/samples/Terra/arrayt2.t +++ /dev/null @@ -1,82 +0,0 @@ -local f = assert(io.popen("uname", 'r')) -local s = assert(f:read('*a')) -f:close() - -if s~="Darwin\n" then - print("Warning, not running test b/c this isn't a mac") - return -end - -C = terralib.includecstring [[ - #include - #include -]] -local arraytypes = {} -function Array(T) - if arraytypes[T] then return arraytypes[T] end - local struct ArrayImpl { - data : &T; - N : int; - } - arraytypes[T] = ArrayImpl - terra ArrayImpl:init(N : int) - self.data = [&T](C.malloc(N*sizeof(T))) - self.N = N - end - terra ArrayImpl:free() - C.free(self.data) - end - ArrayImpl.metamethods.__apply = macro(function(self,idx) - return `self.data[idx] - end) - ArrayImpl.metamethods.__methodmissing = macro(function(methodname,selfexp,...) - local args = terralib.newlist {...} - local params = args:map(function(a) return symbol(a:gettype()) end) - local terra elemfn(a : &T, [params]) - return a:[methodname](params) - end - local RT = elemfn:gettype().returntype - return quote - var self = selfexp - var r : Array(RT) - r:init(self.N) - for i = 0,r.N do - r.data[i] = elemfn(&self.data[i],args) - end - in - r - end - end) - return ArrayImpl -end - -local OC = require("lib/objc") -local IO = terralib.includec("stdio.h") - -struct Rect { - a : double, - b : double, - c : double, - d : double -} - -terra str(data : &uint8) - return OC.NSString:stringWithUTF8String(data) -end - -terra main() - OC.NSAutoreleasePool:new() - var app = OC.NSApplication:sharedApplication() - var rec = Rect {0,0,200,200} - var windows : Array(OC.ID) - windows:init(2) - windows(0) = OC.NSWindow - windows(1) = OC.NSWindow - windows = windows:alloc():initWithContentRect_styleMask_backing_defer(rec,1,2,false) - windows:makeKeyAndOrderFront(nil) - IO.printf("entering run loop\n") - app:run() -end - -terralib.linklibrary("/System/Library/Frameworks/Cocoa.framework/Cocoa") -main:compile() diff --git a/samples/Terra/arrptr.t b/samples/Terra/arrptr.t deleted file mode 100644 index 55b6a918..00000000 --- a/samples/Terra/arrptr.t +++ /dev/null @@ -1,5 +0,0 @@ -a = &int[4] -a = (&int)[4] -local test = require("test") -test.eq(false,a:ispointer()) -test.eq(true,a:isarray()) \ No newline at end of file diff --git a/samples/Terra/asm.t b/samples/Terra/asm.t deleted file mode 100644 index 803b6882..00000000 --- a/samples/Terra/asm.t +++ /dev/null @@ -1,28 +0,0 @@ -local a = ... -if not a then - --force MCJIT - os.execute("../terra -m asm.t true") - return -end - -C = terralib.includec("stdio.h") - -struct Vendor { - maxV : int; - b : int; - c : int; - d : int; -} - -terra foo() - var r = terralib.asm(Vendor,"cpuid","={eax},={ebx},={ecx},={edx},{eax},~{dirflag},~{fpsr},~{flags}",false,0) - r.c,r.d = r.d,r.c - C.printf("%.12s\n", &r.b) -end -foo() - - -terra addone(a : int) - return terralib.asm(int,"addl $$1,$1","=r,0",true,a) -end -assert(addone(3) == 4) \ No newline at end of file diff --git a/samples/Terra/atoi.t b/samples/Terra/atoi.t deleted file mode 100644 index 929f9672..00000000 --- a/samples/Terra/atoi.t +++ /dev/null @@ -1,7 +0,0 @@ -c = terralib.includec("stdlib.h") - -terra what() - return c.atoi("52") -end - -print(what()) diff --git a/samples/Terra/avxhadd.t b/samples/Terra/avxhadd.t deleted file mode 100644 index d1e762b7..00000000 --- a/samples/Terra/avxhadd.t +++ /dev/null @@ -1,32 +0,0 @@ -local haddavx = terralib.intrinsic("llvm.x86.avx.hadd.ps.256", { vector(float,8), vector(float,8) } -> vector(float,8)) - -terra hadd(v : vector(float,8)) - var v1 = haddavx(v,v) - var v2 = haddavx(v1,v1) - return v2[0] + v2[4] -end - -ffi = require("ffi") - -local stdio = terralib.includec("stdio.h") - -terra foobar(a : &float) - return hadd(@[&vector(float,8)](a)) -end - -dat = ffi.new("float[?] __attribute__((aligned(32)))",8) - -for i = 1,8 do - dat[i-1] = i -end - -if terralib.llvmversion == 31 then - print("ignoring...") -else - foobar:compile() - local test = require("test") - test.eq(foobar(dat),36) -end - ---terralib.saveobj("avxhadd",{main = foobar}) ---os.execute("./avxhadd") \ No newline at end of file diff --git a/samples/Terra/badname.t b/samples/Terra/badname.t deleted file mode 100644 index a2436c12..00000000 --- a/samples/Terra/badname.t +++ /dev/null @@ -1,4 +0,0 @@ ---tostring on a type should never error, so we assign it its original name if it does -struct A {} -A.metamethods.__typename = error -print(A) \ No newline at end of file diff --git a/samples/Terra/benchmark_fannkuchredux.t b/samples/Terra/benchmark_fannkuchredux.t deleted file mode 100644 index 2ec27e6e..00000000 --- a/samples/Terra/benchmark_fannkuchredux.t +++ /dev/null @@ -1,148 +0,0 @@ ---[[ - The Computer Language Benchmarks Game - http://shootout.alioth.debian.org/ - - contributed by Ledrug Katz - - ]] - - -local C = { - printf = terralib.externfunction("printf", terralib.types.funcpointer(rawstring,int,true)), - exit = terralib.externfunction("exit", int -> {}), - atoi = terralib.externfunction("atoi", rawstring -> int) -} - --- this depends highly on the platform. It might be faster to use --- char type on 32-bit systems; it might be faster to use unsigned. - -elem = int - -s = global(elem[16]) -t = global(elem[16]) - -maxflips = global(int) -max_n = global(int) -odd = global(bool) -checksum = global(int) - -terra flip() - var i = max_n - var x : &elem = t - var y : &elem = s - var c : elem - - while i > 0 do - i = i - 1 - @x = @y - x = x + 1 - y = y + 1 - end - - i = 1 - - repeat - x = t - y = t + t[0] - while x < y do - c = @x - @x = @y - x = x + 1 - @y = c - y = y - 1 - end - i = i + 1 - until t[t[0]] == 0 - --C.printf("flip %d\n",i); - return i -end - - -terra rotate(n : int) - var c = s[0] - for i = 0,n do - s[i] = s[i+1] - end - s[n] = c - --C.printf("rotate(%d) %d\n",n,c); -end - - -terra tk(n : int) - var i = 0 - var f : int - var c : elem[16] - - for i = 0,16 do - c[i] = 0 - end - - while i < n do - rotate(i) - if c[i] >= i then - c[i] = 0 - i = i + 1 - goto continue - end - - c[i] = c[i] + 1 - i = 1 - odd = not odd - if s[0] ~= 0 then - if s[s[0]] ~= 0 then - f = flip() - else - f = 1 - end - if f > maxflips then - maxflips = f - end - --C.printf("f = %d\n",f) - if odd then - checksum = checksum - f - else - checksum = checksum + f - end - end - ::continue:: - end - -end - - -terra doit(N : int) - maxflips = 0 - odd = false - checksum = 0 - max_n = N - if max_n < 3 or max_n > 15 then - C.printf("range: must be 3 <= n <= 12\n") - C.exit(1) - end - - for i = 0,max_n do - s[i] = i - end - tk(max_n) - C.printf("%d\nPfannkuchen(%d) = %d\n", checksum, max_n, maxflips) - return checksum -end - -terra main(argc : int, v : &&int8) - if argc < 2 then - C.printf("usage: %s number\n", v[0]) - C.exit(1); - end - - doit(C.atoi(v[1])) - return 0 -end - -local test = require("test") - -doit:compile() -print(test.time(function() - test.eq(doit(10),73196) -end)) - -terralib.saveobj("benchmark_fannkuchredux", { main = main } ) diff --git a/samples/Terra/bf.t b/samples/Terra/bf.t deleted file mode 100644 index 84b99b5a..00000000 --- a/samples/Terra/bf.t +++ /dev/null @@ -1,60 +0,0 @@ - -local C = terralib.includec("stdio.h") - -local function compile(code,N) - local function body(data,ptr) - local stmts = terralib.newlist() - local jumpstack = {} - for i = 1,#code do - local c = code:sub(i,i) - local stmt - if c == ">" then - stmt = quote ptr = ptr + 1 end - elseif c == "<" then - stmt = quote ptr = ptr - 1 end - elseif c == "+" then - stmt = quote data[ptr] = data[ptr] + 1 end - elseif c == "-" then - stmt = quote data[ptr] = data[ptr] - 1 end - elseif c == "." then - stmt = quote C.putchar(data[ptr]) end - elseif c == "," then - stmt = quote data[ptr] = C.getchar() end - elseif c == "[" then - local target = { before = symbol(), after = symbol() } - table.insert(jumpstack,target) - stmt = quote - ::[target.before]:: - if data[ptr] == 0 then - goto [target.after] - end - end - elseif c == "]" then - local target = table.remove(jumpstack) - assert(target) - stmt = quote - goto [target.before] - :: [target.after] :: - end - else - error("unknown character "..c) - end - stmts:insert(stmt) - end - return stmts - end - return terra() - var data : int[N] - for i = 0, N do - data[i] = 0 - end - var ptr = 0; - [ body(data,ptr) ] - end -end - -local helloworld = "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>." - -local fn = compile(helloworld,256) - -fn() \ No newline at end of file diff --git a/samples/Terra/blankexp.t b/samples/Terra/blankexp.t deleted file mode 100644 index e53242c1..00000000 --- a/samples/Terra/blankexp.t +++ /dev/null @@ -1,7 +0,0 @@ -local a = quote - while false do end -end -terra foo() - return a -end -foo() \ No newline at end of file diff --git a/samples/Terra/blockescape.t b/samples/Terra/blockescape.t deleted file mode 100644 index eb475932..00000000 --- a/samples/Terra/blockescape.t +++ /dev/null @@ -1,23 +0,0 @@ -terra foo() - var c = 3 - escape - local a = 1 - for i = 1,10 do - emit quote c = c + a end - end - end - return c -end - -assert(foo() == 13) - -terra foo2() - return escape emit(1) end -end - -assert(1 == foo2()) - -a = terralib.newlist() -a:insert quote - foo() -end \ No newline at end of file diff --git a/samples/Terra/blocking.t b/samples/Terra/blocking.t deleted file mode 100644 index 8ee19e3e..00000000 --- a/samples/Terra/blocking.t +++ /dev/null @@ -1,57 +0,0 @@ -function symmat(name,I,...) - if not I then return symbol(name) end - local r = {} - for i = 1,I do - r[i] = symmat(name..tostring(i),...) - end - return r -end - -terra min(a : int, b : int) - return terralib.select(a < b, a, b) -end - -function blockedloop(bounds,sizes,bodyfn) - local indexes = symmat("i",#sizes,#bounds) - --local makeloop --bug local function doesn't add to set of live variables... - local function makeloop(s,b) - if s > #sizes then - return bodyfn(unpack(indexes[#sizes])) - elseif b > #bounds then - return makeloop(s + 1, 1) - else - local topbound = bounds[b] - local blocksize = sizes[s] - local begin,bound - if s == 1 then - begin,bound = 0, topbound - else - begin,bound = indexes[s-1][b], sizes[s-1] - end - local step = sizes[s] - return quote - for [indexes[s][b]] = begin,min(begin+bound,topbound),step do - [ makeloop(s,b+1) ] - end - end - end - end - return makeloop(1,1) -end - -IO = terralib.includec("stdio.h") - -terra main() - - var M,N = 30,40; - - [blockedloop({M,N}, {10,1}, function(m,n) - return quote - IO.printf("%d %d\n",m,n) - end - end)] - -end - -main:printpretty() -main() \ No newline at end of file diff --git a/samples/Terra/blocking2-fixed.t b/samples/Terra/blocking2-fixed.t deleted file mode 100644 index 10ff5a6d..00000000 --- a/samples/Terra/blocking2-fixed.t +++ /dev/null @@ -1,68 +0,0 @@ -C = terralib.includec("stdio.h") - -terra min(a: int, b: int) : int - if a < b then return a - else return b end -end -std = terralib.includec("stdlib.h") -function Image(PixelType) - local struct ImageImpl { - data : &PixelType, - N : int - } - terra ImageImpl:init(N: int): {} --returns nothing - self.data = [&PixelType]( - std.malloc(N*N*sizeof(PixelType))) - self.N = N - end - terra ImageImpl:get(x: int, y: int) : PixelType - return self.data[x*self.N + y] - end - - - terra ImageImpl:set(x: int, y: int, v : PixelType) - self.data[x*self.N + y] = v - end - terra ImageImpl:save(i : rawstring) - for i = 0, 2 do for j = 0, 2 do - C.printf("%d %d %f\n", i,j,self:get(i,j)) - end end - end - terra ImageImpl:load(i : rawstring) self:init(16) - for i = 0, 4 do for j = 0, 4 do - self:set(i,j,(i*4+j)%3) - --C.printf("%f\n",self:get(i,j)) - end end - end - terra ImageImpl:free() end - - --omitted methods for: set, save, load, free - return ImageImpl -end -GreyscaleImage = Image(float) -terra laplace(img: &GreyscaleImage, - out: &GreyscaleImage) : {} - --shrink result, do not calculate boundaries - var newN = img.N - 2 - out:init(newN) - for i = 0,newN do - for j = 0,newN do - var v = img:get(i+0,j+1) + img:get(i+2,j+1) - + img:get(i+1,j+2) + img:get(i+1,j+0) - - 4 * img:get(i+1,j+1) - out:set(i,j,v) - end - end -end -terra runlaplace(input: rawstring, - output: rawstring) : {} - var i: GreyscaleImage, o : GreyscaleImage - i:load(input) - laplace(&i,&o) - o:save(output) - i:free(); o:free() -end - -runlaplace("myinput","myoutput") - terralib.saveobj("runlaplace.o", - {runlaplace = runlaplace}) diff --git a/samples/Terra/blocking2.t b/samples/Terra/blocking2.t deleted file mode 100644 index 2b0b3b71..00000000 --- a/samples/Terra/blocking2.t +++ /dev/null @@ -1,81 +0,0 @@ -terra min(a : int, b : int) - return terralib.select(a < b, a, b) -end -function blockedloop(N,blocksizes,bodyfn) - local function generatelevel(n,ii,jj,bb) - if n > #blocksizes then - return bodyfn(ii,jj) - end - local blocksize = blocksizes[n] - return quote - for i = ii,min(ii+bb,N),blocksize do - for j = jj,min(jj+bb,N),blocksize do - [ generatelevel(n+1,i,j,blocksize) ] - end - end - end - end - return generatelevel(1,0,0,N) -end - -IO = terralib.includec("stdio.h") -stdlib = terralib.includec("stdlib.h") - -terra main() - - var a : int[8][8] - var c = 0 - var N = 8 - [blockedloop(N, {4,2,1}, function(i,j) - return quote - --IO.printf("%d %d\n",i,j) - a[i][j] = c - c = c + 1 - end - end)] - for i = 0,N do - for j = 0,N do - IO.printf("%d\t",a[i][j]) - end - IO.printf("\n") - end -end - -main() - - - -function Image(Spectrum) - local struct ImageImpl { - data : &Spectrum, - N : int - } - terra ImageImpl:init(N : int) - self.data = [&float](stdlib.malloc(N*N*sizeof(Spectrum))) - self.N = N - end - ImageImpl.methods.pixel = macro(function(self,x,y) - return `self.data[x*self.N + y] - end) - return ImageImpl -end - -GreyScaleImage = Image(float) - -terra laplace(input : &GreyScaleImage, output : &GreyScaleImage) - var newN = input.N - 2 --shrink result since we do not calculate boundaries - output:init(newN); - [blockedloop(newN,{32,1},function(i,j) - return quote - output:pixel(i,j) = - input:pixel(i+0,j+1) - + input:pixel(i+2,j+1) - + input:pixel(i+1,j+2) - + input:pixel(i+1,j+0) - - 4 * input:pixel(i+1,j+1) - end - end)] -end - -laplace:compile() -laplace:printpretty() \ No newline at end of file diff --git a/samples/Terra/blocking3.t b/samples/Terra/blocking3.t deleted file mode 100644 index c7b99b98..00000000 --- a/samples/Terra/blocking3.t +++ /dev/null @@ -1,85 +0,0 @@ -C = terralib.includec("stdio.h") - -function blockedloop(N,blocksizes,bodyfn) - local function generatelevel(n,ii,jj,bb) - if n > #blocksizes then - return bodyfn(ii,jj) - end - local blocksize = blocksizes[n] - return quote - for i = ii,min(ii+bb,N),blocksize do - for j = jj,min(jj+bb,N),blocksize do - [ generatelevel(n+1,i,j,blocksize) ] - end - end - end - end - return generatelevel(1,0,0,N) -end - -terra min(a: int, b: int) : int - if a < b then return a - else return b end -end -std = terralib.includec("stdlib.h") -function Image(PixelType) - local struct ImageImpl { - data : &PixelType, - N : int - } - terra ImageImpl:init(N: int): {} --returns nothing - self.data = - [&PixelType](std.malloc(N*N*sizeof(PixelType))) - self.N = N - end - terra ImageImpl:get(x: int, y: int) : PixelType - return self.data[x*self.N + y] - end - - - terra ImageImpl:set(x: int, y: int, v : PixelType) - self.data[x*self.N + y] = v - end - terra ImageImpl:save(i : rawstring) - for i = 0, 8 do for j = 0, 8 do - C.printf("%d %d %f\n", i,j,self:get(i,j)) - end end - end - terra ImageImpl:load(i : rawstring) self:init(16) - for i = 0, 10 do for j = 0, 10 do - self:set(i,j,(i*4+j)%3) - --C.printf("%f\n",self:get(i,j)) - end end - end - terra ImageImpl:free() end - - --omitted methods for: set, save, load, free - return ImageImpl -end -GreyscaleImage = Image(float) -terra laplace(img: &GreyscaleImage, - out: &GreyscaleImage) : {} - --shrink result, do not calculate boundaries - var newN = img.N - 2 - out:init(newN); - [blockedloop(newN,{4,2,1}, function(i,j) - return quote - var v = img:get(i+0,j+1) + img:get(i+2,j+1) - + img:get(i+1,j+2) + img:get(i+1,j+0) - - 4 * img:get(i+1,j+1) - out:set(i,j,v) - end - end)] -end -terra runlaplace(input: rawstring, - output: rawstring) : {} - var i: GreyscaleImage, o : GreyscaleImage - i:load(input) - laplace(&i,&o) - o:save(output) - i:free(); o:free() -end - -runlaplace("myinput","myoutput") - terralib.saveobj("runlaplace.o", - {runlaplace = runlaplace}) diff --git a/samples/Terra/bounce.t b/samples/Terra/bounce.t deleted file mode 100644 index 85e7400c..00000000 --- a/samples/Terra/bounce.t +++ /dev/null @@ -1,23 +0,0 @@ -local io = terralib.includec("stdio.h") - -struct Count { value : int } -function luafn(a) - print("lua:",a.value) - a.value = a.value + 1 - terrafn(a) -end -terra terrafn(a : &Count) - io.printf("terra: %d\n",a.value) - if a.value < 100 then - luafn(a) - end - return a.value -end - -terra begin() - var c = Count {0} - return terrafn(&c) -end - -local test = require("test") -test.eq(begin(),100) \ No newline at end of file diff --git a/samples/Terra/bug.t b/samples/Terra/bug.t deleted file mode 100644 index 5d2f860d..00000000 --- a/samples/Terra/bug.t +++ /dev/null @@ -1,20 +0,0 @@ -local f = assert(io.popen("uname", 'r')) -local s = assert(f:read('*a')) -f:close() - -if s~="Darwin\n" then - print("Warning, not running test b/c this isn't a mac") -else - - -local OC = require("lib/objc") -local OCR = terralib.includec("objc/runtime.h") - -terra main() - var nsobject = OC.NSObject - OCR.objc_allocateClassPair([&OCR.objc_class](nsobject.data),nil,0) -end - -main:compile() - -end \ No newline at end of file diff --git a/samples/Terra/bug2.t b/samples/Terra/bug2.t deleted file mode 100644 index 91b77cbd..00000000 --- a/samples/Terra/bug2.t +++ /dev/null @@ -1,20 +0,0 @@ -ffi = require("ffi") -cstdio = terralib.includec("stdio.h") - -local vec4 = &vector(float,4) - -local align = terralib.aligned -terra lol( w : &float, out : &float) - var a = terralib.attrload(vec4(w),{align = 4}) - terralib.attrstore(vec4(out), a, {align = 4}) -end - -dat = ffi.new("float[?]",32) -for i=0,31 do dat[i]=i end -datO = ffi.new("float[?]",32) - -lol:compile() -lol:disas() - -lol(dat, datO) - diff --git a/samples/Terra/bug3.t b/samples/Terra/bug3.t deleted file mode 100644 index e58be1df..00000000 --- a/samples/Terra/bug3.t +++ /dev/null @@ -1,15 +0,0 @@ - - -local S = terralib.types.newstruct("mystruct") - -struct A { - v : int -} - -S.entries:insert( { type = A, field = "what" } ) -terra foo() - var v : S - return v.what.v -end - -foo:compile() diff --git a/samples/Terra/bug4.t b/samples/Terra/bug4.t deleted file mode 100644 index 2690b028..00000000 --- a/samples/Terra/bug4.t +++ /dev/null @@ -1,14 +0,0 @@ -c = terralib.includecstring [[ - #include - #include -]] -struct exception { slug : int8[60]; code : int; msg : int8[960]; } -EXC_INFO = terralib.new(exception) -terra bar() c.memcpy(EXC_INFO.slug + 0, 'foobar', 7); c.printf('%s\n', EXC_INFO.slug + 0); end -bar() - -terra zoo() EXC_INFO.slug[0] = 65; EXC_INFO.slug[1] = 0; c.printf('%s\n', EXC_INFO.slug + 0); end -zoo() - -terra zoo2() EXC_INFO.slug[0] = 65; EXC_INFO.slug[1] = 0; return EXC_INFO.slug[0] end -assert(zoo2() == 65) \ No newline at end of file diff --git a/samples/Terra/calc.t b/samples/Terra/calc.t deleted file mode 100644 index 2167f2b8..00000000 --- a/samples/Terra/calc.t +++ /dev/null @@ -1,33 +0,0 @@ -function makecalcfn(inst) - local stk = {} - for i,v in ipairs(inst) do - if type(v) == "number" then - table.insert(stk,`v) - else - local b = table.remove(stk) - local a = table.remove(stk) - - if v == "+" then - table.insert(stk,`a + b) - elseif v == "-" then - table.insert(stk,`a - b) - elseif v == "*" then - table.insert(stk,`a * b) - elseif v == "/" then - table.insert(stk,`a / b) - end - end - end - - local result = table.remove(stk) - - local terra wrapper() - return result - end - - return wrapper -end - -local calcfn = makecalcfn({5,4,"*",5,"-",3,"+"}) -local test = require("test") -test.eq(calcfn(),18) diff --git a/samples/Terra/call.t b/samples/Terra/call.t deleted file mode 100644 index 4bf49c62..00000000 --- a/samples/Terra/call.t +++ /dev/null @@ -1,53 +0,0 @@ - -terra bar(a : int, b : int) : int - return a + b -end -terra foo(a : int,b : int) : int - return bar(a,b) + 1 -end - -terra baz(a : int, b : int) : int - var f,c,d = 4,baz2(a,b) - return f + c + d -end and -terra baz2(a : int, b : int) : {int, int} - return a + 1, b + 2 -end - -terra two(a : int, b : int) : int - return a + b -end -terra baz3() : int - var a,b = baz2(1,2) - return two(a,b) -end -terra baz4() : int - return two(5,(baz2(1,2))._0) -end - -terra baz5() - var a,b = baz2(0,0) - return 1,2,a,b -end - -terra baz6() - var a,b,c,d = baz5() - var e = (baz5()._0) - return a + b + c + d + e -end - -terra baz7(a : int) - if a < 3 then - return 1,(baz5())._0 - else - return 100,2 - end -end -local test = require("test") - -test.eq(foo(2,3),6) -test.eq(baz(1,2),10) -test.eq(baz3(),6) -test.eq(baz4(),7) -test.eq(baz6(),7) -test.meq({100,2},baz7(10)) \ No newline at end of file diff --git a/samples/Terra/callbackcache.t b/samples/Terra/callbackcache.t deleted file mode 100644 index 06450cf3..00000000 --- a/samples/Terra/callbackcache.t +++ /dev/null @@ -1,9 +0,0 @@ - - -for i = 1,10 do - local terra doprint() - print(1,2) - print(3) - end - doprint() -end \ No newline at end of file diff --git a/samples/Terra/canon.t b/samples/Terra/canon.t deleted file mode 100644 index c07ffaae..00000000 --- a/samples/Terra/canon.t +++ /dev/null @@ -1,45 +0,0 @@ - -struct B { - a : A -} and -struct A { - b : &B -} - - - - -struct C { - i : int -} -local U = struct { c : C } -local UP = &U - - -local FP = UP -> int -local FP2 = UP -> int - -local FI = int -> int -local FI2 = int -> int -terra anon() - var b : B - b.a.b = &b - return 4 -end - -terra anon2() - var u = U { C {3} } - - var fp : FP, fi : FI - var fi2 : FI2 = fi - var fp2 : FP2 = fp - var up : UP = &u - return up.c.i -end - - - -test = require("test") - -test.eq(anon(),4) -test.eq(anon2(),3) \ No newline at end of file diff --git a/samples/Terra/canon2.t b/samples/Terra/canon2.t deleted file mode 100644 index a73b8577..00000000 --- a/samples/Terra/canon2.t +++ /dev/null @@ -1,41 +0,0 @@ -local C = terralib.includecstring [[ - typedef union { - float v[2]; - struct { - float x; - float y; - }; - } float2; - static float2 a; - void doit() { - a.x = 4; - a.y = 5; - } - float2* what() { return &a; } -]] - -C.float2:printpretty() - -local anonstructgetter = macro(function(name,self) - for i,e in pairs(self:gettype():getfields()) do - if e.key:match("_%d+") and e.type:getfield(name) then - return `self.[e.key].[name] - end - end - error("no field "..name.." in struct of type "..tostring(T)) -end) - -C.float2.metamethods.__entrymissing = anonstructgetter - -terra foo(pa : &C.float2) - var a = @C.what() - return a.v[0],a.v[1],a.x,a.y -end - -C.doit() - -local a = foo(C.what()) -assert(4 == a._0) -assert(5 == a._1) -assert(4 == a._2) -assert(5 == a._3) \ No newline at end of file diff --git a/samples/Terra/cast.t b/samples/Terra/cast.t deleted file mode 100644 index 6de7f79d..00000000 --- a/samples/Terra/cast.t +++ /dev/null @@ -1,11 +0,0 @@ -terra bar(a : int) : int - return a + 1 -end -terra foo(a : int) : int - - return a -end - -local test = require("test") -test.eq(foo(2),2) -test.eq(bar(2),3) diff --git a/samples/Terra/cbool.t b/samples/Terra/cbool.t deleted file mode 100644 index cfa7cd4a..00000000 --- a/samples/Terra/cbool.t +++ /dev/null @@ -1,13 +0,0 @@ - - -C = terralib.includecstring [[ - _Bool And(_Bool a, _Bool b) { return a && b; } -]] - - -terra foobar(a : bool, b : bool) - return C.And(a,b) -end - -assert(foobar(false,true) == false) -assert(foobar(true,true) == true) \ No newline at end of file diff --git a/samples/Terra/cconv.t b/samples/Terra/cconv.t deleted file mode 100644 index ba12b5e9..00000000 --- a/samples/Terra/cconv.t +++ /dev/null @@ -1,488 +0,0 @@ - -local test = require("test") - -terra f1(a : int) - return a -end - -terra c1() - return 1 + f1(4),f1(4) -end - -terra f2(a : int, b : float) - return a + b -end - -terra c2() - return f2(3,4) + 1, f2(3,4) -end - - -terra f3() - return 3,4 -end - -terra c3() - var r = f3() - return f3()._0 + 1,unpackstruct(r) -end - -terra f4() : {float,float} - return 3.25,4.25 -end - -terra c4() - var r = f4() - return f4()._0 + 1, unpackstruct(r) -end - - -terra f5(a : int) : {uint8,uint8,uint8,uint8} - return 0,1,a,3 -end - -terra c5() - var r = f5(8) - return f5(8)._0 + 1, unpackstruct(r) -end - -terra f6() : {double, double, int} - return 3.25, 4.25, 3 -end - -terra c6() - var r = f6() - return f6()._0 + 1, unpackstruct(r) -end -test.meq({4.25, 3.25,4.25,3},c6()) - -terra f7(a : int) : {double, double, int} - return 3.25, 4.25, a -end - -terra c7() - var r = f7(4) - return f7(4)._0 + 1, unpackstruct(r) -end -test.meq({4.25,3.25,4.25,4},c7()) - -terra f8() : {double, double} - return 3.25, 4.25 -end - -terra c8() - var r= f8() - return f8()._0 + 1, unpackstruct(r) -end - -test.meq({4.25,3.25,4.25},c8()) - -struct S1 { - a : int; - b : int; -} - -terra f9(a : S1) - return a.a+1,a.b+2 -end - -terra c9() - var a = S1 { 4, 5} - var r = f9(a) - return f9(a)._0 + 1, unpackstruct(r) -end -test.meq({6,5,7},c9()) - -struct S2 { - a : int; - b : double; - c : double; -} - -terra f10(a : S2) - return a.a, a.b, a.c -end - -terra c10() - var s2 = S2 { 4,5,6 } - var r = f10(s2) - return f10(s2)._0 + 1, unpackstruct(r) -end - -test.meq({5,4,5,6},c10()) - -C = terralib.includec("stdio.h") - -terra f11(a : int) - C.printf("f11 %d\n",a) -end - - -terra c11() - f11(7) -end -c11() - -struct S3 { - a : vector(float,2); - b : double; -} - -struct S4 { - b : double; - a : vector(float,2); -} - -struct S5 { - a : vector(uint8,4); - b : int; -} - -terra f12a(a : S3) - return a.a[0] + a.a[1], a.b -end - -terra c12a() - var a = S3 { vector(2.25f, 3.25f), 4 } - var r = f12a(a) - return f12a(a)._0 + 1, unpackstruct(r) -end -test.meq({6.5,5.5,4},c12a()) - -terra f12b(a : S4) - return a.a[0] + a.a[1], a.b -end - -terra c12b() - var a = S4 { 4, vector(2.25f, 3.25f) } - var r = f12b(a) - return f12b(a)._0 + 1, unpackstruct(r) -end -test.meq({6.5,5.5,4},c12b()) - - -terra f12() - var a = S3 { vector(8.f,2.f), 3.0 } - var b = S4 { 3.0, vector(8.f,2.f) } - var c,d = f12a(a) - var e,f = f12b(b) - return c,d,e,f -end - -terra f13a(a : S5) - return a.a[0] + a.a[1] + a.a[2] + a.a[3], a.b -end - -terra f13() - var a = S5 { vectorof(int8, 1,2,3,4), 5 } - return f13a(a) -end - - -struct S6 { - a : float; - aa : float; - b : float -} - -struct S7a { - a : int; - b : int; -} -struct S7 { - a : int; - b : S7a; - c : int; -} - -terra f14(a : S6) - return a.a,a.aa,a.b -end - -terra c14() - var a = S6 { 4,2,3} - var r = f14(a) - return f14(a)._0 + 1, unpackstruct(r) -end -test.meq({5,4,2,3},c14()) - -terra f15(a : S7) - return a.a, a.b.a, a.b.b, a.c -end - -terra c15() - var a = S7 {1, S7a { 2,3 }, 4} - var r = f15(a) - return f15(a)._0 + 1, unpackstruct(r) -end - -test.meq({2,1,2,3,4}, c15()) - -struct S8 { - a : uint8[7]; -} - -terra f16(a : S8) - return a.a[0],a.a[6] -end - -terra c16() - var a = S8 { arrayof(uint8, 1,2,3,4,5,6,7) } - var r = f16(a) - return f16(a)._0 + 1, unpackstruct(r) -end - -test.meq({2,1,7},c16()) - -struct S9 { - a : uint8[9]; -} - -terra f17(a : S9) - return a.a[0],a.a[8] -end - -terra c17() - var a = S9 { arrayof(uint8, 1,2,3,4,5,6,7,8,9) } - var r = f17(a) - return f17(a)._0 + 1, unpackstruct(r) -end - - -test.meq({2,1,9},c17()) - - -struct S10 { - a : double; - b : int64 -} - - -terra f18a(a0 : int, a1 : int, a2 : int, a3 : int, a4: int, a5 : int, a : S10) - return a.a, a.b -end - -terra c18a() - var r = f18a(1,2,3,4,5,6,S10{7,8}) - return f18a(1,2,3,4,5,6,S10{7,8})._0 + 1, unpackstruct(r) -end - -test.meq({8,7,8},c18a()) - - -terra f18b(a0 : int, a1 : int, a2 : int, a3 : int, a4: int, a : S10) - return a.a, a.b -end - -terra c18b() - var r = f18b(1,2,3,4,5,S10{7,8}) - return f18b(1,2,3,4,5,S10{7,8})._0 + 1, unpackstruct(r) -end - -test.meq({8,7,8},c18b()) - -terra f18c(a0 : int, a1 : int, a2 : int, a3 : int, a4: int, a : S10) - return a.a, a.b, a0, a1, a2 -end -terra c18c() - var r = f18c(1,2,3,4,5,S10 {7,8}) - return f18c(1,2,3,4,5,S10{7,8})._0 + 1, unpackstruct(r) -end - -test.meq({8,7,8,1,2,3},c18c()) - -struct S11 { - a : float; - b : int; -} - -terra f18d(a0 : int, a1 : int, a2 : int, a3 : int, a4: int, a5 : int, a : S11) - return a.a, a.b -end -terra c18d() - var r = f18d(1,2,3,4,5,6,S11{7,8}) - return f18d(1,2,3,4,5,6,S11{7,8})._0 + 1, unpackstruct(r) -end -test.meq({8,7,8},c18d()) - - -terra f18e(a0 : int, a1 : int, a2 : int, a3 : int, a4: int, a : S11) - return a.a, a.b -end - -terra c18e() - var r = f18e(1,2,3,4,5,S11{7,8}) - return f18e(1,2,3,4,5,S11{7,8})._0 + 1, unpackstruct(r) -end - -test.meq({8,7,8},c18e()) - -terra f18f(a0 : int, a1 : int, a2 : int, a3 : int, a4: int, a : S11) - return a.a, a.b, a0, a1, a2 -end - -terra c18f() - var r = f18f(1,2,3,4,5,S11{7,8}) - return f18f(1,2,3,4,5,S11{7,8})._0 + 1, unpackstruct(r) -end - -test.meq({8,7,8,1,2,3},c18f()) - - -terra f18g(a0 : float, a1 : float, a2 : float, a3 : float, a4: float, a5 : float, a6 : float, a7 : float, a : S10) - return a.a, a.b -end - -terra c18g() - var r = f18g(1,2,3,4,5,6,9,10,S10{7,8}) - return f18g(1,2,3,4,5,6,9,10,S10{7,8})._0 + 1, unpackstruct(r) -end - -test.meq({8,7,8},c18g()) - -terra f18h(a0 : float, a1 : float, a2 : float, a3 : float, a4: float, a5 : float, a6 : float, a : S10) - return a.a, a.b -end - -terra c18h() - var r = f18h(1,2,3,4,5,6,9,S10{7,8}) - return f18h(1,2,3,4,5,6,9,S10{7,8})._0 + 1, unpackstruct(r) -end - -test.meq({8,7,8},c18h()) - -terra f18i(a0 : float, a1 : float, a2 : float, a3 : float, a4: float, a5 : float, a6 : float, a : S10) - return a.a, a.b, a0, a1, a2 -end - -terra c18i() - var r = f18i(1,2,3,4,5,6,9,S10{7,8}) - return f18i(1,2,3,4,5,6,9,S10{7,8})._0 + 1, unpackstruct(r) -end - -test.meq({8,7,8,1,2,3},c18i()) - -struct S12 { - a : float; - b : int; -} - -terra f19(a : S12) - return a.a, a.b -end -terra c19() - var a = S12 { 3,5 } - var r = f19(a) - return f19(a)._0 + 1, unpackstruct(r) -end -test.meq({4,3,5},c19()) - - - -terra f20(a : S10, b : int) - return a.a,a.b,b -end -terra c20() - var r = f20(S10{1,2},3) - return f20(S10{1,2},3)._0 + 1, unpackstruct(r) -end -test.meq({2,1,2,3},c20()) - - -terra f21() - return -end -f21() - -terra f22() - return S12 { 3, 4} -end -terra c22() - return f22().a, f22() -end -local s22_0, s22_1 = terralib.unpackstruct(c22()) -test.eq(s22_0,3) -test.eq(s22_1.a,3) -test.eq(s22_1.b,4) - -terra f23() - return S10 { 1, 2} -end - -terra c23() - return f23().a, f23() -end -local s23_0, s23_1 = terralib.unpackstruct(c23()) -test.eq(s23_0,1) -test.eq(s23_1.a,1) -test.eq(s23_1.b,2) - -terra f24() - return S2 { 1,2,3} -end - -terra c24() - return f24().a, f24() -end -local s24_0, s24_1 = terralib.unpackstruct(c24()) -test.eq(s24_0,1) -test.eq(s24_1.a,1) -test.eq(s24_1.b,2) -test.eq(s24_1.c,3) - - -local s22 = f22() -test.eq(s22.a,3) -test.eq(s22.b,4) - -local s23 = f23() -test.eq(s23.a,1) -test.eq(s23.b,2) - - -local s24 = f24() - -test.eq(s24.a,1) -test.eq(s24.b,2) -test.eq(s24.c,3) - - -test.meq({1,2,3},f20({1,2},3)) - - -test.eq(f1(3),3) -test.eq(f2(4,5),9) -test.meq({3,4},f3()) -test.meq({3.25,4.25},f4()) -test.meq({0,1,2,3},f5(2)) -test.meq({3.25,4.25,3},f6()) -test.meq({3.25,4.25,4},f7(4)) -test.meq({3.25,4.25},f8()) -test.meq({3,5},f9({2,3})) -test.meq({1,2.5,3.5},f10({1,2.5,3.5})) -f11(3) -test.meq({10,3,10,3},f12()) -test.meq({10,5},f13()) -test.meq({4,5,6},f14({4,5,6})) -test.meq({1,2,3,4},f15({1,{2,3},4})) -test.meq({1,7},f16({{1,2,3,4,5,6,7}})) -test.meq({1,9},f17({{1,2,3,4,5,6,7,8,9}})) -test.meq({7,8},f18a(1,2,3,4,5,6,{7,8})) -test.meq({7,8},f18b(1,2,3,4,5,{7,8})) -test.meq({7,8,1,2,3},f18c(1,2,3,4,5,{7,8})) - -test.meq({7,8},f18d(1,2,3,4,5,6,{7,8})) -test.meq({7,8},f18e(1,2,3,4,5,{7,8})) -test.meq({7,8,1,2,3},f18f(1,2,3,4,5,{7,8})) - -test.meq({9,10},f18g(1,2,3,4,5,6,7,8,{9,10})) -test.meq({9,10},f18h(1,2,3,4,5,6,7,{9,10})) -test.meq({9,10,1,2,3},f18i(1,2,3,4,5,6,7,{9,10})) - -test.meq({4,5}, f19({4,5})) - -test.meq({5,4},c1()) -test.meq({8,7},c2()) -test.meq({4,3,4},c3()) -test.meq({4.25,3.25,4.25},c4()) -test.meq({1,0,1,8,3},c5()) \ No newline at end of file diff --git a/samples/Terra/cfgbug.t b/samples/Terra/cfgbug.t deleted file mode 100644 index b1f9b31c..00000000 --- a/samples/Terra/cfgbug.t +++ /dev/null @@ -1,14 +0,0 @@ -local struct Type { - field: int -} - -local terra foo(obj: Type) end -foo:setinlined(false) - -local terra bar() - var obj: Type - defer foo(obj) - return -end - -bar() \ No newline at end of file diff --git a/samples/Terra/clanginfo.t b/samples/Terra/clanginfo.t deleted file mode 100644 index b1d27a70..00000000 --- a/samples/Terra/clanginfo.t +++ /dev/null @@ -1 +0,0 @@ -terralib.includec("stdio.h",{"-v"}) diff --git a/samples/Terra/class.t b/samples/Terra/class.t deleted file mode 100644 index e02546d9..00000000 --- a/samples/Terra/class.t +++ /dev/null @@ -1,235 +0,0 @@ - -IO = terralib.includec("stdio.h") -local Class = require("lib/javalike") - -struct A { - a : int -} -terra A:times2() : int - return self.a*2 -end - -struct B { - b : int -} -Class.extends(B,A) - -terra B:combine(a : int) : int - return self.b + self.a + a -end - - -struct C { - c : double -} -Class.extends(C,B) - -terra C:combine(a : int) : int - return self.c + self.a + self.b + a -end -terra C:times2() : double - return self.a * 4 -end - -terra doubleAnA(a : &A) - return a:times2() -end - -terra combineAB(b : &B) - return b:combine(3) -end - -terra returnA(a : A) - return a -end -terra foobar1() - var c = C.alloc() - c.a,c.b,c.c = 1,2,3.5 - return c:times2() -end - -assert(foobar1() == 4) - -terra foobar() - - var a = A.alloc() - a.a = 1 - var b = B.alloc() - b.a,b.b = 1,2 - - var c = C.alloc() - c.a,c.b,c.c = 1,2,3.5 - - var r = doubleAnA(a) + doubleAnA(b) + doubleAnA(c) + combineAB(b) + combineAB(c) - - a:free() - b:free() - c:free() - - return r -end - -assert(23 == foobar()) - -Doubles = Class.interface { times2 = {} -> int } - -Adds = Class.interface { add = int -> int } - -struct D { - data : int -} -Class.implements(D,Doubles) -Class.implements(D,Adds) - - -terra D:times2() : int - return self.data * 2 -end - -terra D:add(a : int) : int - return self.data + a -end - - -terra aDoubles(a : &Doubles) - return a:times2() -end - -terra aAdds(a : &Adds) - return a:add(3) -end - -terra foobar2() - var a : D - a:init() - a.data = 3 - return aDoubles(&a) + aAdds(&a) -end - -assert(12 == foobar2()) - - -local IO = terralib.includec("stdio.h") -struct Animal { - data : int -} -terra Animal:speak() : {} - IO.printf("... %d\n",self.data) -end - -struct Dog { -} -Class.extends(Dog,Animal) -terra Dog:speak() : {} - IO.printf("woof! %d\n",self.data) -end - -struct Cat { -} - -Class.extends(Cat,Animal) - -terra Cat:speak() : {} - IO.printf("meow! %d\n",self.data) -end - -terra dospeak(a : &Animal) - a:speak() -end - -terra barnyard() - var c : Cat - var d : Dog - c:init() - d:init() - c.data,d.data = 0,1 - - dospeak(&c) - dospeak(&d) -end -barnyard() - - -local Add = Class.interface { add = int -> int } - -local Sub = Class.interface { sub = int -> int } - -local struct P { - data : int -} -Class.implements(P,Add) - -local struct C { - data2 : int -} -Class.extends(C,P) -Class.implements(C,Sub) - -terra P:add(b : int) : int - self.data = self.data + b - return self.data -end - -terra C:sub(b : int) : int - return self.data2 - b -end - -terra doadd(a : &Add) - return a:add(1) -end - -terra dopstuff(p : &P) - return p:add(2) + doadd(p) -end - -terra dosubstuff(s : &Sub) - return s:sub(1) -end - -terra dotests() - var p : P - p:init() - var c : C - c:init() - p.data = 1 - c.data = 1 - c.data2 = 2 - return dopstuff(&p) + dopstuff(&c) + dosubstuff(&c) -end - -assert(dotests() == 15) - -terra timeadd(a :&P, N : int) - IO.printf("%p\n",a) - for i = 0, N,10 do - a:add(1) - a:add(1) - a:add(1) - a:add(1) - a:add(1) - a:add(1) - a:add(1) - a:add(1) - a:add(1) - a:add(1) - end - return a -end - -local a = global(C) - -terra doinit() : &P - a:init() - a.data = 0 - return &a -end - -local v = doinit() -timeadd:compile() - -local b = terralib.currenttimeinseconds() ---timeadd(v,100000000) -local e = terralib.currenttimeinseconds() -print(e - b) -print(v.data) - diff --git a/samples/Terra/class2.t b/samples/Terra/class2.t deleted file mode 100644 index 1af0da25..00000000 --- a/samples/Terra/class2.t +++ /dev/null @@ -1,45 +0,0 @@ -local Interface = require("lib/golike") - -local I = Interface.create { - get = {} -> int; - set = int -> {}; -} - -struct A { - data : int -} - -terra A:get() - return self.data -end - -terra A:set(a : int) - self.data = a -end - -struct B { - data : int -} - -terra B:get() - return self.data + 1 -end - -terra B:set(a : int) - self.data = self.data + a -end - - -terra anInterface(a : I) - a:set(3) - return a:get() -end - -terra foo() - var a = A { 0 } - var b = B { 2 } - return anInterface(&a) + anInterface(&b) -end - -local test = require("test") -test.eq(foo(),9) \ No newline at end of file diff --git a/samples/Terra/class3.t b/samples/Terra/class3.t deleted file mode 100644 index 8ecc6963..00000000 --- a/samples/Terra/class3.t +++ /dev/null @@ -1,36 +0,0 @@ - -C = terralib.includec("stdio.h") - -local Class = require("lib/javalike") - - -local Prints = Class.interface { print = {} -> {} } - -struct Leaf { - data : int -} -Class.implements(Leaf,Prints) - -terra Leaf:print() : {} - C.printf("%d\n",self.data) -end - - -struct Node { - next : &Leaf -} -Class.extends(Node,Leaf) - -terra Node:print() : {} - C.printf("%d\n",self.data) - self.next:print() -end - -terra test() - var a,b = Leaf.alloc(), Node.alloc() - a.data,b.data,b.next = 1,2,a - var p : &Prints = b - p:print() -end - -test() \ No newline at end of file diff --git a/samples/Terra/class4.t b/samples/Terra/class4.t deleted file mode 100644 index f369adba..00000000 --- a/samples/Terra/class4.t +++ /dev/null @@ -1,22 +0,0 @@ -J = require("lib/javalike") - -struct Shape { - foo : int -} - -Drawable = J.interface { draw = {} -> {} } - -struct Square { - length : int -} -J.extends(Square,Shape) -J.implements(Square,Drawable) - -terra Square:draw() : {} end - -terra bar() - var a : &Square = Square.alloc() - a:draw() -end - -bar() \ No newline at end of file diff --git a/samples/Terra/class5.t b/samples/Terra/class5.t deleted file mode 100644 index ab021c59..00000000 --- a/samples/Terra/class5.t +++ /dev/null @@ -1,54 +0,0 @@ - -IO = terralib.includec("stdio.h") -local Class = require("lib/javalike") - -struct A { - a : int; - bb : &B -} and struct B { - b : int; - aa : &A -} -Class.extends(B,A) - - -terra A:times2() : int - return self.a*2 -end - -terra B:combine(a : int) : int - return self.b + self.a + a -end - - -struct C { - c : double -} -Class.extends(C,B) - -terra C:combine(a : int) : int - return self.c + self.a + self.b + a -end -terra C:times2() : double - return self.a * 4 -end - -terra doubleAnA(a : &A) - return a:times2() -end - -terra combineAB(b : &B) - return b:combine(3) -end - -terra returnA(a : A) - return a -end -terra foobar1() - var c = C.alloc() - c.a,c.b,c.c = 1,2,3.5 - return c:times2() -end - -assert(foobar1() == 4) - diff --git a/samples/Terra/class6.t b/samples/Terra/class6.t deleted file mode 100644 index 008610db..00000000 --- a/samples/Terra/class6.t +++ /dev/null @@ -1,66 +0,0 @@ - -IO = terralib.includec("stdio.h") -local Class = require("lib/javalikesimple") - -struct A { - a : int -} -terra A:times2() : int - return self.a*2 -end - -struct B { - b : int -} -Class.extends(B,A) - -terra B:combine(a : int) : int - return self.b + self.a + a -end - -struct C { - c : double -} -Class.extends(C,B) - -terra C:combine(a : int) : int - return self.c + self.a + self.b + a -end -terra C:times2() : double - return self.a * 4 -end - -terra doubleAnA(a : &A) - return a:times2() -end - -terra combineAB(b : &B) - return b:combine(3) -end - -terra foobar1() - var c : C - c:init() - c.a,c.b,c.c = 1,2,3.5 - return c:times2() -end - -assert(foobar1() == 4) - -terra foobar() - - var a : A, b : B, c : C - a:init(); b:init(); c:init() - - a.a = 1 - b.a,b.b = 1,2 - c.a,c.b,c.c = 1,2,3.5 - - var r = b:times2() + doubleAnA(&a) + doubleAnA(&b) + doubleAnA(&c) + combineAB(&b) + combineAB(&c) - - return r -end - - -assert(25 == foobar()) - diff --git a/samples/Terra/classifyfloatstructs.t b/samples/Terra/classifyfloatstructs.t deleted file mode 100644 index e9c4d66b..00000000 --- a/samples/Terra/classifyfloatstructs.t +++ /dev/null @@ -1,137 +0,0 @@ --- reading and returning by reference produces far more compact assembly --- in terra than reading and returning by value, even when a by-value function --- is embedded in a by-reference wrapper. Also, optimization behavior varies --- wildly. Here's a demonstration: - -local float4 = tuple(float,float,float,float) - --- first, comparing assembly code size of stand-alone functions which all do --- the same operation, in different styles. This is after aggressive --- optimization by the LLVM backend --------------------------------------------------------------------------------- - --- read by value, return by value --- 26 instructions, 120 bytes -local terra add4_val_val(a : float4, b : float4) : float4 - return { - a._0+b._0, - a._1+b._1, - a._2+b._2, - a._3+b._3 - } -end - --- read by value, return by reference --- 24 instructions, 103 bytes -local terra add4_val_ref(c : &float4, a : float4, b: float4) : {} - c._0 = a._0 + b._0 - c._1 = a._1 + b._1 - c._2 = a._2 + b._2 - c._3 = a._3 + b._3 -end - --- read by reference, return by value --- 14 instructions, 74 bytes -local terra add4_ref_val(a : &float4, b : &float4) : float4 - return { - a._0+b._0, - a._1+b._1, - a._2+b._2, - a._3+b._3 - } -end - --- read by reference, return by reference --- 12 instructions, 57 bytes -local terra add4_ref_ref(c : &float4, a : &float4, b: &float4) : {} - c._0 = a._0 + b._0 - c._1 = a._1 + b._1 - c._2 = a._2 + b._2 - c._3 = a._3 + b._3 -end - --- read by reference, return by reference, BUT use temporary variables --- 4 instructions, 12 bytes (!!!) --- what happens here is that the tempvars are understood and treated --- as a single SIMD register, and so only one addition is executed. --- this is already reflected in the bytecode passed to LLVM, so I suppose --- terra does this optimization. -local terra add4_ref_ref_tempvar(c : &float4, a : &float4, b: &float4) : {} - var x = a._0 + b._0 - var y = a._1 + b._1 - var z = a._2 + b._2 - var w = a._3 + b._3 - c._0 = x - c._1 = y - c._2 = z - c._3 = w -end - --- turn on always-inline for later -add4_val_val:setinlined(true) -add4_val_ref:setinlined(true) -add4_ref_val:setinlined(true) -add4_ref_ref:setinlined(true) - --- uncomment to look at individual LLVM bytecode & disassembly -add4_val_val:disas() --- add4_val_ref:disas() --- add4_ref_val:disas() --- add4_ref_ref:disas() --- add4_ref_ref_tempvar:disas() - - -if terralib.lookupsymbol and require("ffi").os ~= "Windows" then - terra sizecheck() - var si : terralib.SymbolInfo - terralib.lookupsymbol(add4_val_val,&si) - return si.size - end - assert(sizecheck() < 16) -end --------------------------------------------------------------------------------- - --- up to this point, one could argue that functions are always inlined into --- other functions, and that the instructions dissolve in the greater scheme --- of things. - --- if that is true, let's attempt to convert one style into another and see --- if the optimizations catch up. - --- read by value, return by value -> read by reference, return by reference --- the clunky solution to the slim interface --- 38 instructions (!), 193 bytes (!!), so it gets *worse* -local terra add4_val_val_to_ref_ref(c : &float4, a : &float4, b: &float4) : {} - @c = add4_val_val(@a, @b) -end - --- read by reference, return by reference -> read by value, return by value --- the slim solution to the clunky interface --- 13 instructions, 61 bytes with tempvar -- wow, that's better than --- the original function with the actual code in it! -local terra add4_ref_ref_to_val_val(a : float4, b : float4) : float4 - var c : float4 - add4_ref_ref_tempvar(&c, &a, &b) - return c -end - --- so what happens if we do a conversion back to the by-reference interface? --- 41 instructions, 194 bytes -local terra add4_ref_ref_to_val_val_to_ref_ref(c : &float4, a : &float4, b: &float4) : {} - @c = add4_ref_ref_to_val_val(@a, @b) -end - --- and nest it once more, back to the by-value interface --- 47 instructions, 208 bytes --- so once we pass structs by-value, we'll never recover. -local terra add4_ref_ref_to_val_val_to_ref_ref_to_val_val(a : float4, b : float4) : float4 - var c : float4 - add4_ref_ref_to_val_val_to_ref_ref(&c, &a, &b) - return c -end - --- uncomment to look at individual disassembly --- add4_val_val_to_ref_ref:disas() --- add4_ref_ref_to_val_val:disas() --- add4_ref_ref_to_val_val_to_ref_ref:disas() --- add4_ref_ref_to_val_val_to_ref_ref_to_val_val:disas() \ No newline at end of file diff --git a/samples/Terra/clean.t b/samples/Terra/clean.t deleted file mode 100644 index 078a3963..00000000 --- a/samples/Terra/clean.t +++ /dev/null @@ -1,17 +0,0 @@ -local c = terralib.includec("stdio.h") - -iamclean = macro(function(arg) - return quote - var a = 3 - return a,arg - end -end) - -terra doit() - var a = 4 - iamclean(a) -end - -local a = doit() -local test = require("test") -test.meq({3,4}, a) \ No newline at end of file diff --git a/samples/Terra/cnames.t b/samples/Terra/cnames.t deleted file mode 100644 index 5a487ce2..00000000 --- a/samples/Terra/cnames.t +++ /dev/null @@ -1,25 +0,0 @@ -struct Foo { - c : float; -} -Foo.displayname = "struct.Foo" -terra useFoo() - var a : Foo - a.c = 4.5 - return a.c -end -assert(4.5 == useFoo()) - -C = terralib.includecstring [[ -typedef struct { int a; int b; } Foo; -]] - -terra stuff() - var a : Foo - var b : C.Foo - b.a = 1 - b.b = 2 - a.c = 4.5 - return b.a + b.b + a.c -end - -assert(7.5 == stuff()) diff --git a/samples/Terra/cnamespace.t b/samples/Terra/cnamespace.t deleted file mode 100644 index dc3c6cc2..00000000 --- a/samples/Terra/cnamespace.t +++ /dev/null @@ -1,24 +0,0 @@ -G,T = terralib.includecstring [[ - typedef struct { - double c; - } A; - struct A { - int b; - }; -]] - -G2,T2 = terralib.includecstring [[ - struct A; - typedef struct C A; -]] - -assert(T2.A == T.A) -assert(G2.A ~= T2.A and G2.A ~= G.A) -terra foo() - var a : G.A - var b : T.A - a.c = 4.5 - b.b = 4.5 - return a.c + b.b -end -assert(8.5 == foo()) \ No newline at end of file diff --git a/samples/Terra/cnamespaces.t b/samples/Terra/cnamespaces.t deleted file mode 100644 index 54ad3cd0..00000000 --- a/samples/Terra/cnamespaces.t +++ /dev/null @@ -1,32 +0,0 @@ -C,T = terralib.includecstring [[ - - struct Foo { - int a; - }; - typedef int Foo; - typedef struct Foo * Bar; - typedef Foo * Bar2; - Bar bar(struct Foo * a, Bar2 b) { return (Bar)0; } -]] - -terra what() - var f = T.Foo { 3 } - var a : C.Bar = &f - return a.a -end - -assert(3 == what()) - -C,T = terralib.includecstring [[ - typedef struct { int a; } Foo; - typedef Foo * FooPtr; - int returna(FooPtr a) { return a->a; } -]] - -terra what2() - var a : C.Foo = C.Foo { 3 } - var ap : C.FooPtr = &a - return C.returna(ap) -end - -assert(3 == what2()) diff --git a/samples/Terra/compilecallback.t b/samples/Terra/compilecallback.t deleted file mode 100644 index 147fdb0e..00000000 --- a/samples/Terra/compilecallback.t +++ /dev/null @@ -1,16 +0,0 @@ - -local a = 0 -local foo = macro(function(arg) - bar:gettype(function() - a = bar() - end) - a = 1 - return 3 -end) - -terra bar() - return foo() -end - -assert(bar() == 3) -assert(a == 3) \ No newline at end of file diff --git a/samples/Terra/completec.t b/samples/Terra/completec.t deleted file mode 100644 index 0b16091e..00000000 --- a/samples/Terra/completec.t +++ /dev/null @@ -1,13 +0,0 @@ -C = terralib.includecstring [[ - struct A { - int a; - }; - static struct A foo; - struct A * getfoo() { - foo.a = 4; - return &foo; - } -]] - -assert(C.getfoo().a == 4) - diff --git a/samples/Terra/conflict.t b/samples/Terra/conflict.t deleted file mode 100644 index ac871735..00000000 --- a/samples/Terra/conflict.t +++ /dev/null @@ -1,12 +0,0 @@ - -terra foo() -end - -foo:compile() -terralib.dumpmodule() - -terralib.includecstring [[ - int foo() { - return 4; - } -]] \ No newline at end of file diff --git a/samples/Terra/constant.t b/samples/Terra/constant.t deleted file mode 100644 index 6f44ee87..00000000 --- a/samples/Terra/constant.t +++ /dev/null @@ -1,35 +0,0 @@ - - -local foo = terralib.constant(terralib.new(int[4],{1,2,3,4})) - -struct A { - a : int; - b : float -} - -local mystr = terralib.new(A,{3,4.5}) -local const = constant(mystr) - - -terra bar() - return foo[3] + mystr.a -end - -terra bar2() - return foo[1] + mystr.b -end - -function wrapper(a) - return a + 1 -end - -local p1 = terralib.constant(int -> int, wrapper) - -terra doit() - return p1(3) -end - -local test = require("test") -test.eq(bar(),7) -test.eq(bar2(),6.5) -test.eq(doit(),4) diff --git a/samples/Terra/constant2.t b/samples/Terra/constant2.t deleted file mode 100644 index bc18b2ca..00000000 --- a/samples/Terra/constant2.t +++ /dev/null @@ -1,21 +0,0 @@ - - -local a = terralib.new(int,3) -local b = terralib.new(int8,4) -local c = terralib.new(int64,5) -local d = terralib.new(float,3.25) -local e = terralib.new(double,4.25) - -f = global(4) -terra foo() - return &f -end - -local pf = foo() - -terra bar() - return a + b + c + d + e + @pf -end - -local test = require("test") -test.eq(bar(),23.5) \ No newline at end of file diff --git a/samples/Terra/constructor.t b/samples/Terra/constructor.t deleted file mode 100644 index 87161fe9..00000000 --- a/samples/Terra/constructor.t +++ /dev/null @@ -1,12 +0,0 @@ - -local b = 1 -local dd = "d" -local c = symbol() - -terra foo() - var a = { _0 = [b], [c] = 2, [dd] = 3, r = 4} - return a._0 + a.[c] + a.d + a.r -end - -local test = require("test") -test.eq(foo(),10) \ No newline at end of file diff --git a/samples/Terra/coverage.t b/samples/Terra/coverage.t deleted file mode 100644 index e865d664..00000000 --- a/samples/Terra/coverage.t +++ /dev/null @@ -1,47 +0,0 @@ -function failit(match,fn) - local success,msg = pcall(fn) - if success then - error("failed to fail.",2) - elseif not string.match(msg,match) then - error("failed wrong: "..msg,2) - end -end -local test = require("test") -local erd = "Errors reported during" - -local terra f1() - return test -end - -failit(erd,function() -f1:compile() -end) -failit("referencing a function which failed to compile",function() -f1:compile() -end) -failit(erd,function() - local terra foo() - f1() - end - foo() -end) - - -local struct A { - a : int -} - -A.metamethods.__getentries = function(self) - error("I AM BAD") -end - -failit(erd,function() - A:complete() -end) - -failit(erd,function() - local terra foo() - var a : A - end - foo() -end) diff --git a/samples/Terra/coverage2.t b/samples/Terra/coverage2.t deleted file mode 100644 index b74377f7..00000000 --- a/samples/Terra/coverage2.t +++ /dev/null @@ -1,209 +0,0 @@ -function failit(match,fn) - local success,msg = pcall(fn) - if success then - error("failed to fail.",2) - elseif not string.match(msg,match) then - error("failed wrong: "..msg,2) - end -end -local test = require("test") -local erd = "Errors reported during" - -failit(erd,function() -local aglobal = 5 -local terra foo() - return [ (function() aglobal = 4; return 3 end)() ] -end -foo() -end) - -A = terralib.types.newstruct() -A.entries:insert{ field = "a", type = int[2] } - -A.metamethods.__getentries = function() error("NOPE") end - -failit(erd,function() - A:complete() -end) -local terra foo() - var a : int[2] - return 3 -end -foo:compile() -local a = 0 -foo:gettype(function() - a = a + 1 -end) -assert(a == 1) - -local terra errored -failit(erd,function() - terra errored() - return A - end - errored:compile() -end) -failit("referencing a function which failed to compile",function() - errored() -end) - -local terra ol(a : int) return a end -terra ol(a : int, b : int) return a + b end - -assert(ol(3) == 3) -assert(ol(3,4) == 7) - -failit("bad argument #1",function() - ol("a") -end) - -ol:printstats() -NSE = terralib.types.newstruct() - -failit(erd,function() - NSE.entries:insert { field = "a", type = "b" } - NSE:complete() -end) - -SICS = terralib.types.newstruct() -SICS.entries:insert { field = symbol(), type = int } -a = 1 -SICS.metamethods.__staticinitialize = function() a = a + 1 end -print(terralib.new(SICS,{3})) - -NSF = terralib.types.newstruct() -NSF.entries:insert { type = int , field = 3 } - -failit(erd,function() - NSF:complete() -end) -SICS:complete() -assert(a == 2) -struct SF { - a : SF2 -} and struct SF2 { - a : int -} -SF2.metamethods.__getentries = function(self) SF:complete() end -failit(erd,function() -SF:complete() -end) -failit("Attempting to get a property of a type that previously resulted in an error.",function() -SF:complete() -end) - -failit(erd,function() - struct SF { b : int } -end) - - -struct C { - a : int -} - -C.metamethods.__cast = function() return error("CAST ERROR") end - -local terra casttest() - return int(C { 3 }) -end -failit(erd,function() -casttest() -end) - -local terra shiftcheck() - var r = 1 << vector(1,2,3,4) - var r2 = vector(1,2,3,4) << 1 - return r[0],r[1],r[2],r[3],r2[0],r2[1],r2[2],r2[3] -end - -test.meq({2,4,8,16,2,4,6,8},shiftcheck()) - -failit(erd,function() - local terra foo() - return terralib.select(3,4,5) - end - foo() -end) -failit(erd,function() - local terra foo() - return (4):foo() - end - foo() -end) -failit(erd,function() - local terra foo() - return (C {3}):foo() - end - foo() -end) -failit(erd,function() - local a = { a = 4} - local terra foo() - return a() - end - foo() -end) -local saveit -local foom = macro(function(arg) saveit = arg; arg:astype(); end) -failit(erd,function() - local terra foo() - return foom(4) - end - foo() -end) - -failit(erd,function() - local terra foo() - return saveit - end - foo() -end) -failit(erd,function() - local struct A { - a : 3 - } -end) - -failit(erd,function() - local terra foo - local bar = macro(function() foo:compile() end) - terra foo() - return bar() - end - foo() -end) - -struct ATF { - a : int -} - -ATF.metamethods.__getentries = function(self) - local terra foo() - var a : ATF - return a.a - end - foo:compile() -end - -failit(erd,function() - ATF:complete() -end) - -struct FA { - a : &FA2 -} and struct FA2 { - a : int -} - -FA.metamethods.__staticinitialize = function() a = a + 1 end - -FA2.metamethods.__staticinitialize = function(self) - FA:complete() -end - -FA:complete() - -assert(a == 3) ---[[ -freezing asynchronus needs to be called -]] \ No newline at end of file diff --git a/samples/Terra/coverage3.t b/samples/Terra/coverage3.t deleted file mode 100644 index 495d6251..00000000 --- a/samples/Terra/coverage3.t +++ /dev/null @@ -1,107 +0,0 @@ -function failit(match,fn) - local success,msg = pcall(fn) - if success then - error("failed to fail.",2) - elseif not string.match(msg,match) then - error("failed wrong: "..msg,2) - end -end -local test = require("test") -local erd = "Errors reported during" - -terra foo() -end -foo:compile() -failit("inlining",function() foo:setinlined(false) end) - -terra bar -failit("attempting to call",function() -bar:compile() end) - -failit("expected a name",function() - terralib.intrinsic("far","far") -end) - -print((&int)[4]) - -struct A { - a : int[4]; - b : ∫ - union { c : int; d : int}; - e : int -> int; -} -A:printpretty() - -terra rv() return vector(1,2,3) end - -terra varg(a : vector(int,3)) - - return a[0] + a[1] + a[2] -end - -assert (6 == varg(rv())) - -local something = nil -failit(erd,function() -local terra a([something]) -end -end) - -failit(erd,function() -local terra what() - var a = A { ee = 4 } -end -what:compile() -end) - -A.metamethods.__getmethod = function(self,methodname) - return 1 -end - -failit(erd,function() -local terra what() - var a : A - A.something() -end -what:compile() -end) - -C = terralib.includec("stdio.h") - ---TODO: __sputc isn't consistent across architectures, so this is a bad test ---failit("cannot import",function() ---local a = C.__sputc ---end) - -failit("not found",function() -local a = C.nothing -end) - -terra up() return unpackstruct(3) end -assert(3 == up()) - -failit(erd,function() -local terra aloads(a : &int) - return terralib.attrload(a),terralib.attrload(nil,{3}),terralib.attrstore(a,nil) -end -aloads:compile() -end) - -terra f() end -terra f(a:int) end -failit("overloaded", function() -terralib.saveobj("err.o", { f = f}) -end) - -terra nop() end -terra nilcall(a : tuple(), b : int) - return b,a -end -terra nilstuff() - var a = nop() - var c,b = nilcall(a,4) - return c -end -assert(4 == nilstuff()) - -nilcall:disas() \ No newline at end of file diff --git a/samples/Terra/crash1.t b/samples/Terra/crash1.t deleted file mode 100644 index 91732c22..00000000 --- a/samples/Terra/crash1.t +++ /dev/null @@ -1 +0,0 @@ -a = &int \ No newline at end of file diff --git a/samples/Terra/crash2.t b/samples/Terra/crash2.t deleted file mode 100644 index 789ad7ac..00000000 --- a/samples/Terra/crash2.t +++ /dev/null @@ -1 +0,0 @@ -a = global( struct { a : int } ) \ No newline at end of file diff --git a/samples/Terra/cstruct.t b/samples/Terra/cstruct.t deleted file mode 100644 index 6f4f0d9d..00000000 --- a/samples/Terra/cstruct.t +++ /dev/null @@ -1,20 +0,0 @@ -local C = terralib.includecstring [[ - -struct teststruct { - int idata; - float fdata; -}; - -void makeitlive(struct teststruct * s) {} - -]] - - -terra foo() - var a : C.teststruct - a.idata = 3 - a.fdata = 3.5 - return a.idata + a.fdata -end - -assert(foo() == 6.5) \ No newline at end of file diff --git a/samples/Terra/cstruct2.t b/samples/Terra/cstruct2.t deleted file mode 100644 index 8b557c8a..00000000 --- a/samples/Terra/cstruct2.t +++ /dev/null @@ -1,8 +0,0 @@ - - -C = terralib.includecstring [[ - typedef struct { int x; int y; } Point; - Point mkpoint() { Point p; p.x = p.y = 3; return p; } -]] - -assert(C.mkpoint().x == 3) \ No newline at end of file diff --git a/samples/Terra/cudaagg.t b/samples/Terra/cudaagg.t deleted file mode 100644 index 12fcf4ed..00000000 --- a/samples/Terra/cudaagg.t +++ /dev/null @@ -1,56 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x--terralib.intrinsic("llvm.nvvm.read.ptx.sreg.tid.x",{} -> int) -local ntid = cudalib.nvvm_read_ptx_sreg_ntid_x -- terralib.intrinsic("llvm.nvvm.read.ptx.sreg.ntid.x",{} -> int) - - -struct OneFloat { - a : int; -} - -fn = terra(result : &float, bar : int[5]) - result[tid()] = bar[0] + bar[1] + bar[2] + bar[3] + bar[4] -end -fn:setinlined(false) - ---our very simple cuda kernel ---more work needs to be done to expose the right CUDA intrinsics ---to do more complicated things -foo = terra(result : &float) - fn(result, array(tid(),tid()+1,tid()+2,tid()+3,tid()+4) ) -end - -terralib.includepath = terralib.includepath..";/usr/local/cuda/include" - -local C = terralib.includecstring [[ -#include "cuda_runtime.h" -#include -#include -]] -local R = terralib.cudacompile({ bar = foo }) - -terra doit(N : int) - var data : &float - C.cudaMalloc([&&opaque](&data),sizeof(float)*N) - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.bar(&launch,data) - var results : &float = [&float](C.malloc(sizeof(float)*N)) - C.cudaMemcpy(results,data,sizeof(float)*N,2) - var result = 0.f - for i = 0,N do - result = result + results[i] - end - return result -end - -local test = require("test") -local N = 16 - -function s(n) return (n - 1) * n / 2 end -function ex(i) return s(N+i) - s(i) end -local expected = ex(0) + ex(1) + ex(2) + ex(3) + ex(4) -test.eq(doit(N),expected) - diff --git a/samples/Terra/cudaaggregate.t b/samples/Terra/cudaaggregate.t deleted file mode 100644 index 9d6070d7..00000000 --- a/samples/Terra/cudaaggregate.t +++ /dev/null @@ -1,45 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x--terralib.intrinsic("llvm.nvvm.read.ptx.sreg.tid.x",{} -> int) -local ntid = cudalib.nvvm_read_ptx_sreg_ntid_x -- terralib.intrinsic("llvm.nvvm.read.ptx.sreg.ntid.x",{} -> int) - -struct A { - a : int - b : int - c : int[2] -} -terra foo(result : &float,a : A, c : int, d : int[2]) - var t = tid() - result[t] = t + a.a + a.b + c + a.c[0] + a.c[1] + d[0] + d[1] -end - -terralib.includepath = terralib.includepath..";/usr/local/cuda/include" - -local C = terralib.includecstring [[ -#include "cuda_runtime.h" -#include -#include -]] -local R = terralib.cudacompile({ bar = foo }) - -terra doit(N : int) - var data : &float - C.cudaMalloc([&&opaque](&data),sizeof(float)*N) - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.bar(&launch,data, A { 1,2, array(3,4) },5,array(6,7)) - var results : &float = [&float](C.malloc(sizeof(float)*N)) - C.cudaMemcpy(results,data,sizeof(float)*N,2) - var result = 0.f - for i = 0,N do - result = result + results[i] - end - return result -end - -local test = require("test") -local N = 16 -local expected = (N - 1)*N/2 + N*(1 + 2 + 3 + 4 + 5 + 6 + 7) -test.eq(doit(N),expected) diff --git a/samples/Terra/cudaatomic.t b/samples/Terra/cudaatomic.t deleted file mode 100644 index ebe3425d..00000000 --- a/samples/Terra/cudaatomic.t +++ /dev/null @@ -1,39 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x--terralib.intrinsic("llvm.nvvm.read.ptx.sreg.tid.x",{} -> int) - -foo = terra(result : &int) - var t = tid() - terralib.asm(terralib.types.unit,"red.global.max.u32 [$0], $1;","l,r",true,result,t) -end - -terralib.includepath = terralib.includepath..";/usr/local/cuda/include" - - -local C = terralib.includecstring [[ -#include "cuda_runtime.h" -#include -#include -]] - -sync = terralib.externfunction("cudaThreadSynchronize", {} -> int) - -local R = terralib.cudacompile({ bar = foo },true) - -terra doit(N : int) - var data = 0 - var location : &int - C.cudaMalloc([&&opaque](&location),sizeof(int)) - C.cudaMemcpy(location,&data,sizeof(int),1) - - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.bar(&launch,location) - var data2 = -1 - C.cudaMemcpy(&data2,location,sizeof(int),2) - return data2 -end - -assert(doit(32) == 31) diff --git a/samples/Terra/cudaconst2.t b/samples/Terra/cudaconst2.t deleted file mode 100644 index 6ca8eead..00000000 --- a/samples/Terra/cudaconst2.t +++ /dev/null @@ -1,14 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local const = cudalib.constantmemory(float, 1) - -local terra kernel(data: &float) -end - -local M = terralib.cudacompile({ - kernel = kernel, - const = const -}) diff --git a/samples/Terra/cudaglobal.t b/samples/Terra/cudaglobal.t deleted file mode 100644 index 53564f4f..00000000 --- a/samples/Terra/cudaglobal.t +++ /dev/null @@ -1,48 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x--terralib.intrinsic("llvm.nvvm.read.ptx.sreg.tid.x",{} -> int) -local ntid = cudalib.nvvm_read_ptx_sreg_ntid_x -- terralib.intrinsic("llvm.nvvm.read.ptx.sreg.ntid.x",{} -> int) - - -theone = global(0) - -theconst = cudalib.constantmemory(int,1) - -terra foo(result : &float) - result[tid()] = tid() + theone + theconst[0] -end - -terralib.includepath = terralib.includepath..";/usr/local/cuda/include" - -local C = terralib.includecstring [[ -#include "cuda_runtime.h" -#include -#include -]] -local R = terralib.cudacompile({ foo = foo, aone = theone, theconst = theconst }) - -terra doit(N : int) - var data : &float - C.cudaMalloc([&&opaque](&data),sizeof(float)*N) - var one = 1 - var two = 2 - C.cudaMemcpy(R.aone,&one,sizeof(int),1) - C.cudaMemcpy(R.theconst,&two,sizeof(int),1) - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.foo(&launch,data) - var results : &float = [&float](C.malloc(sizeof(float)*N)) - C.cudaMemcpy(results,data,sizeof(float)*N,2) - var result = 0.f - for i = 0,N do - result = result + results[i] - end - return result -end - -local test = require("test") -local N = 16 -local expected = (N - 1)*N/2 + 3*N -test.eq(doit(N),expected) diff --git a/samples/Terra/cudahello.t b/samples/Terra/cudahello.t deleted file mode 100644 index 96b68462..00000000 --- a/samples/Terra/cudahello.t +++ /dev/null @@ -1,30 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x--terralib.intrinsic("llvm.nvvm.read.ptx.sreg.tid.x",{} -> int) - -C = terralib.includec("stdio.h") -vprintf = terralib.externfunction("cudart:vprintf", {&int8,&int8} -> int) - -foo = terra(result : &float) - var t = tid() - vprintf("%d\n",[&int8](&t)) -end - -terralib.includepath = terralib.includepath..";/usr/local/cuda/include" - - -sync = terralib.externfunction("cudaThreadSynchronize", {} -> int) - -local R = terralib.cudacompile({ bar = foo }) - -terra doit(N : int) - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.bar(&launch,nil) - sync() - C.printf("and were done\n") -end - -doit(3) diff --git a/samples/Terra/cudaoffline.t b/samples/Terra/cudaoffline.t deleted file mode 100644 index f750027b..00000000 --- a/samples/Terra/cudaoffline.t +++ /dev/null @@ -1,65 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x -local ntid = cudalib.nvvm_read_ptx_sreg_ntid_x - -theone = global(0) - -theconst = cudalib.constantmemory(int,1) - -terra foo(result : &float) - result[tid()] = tid() + theone + theconst[0] -end - -local C = terralib.includecstring [[ -#include "cuda_runtime.h" -#include -#include -]] - -local R,L = terralib.cudacompile({ foo = foo, aone = theone, theconst = theconst },nil,nil,false) - -terra doit(N : int) - var data : &float - C.cudaMalloc([&&opaque](&data),sizeof(float)*N) - var one = 1 - var two = 2 - C.cudaMemcpy(R.aone,&one,sizeof(int),1) - C.cudaMemcpy(R.theconst,&two,sizeof(int),1) - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.foo(&launch,data) - var results : &float = [&float](C.malloc(sizeof(float)*N)) - C.cudaMemcpy(results,data,sizeof(float)*N,2) - var result = 0.f - for i = 0,N do - result = result + results[i] - end - return result -end - - -terra main() : int - if L(nil,nil,nil,0) ~= 0 then - C.printf("WHAT\n") - end - var N = 16 - var expected = (N - 1)*N/2 + 3*N - return terralib.select(doit(N) == expected,0,1) -end - - -local ffi = require 'ffi' -local path = ({ OSX = "/lib", Linux = "/lib64", Windows = "\\lib\\x64" })[ffi.os] -path = terralib.cudahome..path - - -local args = ffi.os == "Windows" and {path.."\\cuda.lib", path.."\\cudart.lib"} - or {"-L"..path, "-Wl,-rpath,"..path, "-lcuda", "-lcudart"} - -local name = ffi.os == "Windows" and ".\\cudaoffline.exe" or "./cudaoffline" -terralib.saveobj(name,{ main = main },args) -assert(os.execute(name) == 0) - diff --git a/samples/Terra/cudaoo.t b/samples/Terra/cudaoo.t deleted file mode 100644 index 65b16688..00000000 --- a/samples/Terra/cudaoo.t +++ /dev/null @@ -1,20 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end -C = terralib.includec("cuda_runtime.h") - -cudalib.linkruntime() - -terra foo() - var stuff : &opaque - C.cudaMalloc(&stuff,sizeof(int)) - return stuff -end - -local a = foo() - -terra blank() end -terralib.cudacompile { blank = blank } - -assert(0 == C.cudaMemset(a,0,4)) diff --git a/samples/Terra/cudaprintf.t b/samples/Terra/cudaprintf.t deleted file mode 100644 index b9ef9b73..00000000 --- a/samples/Terra/cudaprintf.t +++ /dev/null @@ -1,50 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x--terralib.intrinsic("llvm.nvvm.read.ptx.sreg.tid.x",{} -> int) - -vprintf = terralib.externfunction("cudart:vprintf", {&int8,&int8} -> int) -local function createbuffer(args) - local Buf = terralib.types.newstruct() - return quote - var buf : Buf - escape - for i,e in ipairs(args) do - local typ = e:gettype() - local field = "_"..tonumber(i) - typ = typ == float and double or typ - table.insert(Buf.entries,{field,typ}) - emit quote - buf.[field] = e - end - end - end - in - [&int8](&buf) - end -end -printf = macro(function(fmt,...) - local buf = createbuffer({...}) - return `vprintf(fmt,buf) -end) - -foo = terra(result : &float) - var t = tid() - printf("a = %d, b = %f, c = %d\n",t,1.0 + t,t + 2) -end - -sync = terralib.externfunction("cuStreamSynchronize", {&opaque} -> int) - -annotations = { {"maxntidx",43}, {"minctasm",8}} -- example of annotating cuda kernel with launch bounds -local R = terralib.cudacompile({ bar = { kernel = foo, annotations = annotations }}) - -terra doit(N : int) - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.bar(&launch,nil) - sync(nil) -end - -doit(3) - diff --git a/samples/Terra/cudashared.t b/samples/Terra/cudashared.t deleted file mode 100644 index cde12737..00000000 --- a/samples/Terra/cudashared.t +++ /dev/null @@ -1,47 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x--terralib.intrinsic("llvm.nvvm.read.ptx.sreg.tid.x",{} -> int) - -N = 1024 - -somedata = cudalib.sharedmemory(int,N) - -terra bar(result : &int) - var t = tid() - somedata[t] = t - cudalib.nvvm_barrier0() - result[t] = somedata[N - 1 - t] -end - -terralib.includepath = terralib.includepath..";/usr/local/cuda/include" - -local C = terralib.includecstring [[ -#include "cuda_runtime.h" -#include -#include -]] - -local R = terralib.cudacompile({ bar = bar },true) - - -terra doit(N : int) - var data : &int - C.cudaMalloc([&&opaque](&data),sizeof(int)*N) - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.bar(&launch,data) - var results : &int = [&int](C.malloc(sizeof(int)*N)) - C.cudaMemcpy(results,data,sizeof(int)*N,2) - var result = 0 - for i = 0,N do - --C.printf("result = %d\n",results[i]) - result = result + results[i] - end - return result -end - -local test = require("test") -local expected = (N - 1)*N/2 -test.eq(doit(N),expected) diff --git a/samples/Terra/cudatest.t b/samples/Terra/cudatest.t deleted file mode 100644 index a15d54fc..00000000 --- a/samples/Terra/cudatest.t +++ /dev/null @@ -1,47 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x--terralib.intrinsic("llvm.nvvm.read.ptx.sreg.tid.x",{} -> int) -local ntid = cudalib.nvvm_read_ptx_sreg_ntid_x -- terralib.intrinsic("llvm.nvvm.read.ptx.sreg.ntid.x",{} -> int) - -fn = terra(result : &float) - var t = tid() - result[t] = t -end -fn:setinlined(false) ---our very simple cuda kernel ---more work needs to be done to expose the right CUDA intrinsics ---to do more compilicated things -foo = terra(result : &float) - fn(result) -end - -terralib.includepath = terralib.includepath..";/usr/local/cuda/include" - -local C = terralib.includecstring [[ -#include "cuda_runtime.h" -#include -#include -]] -local R = terralib.cudacompile({ bar = foo }) - -terra doit(N : int) - var data : &float - C.cudaMalloc([&&opaque](&data),sizeof(float)*N) - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.bar(&launch,data) - var results : &float = [&float](C.malloc(sizeof(float)*N)) - C.cudaMemcpy(results,data,sizeof(float)*N,2) - var result = 0.f - for i = 0,N do - result = result + results[i] - end - return result -end - -local test = require("test") -local N = 16 -local expected = (N - 1)*N/2 -test.eq(doit(N),expected) diff --git a/samples/Terra/cudatex.t b/samples/Terra/cudatex.t deleted file mode 100644 index cebb6079..00000000 --- a/samples/Terra/cudatex.t +++ /dev/null @@ -1,59 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x--terralib.intrinsic("llvm.nvvm.read.ptx.sreg.tid.x",{} -> int) - -C = terralib.includecstring [[ -#include -#include -#include -#include -]] - -vprintf = terralib.externfunction("cudart:vprintf", {&int8,&int8} -> int) - -foo = terra(result : C.cudaTextureObject_t) - var t = tid() - var r = terralib.asm([tuple(float,float,float,float)], - "tex.1d.v4.f32.s32 {$0,$1,$2,$3}, [$4, {$5}];", - "=f,=f,=f,=f,l,r",false,result,t) - var rr : double = r._0 - vprintf("%f\n",[&int8](&rr)) -end - -terralib.includepath = terralib.includepath..";/usr/local/cuda/include" - -sync = terralib.externfunction("cudaThreadSynchronize", {} -> int) - -local R = terralib.cudacompile({ foo = foo }) - -terra doit(N : int) - var d_buffer : &double - C.cudaMalloc([&&opaque](&d_buffer),N*sizeof(float)) - - var h_buffer = arrayof(float,0,1,2,3,4,5,6,7,8,9,10) - C.cudaMemcpy(d_buffer,&h_buffer[0],sizeof(float)*N, C.cudaMemcpyHostToDevice) - - var resDesc : C.cudaResourceDesc - C.memset(&resDesc,0,sizeof(C.cudaResourceDesc)) - resDesc.resType = C.cudaResourceTypeLinear; - resDesc.res.linear.devPtr = d_buffer; - resDesc.res.linear.desc.f = C.cudaChannelFormatKindFloat; - resDesc.res.linear.desc.x = 32; -- bits per channel - resDesc.res.linear.sizeInBytes = N*sizeof(float); - var texDesc : C.cudaTextureDesc - C.memset(&texDesc, 0, sizeof(C.cudaTextureDesc)); - texDesc.readMode = C.cudaReadModeElementType; - - var tex : C.cudaTextureObject_t - C.cudaCreateTextureObject(&tex, &resDesc, &texDesc, nil); - - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.foo(&launch,tex) - sync() - C.printf("and were done\n") -end - -doit(10) diff --git a/samples/Terra/cunion.t b/samples/Terra/cunion.t deleted file mode 100644 index 7077d4d0..00000000 --- a/samples/Terra/cunion.t +++ /dev/null @@ -1,34 +0,0 @@ -local C = terralib.includecstring [[ - -union testunion { - int idata; - float fdata; -}; - -typedef - union { - int a; - float b; - } S; - -void setUnion(union testunion * u, S * s){ - u->idata = 3; -} -int getUnionInt(union testunion * u){ - return u->idata; -} - -]] - -terra foo() : int - var u : C.testunion - C.setUnion(&u,nil) - var s : C.S - return C.getUnionInt(&u) -end - - -terralib.tree.printraw(C.S) - -local test = require("test") -test.eq(foo(),3) \ No newline at end of file diff --git a/samples/Terra/cunion2.t b/samples/Terra/cunion2.t deleted file mode 100644 index 08a4e3e5..00000000 --- a/samples/Terra/cunion2.t +++ /dev/null @@ -1,35 +0,0 @@ -local C = terralib.includecstring [[ - -union testunion { - int idata; - float fdata; -}; - -void setUnionI(union testunion * u){ - u->idata = 3; -} -void setUnionF(union testunion * u){ - u->fdata = 4.f; -} - -]] - -terra foo() : int - var u : C.testunion - C.setUnionI(&u) - var f = u.idata - C.setUnionF(&u) - var f2 = u.fdata - return f + f2 -end - -terra foo2() - var a : C.testunion - a.fdata = -3.0 - a.idata = a.idata and not (1 << 31) - return a.fdata -end - -local test = require("test") -test.eq(foo(),7) -test.eq(foo2(),3) \ No newline at end of file diff --git a/samples/Terra/customline.t b/samples/Terra/customline.t deleted file mode 100644 index c70ecff6..00000000 --- a/samples/Terra/customline.t +++ /dev/null @@ -1,10 +0,0 @@ -terra foo(c : int, b : int) - terralib.debuginfo("../src/terralib.lua",300) - var a = b + c - terralib.debuginfo("../src/terralib.lua",301) - return a + a -end - -foo(3,4) - ---terralib.dumpmodule() \ No newline at end of file diff --git a/samples/Terra/customtable.t b/samples/Terra/customtable.t deleted file mode 100644 index 18649347..00000000 --- a/samples/Terra/customtable.t +++ /dev/null @@ -1,10 +0,0 @@ - - -struct A { -} - -A.metamethods.__luametatable = { __index = function(self,idx) return 4 end } -A.methods.foo = function() return 5 end -a = terralib.new(A) - -assert(a.foo == 4) \ No newline at end of file diff --git a/samples/Terra/cvar.t b/samples/Terra/cvar.t deleted file mode 100644 index aaa3398f..00000000 --- a/samples/Terra/cvar.t +++ /dev/null @@ -1,9 +0,0 @@ -C = terralib.includecstring [[ - int foo = 4; - const int foo2 = 5; -]] -terra t() - C.foo = C.foo + 1; - return C.foo + C.foo2 -end -assert(t() == 10) \ No newline at end of file diff --git a/samples/Terra/debugcallback.t b/samples/Terra/debugcallback.t deleted file mode 100644 index 2e236650..00000000 --- a/samples/Terra/debugcallback.t +++ /dev/null @@ -1,23 +0,0 @@ - -terralib.settypeerrordebugcallback(function(o) - o:printpretty() -end) - - -local function dosomecomplicatedstuff(a) - return `@a -end - -local s,e = pcall(function() - - local terra what(a : &opaque) - var b = [dosomecomplicatedstuff(a)] - return b - end - what:compile() - -end) - -assert(not s) -print(e) -assert(e:match("Errors reported during")) \ No newline at end of file diff --git a/samples/Terra/declerrors.t b/samples/Terra/declerrors.t deleted file mode 100644 index 58d24477..00000000 --- a/samples/Terra/declerrors.t +++ /dev/null @@ -1,29 +0,0 @@ -function failit(fn,err) - local success,msg = pcall(fn) - if success then - error("failed to fail.",2) - elseif not string.match(msg,err or "Errors reported during") then - error("failed wrong: "..msg,2) - end -end - - -failit(function() -local A = {} -terra A:foo() end -end,"expected a struct") - - -failit(function() -terra A.b() end -end,"failed attempting to index field") - -failit(function() -terra A.b.c() end -end,"failed attempting to index field") - - -failit(function() -local A = 4 -struct A.b {} -end,"failed attempting to index field") \ No newline at end of file diff --git a/samples/Terra/decltwice.t b/samples/Terra/decltwice.t deleted file mode 100644 index b56eab60..00000000 --- a/samples/Terra/decltwice.t +++ /dev/null @@ -1,18 +0,0 @@ - -terra mything - -terra mybar() - return mything(4) -end - -terra mything(a : int) - return a -end - -terra mything - -terra mybar2() - return mything(4) -end - -assert(mybar() == mybar2()) \ No newline at end of file diff --git a/samples/Terra/def1.t b/samples/Terra/def1.t deleted file mode 100755 index 2ce3ba06..00000000 --- a/samples/Terra/def1.t +++ /dev/null @@ -1,16 +0,0 @@ -import "lib/def" - -local c = 3 -local a = 4 -local b = def(a) a + c -local d = b(10) - -def e(a) a + c -local def f(a) a + c - -print(d, e(10), f(10)) - -local test = require("test") -test.eq(d,13) -test.eq(e(10),13) -test.eq(f(10),13) diff --git a/samples/Terra/defaultoperator.t b/samples/Terra/defaultoperator.t deleted file mode 100644 index fe1f6c79..00000000 --- a/samples/Terra/defaultoperator.t +++ /dev/null @@ -1,9 +0,0 @@ - -local a = "+" -local b = "__sub" -local ops = {4,5} -terra foobar() - return operator(b,operator(a,3,operator("+",ops))) -end - -assert(foobar() == -12) diff --git a/samples/Terra/defer.t b/samples/Terra/defer.t deleted file mode 100644 index 4d8c7a84..00000000 --- a/samples/Terra/defer.t +++ /dev/null @@ -1,111 +0,0 @@ -C = terralib.includec("stdio.h") - - -cur = global(int) - -terra d(a : int) - if cur ~= a then - C.printf("found %d while expecting %d\n",a,cur) - error(cur) - end - cur = cur + 1 - --C.printf("d%d\n",a) -end -d:setinlined(false) - -terra side(a : int, b : {}) - d(a) -end - -terra doit() - d(0) - defer side(3,d(1)) - d(2) -end -cur:set(0) -doit() - - -terra doit2() - d(0) - var i = 100 - defer d(203) - repeat - defer d(2*(100-i)+2) - d(2*(100-i)+1) - i = i - 1 - until i == 0 - defer d(202) - do defer d(201) end -end -cur:set(0) -doit2() - -terra doit3() - d(0) - defer d(11) - for i = 0,10 do - defer d(i+1) - end -end - -cur:set(0) -doit3() - -terra doit4() - d(0) - defer d(5) - if true then - defer d(2) - d(1) - end - if false then - else - defer d(3) - end - d(4) -end -cur:set(0) -doit4() - -struct A { -} - -A.methods.stackalloc = macro(function() - return quote - var a : A - defer a:free() - in - &a - end -end) -terra A:free() - d(1) - --C.printf("freeing A (%p)\n",self) -end -terra A:print() - d(0) - --C.printf("printing A (%p)\n",self) -end -terra doit5() - var a = A.stackalloc() - a:print() -end -cur:set(0) -doit5() - -terra doit6(a : int) - defer d(2) - d(0) - if a == 0 then - defer d(1) - return 4 - end - d(1) - return 3 -end -cur:set(0) -doit6(0) - -cur:set(0) -doit6(1) diff --git a/samples/Terra/deferbreak.t b/samples/Terra/deferbreak.t deleted file mode 100644 index eeac802d..00000000 --- a/samples/Terra/deferbreak.t +++ /dev/null @@ -1,35 +0,0 @@ -C = terralib.includec("stdio.h") - -cur = global(int) - -terra d(a : int) - if cur ~= a then - C.printf("found %d while expecting %d\n",a,cur) - error(cur) - end - cur = cur + 1 - C.printf("d%d\n",a) -end -d:setinlined(false) - -terra side(a : int, b : {}) - d(a) -end - -terra doit() - d(0) - for i = 0,10 do - defer d(2*i+2) - if true then - defer d(2*i + 1) - if i == 8 then - break - end - end - end - d(19) -end -cur:set(0) -doit() -doit:printpretty() - diff --git a/samples/Terra/defercond.t b/samples/Terra/defercond.t deleted file mode 100644 index 8de1901c..00000000 --- a/samples/Terra/defercond.t +++ /dev/null @@ -1,82 +0,0 @@ -c = global(int,0) - -terra up() - c = c + 1 -end - -terra foo() - var a = 0 - while([quote do defer up() end in a < 10 end]) do - a = a + 1 - end -end - -foo() -assert(c:get() == 11) - -terra foo2() - var a = 0 - while(a < 10 and [quote do defer up() end in true end]) do - a = a + 1 - end -end - -foo2() -assert(c:get() == 21) - -terra foo3() - var a = 0 - while true do - var r = a < 10 and [quote do defer up() end in true end] - if not r then break end - a = a + 1 - end -end -foo3() -assert(c:get() == 31) - -function failit(match,fn) - local success,msg = pcall(fn) - if success then - error("failed to fail.",2) - elseif not string.match(msg,match) then - error("failed wrong: "..msg,2) - end -end -local df = "defer statements are not allowed in conditional expressions" -failit(df,function() - local terra foo() - if [quote defer up() in true end] then end - end - foo() -end) -failit(df,function() - local terra foo() - while [quote defer up() in true end] do end - end - foo() -end) -failit(df,function() - local terra foo() - repeat until [quote defer up() in true end] do end - end - foo() -end) -failit(df,function() - local terra foo() - var a = true or [quote defer up() in true end] - end - foo() -end) - -failit(df,function() - local terra foo() - var a = [quote defer up() in true end] and true - end - foo() -end) - local terra foo() - var a = [quote defer up() in 1 end] and 2 - end - foo() - assert(c:get() == 32) \ No newline at end of file diff --git a/samples/Terra/defergoto.t b/samples/Terra/defergoto.t deleted file mode 100644 index 5f73670f..00000000 --- a/samples/Terra/defergoto.t +++ /dev/null @@ -1,35 +0,0 @@ -C = terralib.includec("stdio.h") -cur = global(int) - -terra d(a : int) - if cur ~= a then - C.printf("found %d while expecting %d\n",a,cur) - error(cur) - end - cur = cur + 1 - C.printf("d%d\n",a) -end -d:setinlined(false) - -terra foo() - d(0) - defer d(14) - var a = 0 - ::begin:: - defer d(terralib.select(a == 10,13,a + 1)) - if a >= 10 then - defer d(11) - goto theend - end - a = a + 1 - goto begin - ::theend:: - defer d(12) - return a -end - -foo:printpretty() -cur:set(0) - -test = require("test") -test.eq(foo(),10) \ No newline at end of file diff --git a/samples/Terra/dgemm.t b/samples/Terra/dgemm.t deleted file mode 100644 index 4cf577b9..00000000 --- a/samples/Terra/dgemm.t +++ /dev/null @@ -1,143 +0,0 @@ - -local IO = terralib.includec("stdio.h") -local stdlib = terralib.includec("stdlib.h") - -local function isinteger(x) return math.floor(x) == x end - - - -local NB = 48 -terra naivel1matmul(A : &double, B : &double, C : &double, lda : int, ldb : int, ldc : int, alpha : double) - - for m = 0, NB do - for n = 0, NB do - C[m*ldc + n] = alpha * C[m*ldc + n] - for k = 0, NB do - C[m*ldc + n] = C[m*ldc + n] + A[m*lda + k] * B[k*ldb + n] - end - end - end - -end - -function symmat(name,I,...) - if not I then return symbol(name) end - local r = {} - for i = 0,I-1 do - r[i] = symmat(name..tostring(i),...) - end - return r -end - - -function genl1matmul(NB, NK, RM, RN, V,prefetch) - - assert(isinteger(NB / (RN*V))) - assert(isinteger(NB / RM)) - - local VP = &vector(double,V) - local terra vecload(data : &double, idx : int) - var addr = &data[idx] - return @VP(addr) - end - local terra vecstore(data : &double, idx : int, v : vector(double,V)) - var addr = &data[idx] - @VP(addr) = v - end - - local A,B,C,mm,nn, alpha = symbol("A"),symbol("B"),symbol("C"),symbol("mn"),symbol("nn"),symbol("alpha") - local lda,ldb,ldc = symbol("lda"),symbol("ldb"), symbol("ldc") - local a,b,c = symmat("a",NB/V,RM), symmat("b",NB,RN), symmat("c",RM,RN) - local kk = symbol("kk") - - local loadc,storec = terralib.newlist(),terralib.newlist() - - for m = 0, RM-1 do - for n = 0, RN-1 do - loadc:insert(quote - var [c[m][n]] = alpha * vecload(C,(mm+m)*ldc + nn + n*V) - end) - storec:insert(quote - vecstore(C,(mm+m)*ldc + nn + n*V,[c[m][n]]) - end) - end - end - - local calcc = terralib.newlist() - - for kb = 0, NK/V-1 do - local kbV = kb*V - for m = 0, RM-1 do - calcc:insert(quote - var [a[kb][m]] = vecload(A,(mm+m)*lda + kk + kbV) - end) - end - for v = 0, V-1 do - local k = kbV+v - if not prefetch or (v == 0 and kb == 0) then - for n = 0, RN-1 do - calcc:insert(quote - var [b[k][n]] = vecload(B,(kk + k)*ldb + nn + n*V) - end) - end - end - for m = 0, RM-1 do - for n = 0, RN-1 do - calcc:insert(quote - [c[m][n]] = [c[m][n]] + [a[kb][m]][v] * [b[k][n]] - end) - if prefetch and not (v == V-1 and kb == NK/V-1) and m == RM-1 then --prefetch the next b - calcc:insert(quote - var [b[k+1][n]] = vecload(B,(kk + k + 1)*ldb + nn + n*V) - end) - end - end - end - end - end - - return terra([A] : &double, [B] : &double, [C] : &double, [lda] : int, [ldb] : int, [ldc] : int, [alpha] : double) - for [mm] = 0, NB, RM do - for [nn] = 0, NB,RN*V do - [loadc]; - for [kk] = 0, NB, NK do - [calcc]; - end - [storec]; - end - end - end -end - - - -local NB2 = 8 * NB -local l1matmul = genl1matmul(NB,4, 3, 2, 4) - - - -terra min(a : int, b : int) - return terralib.select(a < b, a, b) -end - -terra my_dgemm(gettime : {} -> double, M : int, N : int, K : int, alpha : double, A : &double, lda : int, B : &double, ldb : int, - beta : double, C : &double, ldc : int) - for mm = 0,M,NB2 do - for nn = 0,N,NB2 do - for kk = 0,K, NB2 do - for m = mm,min(mm+NB2,M),NB do - for n = nn,min(nn+NB2,N),NB do - for k = kk,min(kk+NB2,K),NB do - l1matmul(A + m*lda + k, - B + k*ldb + n, - C + m*ldc + n, - lda,ldb,ldc, terralib.select(k == 0,0,1)) - end - end - end - end - end - end -end - -terralib.saveobj("my_dgemm.o", {my_dgemm = my_dgemm}) \ No newline at end of file diff --git a/samples/Terra/dgemm2.t b/samples/Terra/dgemm2.t deleted file mode 100644 index 55ab3a92..00000000 --- a/samples/Terra/dgemm2.t +++ /dev/null @@ -1,163 +0,0 @@ - -function symmat(name,I,...) - if not I then return symbol(name) end - local r = {} - for i = 0,I-1 do - r[i] = symmat(name..tostring(i),...) - end - return r -end - - -function genkernel(NB, RM, RN, V,alpha) - - local terra vecload(data : &double, idx : int) - var addr = &data[idx] - return @addr:as(&vector(double,V)) - end - local terra vecstore(data : &double, idx : int, v : vector(double,V)) - var addr = &data[idx] - @addr:as(&vector(double,V)) = v - end - - local A,B,C,mm,nn = symbol("A"),symbol("B"),symbol("C"),symbol("mn"),symbol("nn") - local lda,ldb,ldc = NB,NB,NB - local a,b,c,caddr = symmat("a",RM), symmat("b",RN), symmat("c",RM,RN), symmat("caddr",RM,RN) - local k = symbol("k") - - local loadc,storec = terralib.newlist(),terralib.newlist() - local VT = vector(double,V) - local VP = &VT - for m = 0, RM-1 do - for n = 0, RN-1 do - loadc:insert(quote - var [caddr[m][n]] = C + (mm+m)*ldc + nn + n*V - var [c[m][n]] = alpha * @VP([caddr[m][n]]) - end) - storec:insert(quote - @VP([caddr[m][n]]) = [c[m][n]] - end) - end - end - - local calcc = terralib.newlist() - - for n = 0, RN-1 do - calcc:insert(quote - var [b[n]] = @VP(&B[k*ldb + nn + n*V]) - end) - end - for m = 0, RM-1 do - calcc:insert(quote - var [a[m]] = VT(A[(mm+m)*lda + k]) - end) - end - for m = 0, RM-1 do - for n = 0, RN-1 do - calcc:insert(quote - [c[m][n]] = [c[m][n]] + [a[m]] * [b[n]] - end) - end - end - - - return terra([A] : &double, [B] : &double, [C] : &double) - for [mm] = 0, NB, RM do - for [nn] = 0, NB,RN*V do - [loadc]; - for [k] = 0, NB do - [calcc]; - end - [storec]; - end - end - end -end - -local NB = 48 -local NB2 = 8 * NB - -local V = 4 - -l1dgemm0 = genkernel(NB,2,4,V,0) -l1dgemm1 = genkernel(NB,2,4,V,1) - -terra min(a : int, b : int) - return terralib.select(a < b, a, b) -end - -local stdlib = terralib.includec("stdlib.h") -local IO = terralib.includec("stdio.h") -local VP = &vector(double,V) - -terra my_dgemm(gettime : {} -> double, M : int, N : int, K : int, alpha : double, A : &double, lda : int, B : &double, ldb : int, - beta : double, C : &double, ldc : int) - - var AA = [&double](stdlib.malloc(sizeof(double)*M*K)) - var BB = [&double](stdlib.malloc(sizeof(double)*K*N)) - var CC = [&double](stdlib.malloc(sizeof(double)*M*N)) - - var i = 0 - for mm = 0,M,NB do - for kk = 0,K,NB do - for m = mm,mm+NB do - for k = kk,kk+NB,V do - @VP(&AA[i]) = @VP(&A[m*lda + k]) - i = i + V - end - end - end - end - i = 0 - for kk = 0,K,NB do - for nn = 0,N,NB do - for k = kk,kk+NB do - for n = nn,nn+NB,V do - @VP(&BB[i]) = @VP(&B[k*ldb + n]) - i = i + V - end - end - end - end - - for mm = 0,M,NB2 do - for nn = 0,N,NB2 do - for kk = 0,K, NB2 do - for m = mm,min(mm+NB2,M),NB do - for n = nn,min(nn+NB2,N),NB do - for k = kk,min(kk+NB2,K),NB do - --IO.printf("%d %d starting at %d\n",m,k,m*lda + NB*k) - if k == 0 then - l1dgemm0(AA + (m*lda + NB*k), - BB + (k*ldb + NB*n), - CC + (m*ldc + NB*n)) - else - l1dgemm1(AA + (m*lda + NB*k), - BB + (k*ldb + NB*n), - CC + (m*ldc + NB*n)) - end - end - end - end - end - end - end - - i = 0 - for mm = 0,M,NB do - for nn = 0,N,NB do - for m = mm,mm+NB do - for n = nn,nn+NB,V do - @VP(&C[m*ldc + n]) = @VP(&CC[i]) - i = i + V - end - end - end - end - - stdlib.free(AA) - stdlib.free(BB) - stdlib.free(CC) -end - -terralib.saveobj("my_dgemm.o", { my_dgemm = my_dgemm }) \ No newline at end of file diff --git a/samples/Terra/dgemm3.t b/samples/Terra/dgemm3.t deleted file mode 100644 index 29319e84..00000000 --- a/samples/Terra/dgemm3.t +++ /dev/null @@ -1,213 +0,0 @@ - -function symmat(name,I,...) - if not I then return symbol(name) end - local r = {} - for i = 0,I-1 do - r[i] = symmat(name..tostring(i),...) - end - return r -end - - -local function isinteger(x) return math.floor(x) == x end - -llvmprefetch = terralib.intrinsic("llvm.prefetch",{&opaque,int,int,int} -> {}) - -local function alignedload(addr) - return `terralib.attrload(addr, { align = 8 }) -end -local function alignedstore(addr,v) - return `terralib.attrstore(addr,v, { align = 8 }) -end -alignedload,alignedstore = macro(alignedload),macro(alignedstore) -function genkernel(NB, RM, RN, V,alpha,boundary) - - local M,N,K, boundaryargs - if boundary then - M,N,K = symbol(int64,"M"),symbol(int64,"N"),symbol(int64,"K") - boundaryargs = terralib.newlist({M,N,K}) - else - boundaryargs = terralib.newlist() - M,N,K = NB,NB,NB - end - - local A,B,C,mm,nn,ld = symbol("A"),symbol("B"),symbol("C"),symbol("mn"),symbol("nn"),symbol("ld") - local lda,ldb,ldc = symbol("lda"),symbol("ldb"),symbol("ldc") - local a,b,c,caddr = symmat("a",RM), symmat("b",RN), symmat("c",RM,RN), symmat("caddr",RM,RN) - local k = symbol("k") - - local loadc,storec = terralib.newlist(),terralib.newlist() - local VT = vector(double,V) - local VP = &VT - for m = 0, RM-1 do - for n = 0, RN-1 do - loadc:insert(quote - var [caddr[m][n]] = C + m*ldc + n*V - var [c[m][n]] = alpha * alignedload(VP([caddr[m][n]])) - end) - storec:insert(quote - alignedstore(VP([caddr[m][n]]),[c[m][n]]) - end) - end - end - - local calcc = terralib.newlist() - - for n = 0, RN-1 do - calcc:insert(quote - var [b[n]] = alignedload(VP(&B[n*V])) - end) - end - for m = 0, RM-1 do - calcc:insert(quote - var [a[m]] = VT(A[m*lda]) - end) - end - for m = 0, RM-1 do - for n = 0, RN-1 do - calcc:insert(quote - [c[m][n]] = [c[m][n]] + [a[m]] * [b[n]] - end) - end - end - - - local result = terra([A] : &double, [B] : &double, [C] : &double, [lda] : int64,[ldb] : int64,[ldc] : int64,[boundaryargs]) - for [mm] = 0, M, RM do - for [nn] = 0, N,RN*V do - [loadc]; - for [k] = 0, K do - llvmprefetch(B + 4*ldb,0,3,1); - [calcc]; - B = B + ldb - A = A + 1 - end - [storec]; - A = A - K - B = B - ldb*K + RN*V - C = C + RN*V - end - C = C + RM * ldb - N - B = B - N - A = A + lda*RM - end - end - return result -end - - -local stdlib = terralib.includec("stdlib.h") -local IO = terralib.includec("stdio.h") - - -function generatedgemm(NB,NBF,RM,RN,V) - - if not isinteger(NB/(RN*V)) then - return false - end - if not isinteger(NB/RM) then - return false - end - - local NB2 = NBF * NB - local l1dgemm0 = genkernel(NB,RM,RN,V,0,false) - local l1dgemm1 = genkernel(NB,RM,RN,V,1,false) - - - local l1dgemm0b = genkernel(NB,1,1,1,0,true) - local l1dgemm1b = genkernel(NB,1,1,1,1,true) - - local terra min(a : int, b : int) - return terralib.select(a < b, a, b) - end - - return terra(gettime : {} -> double, M : int, N : int, K : int, alpha : double, A : &double, lda : int, B : &double, ldb : int, - beta : double, C : &double, ldc : int) - for mm = 0,M,NB2 do - for nn = 0,N,NB2 do - for kk = 0,K, NB2 do - for m = mm,min(mm+NB2,M),NB do - for n = nn,min(nn+NB2,N),NB do - for k = kk,min(kk+NB2,K),NB do - --IO.printf("%d %d starting at %d\n",m,k,m*lda + NB*k) - var MM,NN,KK = min(M-m,NB),min(N-n,NB),min(K-k,NB) - var isboundary = MM < NB or NN < NB or KK < NB - var AA,BB,CC = A + (m*lda + k),B + (k*ldb + n),C + (m*ldc + n) - if k == 0 then - if isboundary then - --IO.printf("b0 %d %d %d\n",MM,NN,KK) - l1dgemm0b(AA,BB,CC,lda,ldb,ldc,MM,NN,KK) - - --IO.printf("be %d %d %d\n",MM,NN,KK) - else - l1dgemm0(AA,BB,CC,lda,ldb,ldc) - end - else - if isboundary then - - --IO.printf("b %d %d %d\n",MM,NN,KK) - l1dgemm1b(AA,BB,CC,lda,ldb,ldc,MM,NN,KK) - - --IO.printf("be %d %d %d\n",MM,NN,KK) - else - l1dgemm1(AA,BB,CC,lda,ldb,ldc) - end - end - end - end - end - end - end - end - end -end - --- - -local blocksizes = {16,24,32,40,48,56,64} -local regblocks = {1,2,4} -local vectors = {1,2,4,8} - ---local best = { gflops = 0, b = 56, rm = 4, rn = 1, v = 8 } -local best = { gflops = 0, b = 40, rm = 4, rn = 2, v = 4 } - - -if false then - local tunefor = 1024 - local harness = require("lib/matrixtestharness") - for _,b in ipairs(blocksizes) do - for _,rm in ipairs(regblocks) do - for _,rn in ipairs(regblocks) do - for _,v in ipairs(vectors) do - local my_dgemm = generatedgemm(b,5,rm,rn,v) - if my_dgemm then - print(b,rm,rn,v) - my_dgemm:compile() - local i = math.floor(tunefor / b) * b - local avg = 0 - local s, times = harness.timefunctions("double",i,i,i,function(M,K,N,A,B,C) - my_dgemm(nil,M,N,K,1.0,A,K,B,N,0.0,C,N) - end) - if not s then - print("") - break - end - print(i,unpack(times)) - local avg = times[1] - if best.gflops < avg then - best = { gflops = avg, b = b, rm = rm, rn = rn, v = v } - terralib.tree.printraw(best) - end - end - end - end - end - end -end - -terralib.tree.printraw(best) - -local my_dgemm = generatedgemm(best.b, 5, best.rm, best.rn, best.v) - ---my_dgemm:disas() -terralib.saveobj("my_dgemm.o", { my_dgemm = my_dgemm }) \ No newline at end of file diff --git a/samples/Terra/dgemmpaper.t b/samples/Terra/dgemmpaper.t deleted file mode 100644 index e415236c..00000000 --- a/samples/Terra/dgemmpaper.t +++ /dev/null @@ -1,75 +0,0 @@ - -function symmat(name,I,...) - if not I then return symbol(name) end - local r = {} - for i = 0,I-1 do - r[i] = symmat(name..tostring(i),...) - end - return r -end -prefetch = terralib.intrinsic("llvm.prefetch",{&opaque,int,int,int} -> {}) - - -function genkernel(NB, RM, RN, V,alpha) - local A,B,C = symbol("A"),symbol("B"),symbol("C") - local mm,nn = symbol("mn"),symbol("nn") - local lda,ldb,ldc = symbol("lda"),symbol("ldb"),symbol("ldc") - local a,b = symmat("a",RM), symmat("b",RN) - local c,caddr = symmat("c",RM,RN), symmat("caddr",RM,RN) - local k = symbol("k") - local loadc,storec = terralib.newlist(),terralib.newlist() - local VT = vector(double,V) - local VP = &VT - for m = 0, RM-1 do for n = 0, RN-1 do - loadc:insert(quote - var [caddr[m][n]] = C + m*ldc + n*V - var [c[m][n]] = - alpha * @VP([caddr[m][n]]) - end) - storec:insert(quote - @VP([caddr[m][n]]) = [c[m][n]] - end) - end end - local calcc = terralib.newlist() - for n = 0, RN-1 do - calcc:insert(quote - var [b[n]] = @VP(&B[n*V]) - end) - end - for m = 0, RM-1 do - calcc:insert(quote - var [a[m]] = VT(A[m*lda]) - end) - end - for m = 0, RM-1 do for n = 0, RN-1 do - calcc:insert(quote - [c[m][n]] = [c[m][n]] + [a[m]] * [b[n]] - end) - end end - return terra([A] : &double, [B] : &double, [C] : &double, - [lda] : int64,[ldb] : int64,[ldc] : int64) - for [mm] = 0, NB, RM do - for [nn] = 0, NB, RN*V do - [loadc]; - for [k] = 0, NB do - prefetch(B + 4*ldb,0,3,1); - [calcc]; - B,A = B + ldb,A + 1 - end - [storec]; - A,B,C = A - NB,B - ldb*NB + RN*V,C + RN*V - end - A,B,C = A + lda*RM, B - NB, C + RM * ldb - NB - end - end -end - -local a = genkernel(40,4,2,8,1) -a:compile() -a:printpretty() - -terra short_saxpy(a : float, - x : vector(float,4), y : vector(float,4)) - return a*x + y -end -short_saxpy:printpretty() \ No newline at end of file diff --git a/samples/Terra/diffuse.t b/samples/Terra/diffuse.t deleted file mode 100644 index ddf33dbe..00000000 --- a/samples/Terra/diffuse.t +++ /dev/null @@ -1,237 +0,0 @@ - -local C = terralib.includecstring [[ -#include -#include -#ifndef _WIN32 -#include -static double CurrentTimeInSeconds() { - struct timeval tv; - gettimeofday(&tv, NULL); - return tv.tv_sec + tv.tv_usec / 1000000.0; -} -#else -#include -static double CurrentTimeInSeconds() { - return time(NULL); -} -#endif - -int CalcTime(int * times, double * start) { - if(*times == 0) { - *start = CurrentTimeInSeconds(); - } else { - double elapsed = CurrentTimeInSeconds() - *start; - if(elapsed > 0.1f && *times >= 1) { - *start = elapsed / *times; - return 0; - } - } - (*times)++; - return 1; -} -]] - -alignedloads = global(0) -loads = global(0) -NI,NJ = 1,1 -V = 4 -local VP = &vector(float,V) -terra uload(d : &float) - --if d:as(uint64) % 16 == 0 then - -- alignedloads = alignedloads + 1 - --end - --loads = loads + 1 - return terralib.attrload(VP(d),{ align = 4 }) -end -terra ustore(d : &float, v : vector(float,V)) - terralib.attrstore(VP(d),v, { align = 4 }) -end - -terra diffuse_reference(output : &float, N : int, M : int, stride : int, x : &float, x0 : &float, a : float) - var invD = 1.f / (1 + 4.f*a) - var nextline = stride - N - for i = 0, M do - for j = 0,N do - var r = - (x0[0] - + (x[ - stride] - + x[stride] - + x[ - 1] - + x[1] )*a) * invD - output[0] = r - x0 = x0 + 1 - x = x + 1 - output = output + 1 - end - x0 = x0 + nextline --- stride - x = x + nextline --- stride - output = output + nextline --- stride - end - -end - -terra diffuse(output : &float, N : int, M : int, stride : int, x : &float, x0 : &float, a : float) - var invD = 1.f / (1 + 4.f*a) - var nextline = stride - N - for i = 0, M do - - for j = 0,N,V do - var r = - (uload(x0) - + (uload(x - stride) - + uload(x + stride) - + uload(x - 1) - + uload(x + 1) )*a) * invD - --C.printf("%d %d\n",i,j) - --llvmprefetch(x + 4 * stride,0,3,1) - --llvmprefetch(x0 + 3 * stride,0,3,1) - - ustore(output,r) - x0 = x0 + V - x = x + V - output = output + V - end - - x0 = x0 + nextline --- stride - x = x + nextline --- stride - output = output + nextline --- stride - end - -end - -llvmprefetch = terralib.intrinsic("llvm.prefetch",{&uint8,int,int,int} -> {}) - -terra diffuse2(output : &float, N : int, M : int, stride : int, x : &float, x0 : &float, a : float,xi : &float) - var invD = 1.f / (1 + 4.f*a) - var nextline = stride - N - var xi0,xi1,xi2 = xi - stride, xi, xi + stride - var x02 = x0 - for i = 0, M + 1 do - - if i < M then - for j = 0,N,V do - var r = - (uload(x0) - + (uload(x - stride) - + uload(x + stride) - + uload(x - 1) - + uload(x + 1) )*a) * invD - --C.printf("%d %d\n",i,j) - --llvmprefetch(x + 2 * stride,0,3,1) - ustore(xi,r) - x0 = x0 + V - x = x + V - xi = xi + V - end - - x0 = x0 + nextline --- stride - x = x + nextline --- stride - xi = xi + nextline --- stride - if i % 3 == 1 then - xi = xi - stride*3 - end - end - - if i >= 1 then - for j = 0,N,V do - var r = - (uload(x02) - + (uload(xi0) - + uload(xi2) - + uload(xi1 - 1) - + uload(xi1 + 1) )*a) * invD - --C.printf("%d %d\n",i,j) - ustore(output,r) - x02 = x02 + V - xi0 = xi0 + V - xi1 = xi1 + V - xi2 = xi2 + V - output = output + V - end - - x02 = x02 + nextline --- stride - xi0,xi1,xi2 = xi1 - N,xi2 - N, xi0 - N - output = output + nextline --- stride - end - end - -end - - -terra doit(thea : float) - var enlarge = 1 - var N = 1024/8 - var M = 1024*8 - var N1 = (N + 2*enlarge) - var M1 = (M + 2*enlarge) - - var NA = N1 - var x = [&float](C.malloc(NA*M1*sizeof(float))) - var x0 = [&float](C.malloc(NA*M1*sizeof(float))) - - var ro1 = [&float](C.malloc(NA*M1*sizeof(float))) - var ro2 = [&float](C.malloc(NA*M1*sizeof(float))) - - var to1 = [&float](C.malloc(NA*M1*sizeof(float))) - var to2 = [&float](C.malloc(NA*M1*sizeof(float))) - - - for i = 0, N1 do - for j = 0, N1 do - x[i*N1+j] = C.rand() % 10 - x0[i*N1+j] = C.rand() % 10 - ro1[i*N1+j] = -42 - ro2[i*N1+j] = -43 - to1[i*N1+j] = -44 - to2[i*N1+j] = -45 - end - end - var stride = N1 - var start = enlarge*stride + enlarge - - diffuse_reference(ro1 + start,N,M,stride,x + start,x0 + start,thea) - diffuse_reference(ro2 + start,N,M,stride,ro1 + start,x0 + start,thea) - - - - var times = 0 - var mytime : double - - var fuse = true - while C.CalcTime(×,&mytime) ~= 0 do - if not fuse then - diffuse(to1 + start,N,M,stride,x + start,x0 + start,thea) - diffuse(to2 + start,N,M,stride,to1 + start,x0 + start,thea) - else - diffuse2(to2 + start,N,M,stride,x + start,x0 + start,thea,to1 + start) - end - end - - C.printf("times = %d\n",times) - for i = enlarge+1, M1-enlarge-1 do - for j = enlarge+1,N1-enlarge-1 do - if ro2[i*stride+j] ~= to2[i*stride+j] then - C.printf("wrong! %d %d %f %f\n",i,j,ro2[i*stride+j],to2[i*stride+j]) - goto out - else - --C.printf("right! %d %d %f %f\n",i,j,ro1[i*N1+j],to1[i*N1+j]) - end - end - end - ::out:: - var togiga = 1.0/(1024*1024*1024) - var pixels = N*M - C.printf("%f %f %f\n", mytime, 2*pixels*4*3 *togiga / mytime, 2*6*pixels * togiga / mytime) - -end - -terra getloads() - return alignedloads,loads -end - -doit(1) -diffuse:disas() -doit(1) - -local al,loads = terralib.unpackstruct(getloads()) -print(al/loads) \ No newline at end of file diff --git a/samples/Terra/dynlib.t b/samples/Terra/dynlib.t deleted file mode 100644 index 2d67bbab..00000000 --- a/samples/Terra/dynlib.t +++ /dev/null @@ -1,47 +0,0 @@ -local ffi = require 'ffi' --- test that the dynamic library for terra was built correctly --- by compiling a new program that links against it and running it -terralib.includepath = terralib.terrahome.."/include/terra" -C = terralib.includecstring [[ -#include -#include "terra.h" -]] - -local libpath = terralib.terrahome.."/lib" - -terra doerror(L : &C.lua_State) - C.printf("%s\n",C.luaL_checklstring(L,-1,nil)) -end - -local thecode = "terra foo() return 1 end print(foo())" - -terra main(argc : int, argv : &rawstring) - var L = C.luaL_newstate(); - C.luaL_openlibs(L); - if C.terra_init(L) ~= 0 then - doerror(L) - end - if C.terra_loadstring(L,thecode) ~= 0 or C.lua_pcall(L, 0, -1, 0) ~= 0 then - doerror(L) - end - return 0; -end - -if ffi.os ~= "Windows" then - print(libpath) - local flags = terralib.newlist {"-L", libpath,"-Wl,-rpath,"..libpath,"-lterra_dynamic"} - if require("ffi").os == "OSX" then - flags:insertall {"-pagezero_size","10000", "-image_base", "100000000"} - end - - terralib.saveobj("dynlib",{main = main},flags) - - assert(0 == os.execute("./dynlib")) - -else - local putenv = terralib.externfunction("_putenv", rawstring -> int) - local flags = {libpath.."\\terra.lib",libpath.."\\lua51.lib"} - terralib.saveobj("dynlib.exe",{main = main},flags) - putenv("Path="..os.getenv("Path")..";"..terralib.terrahome.."\\bin") --make dll search happy - assert(0 == os.execute(".\\dynlib.exe")) -end \ No newline at end of file diff --git a/samples/Terra/eager.t b/samples/Terra/eager.t deleted file mode 100644 index 7218d811..00000000 --- a/samples/Terra/eager.t +++ /dev/null @@ -1,10 +0,0 @@ - - -local fn = terra() return 0 end - -for i = 1,10 do - fn = terra() return fn() + 1 end -end - -local test = require("test") -test.eq(fn(),10) \ No newline at end of file diff --git a/samples/Terra/emptycalls.t b/samples/Terra/emptycalls.t deleted file mode 100644 index 2c7f8b34..00000000 --- a/samples/Terra/emptycalls.t +++ /dev/null @@ -1,31 +0,0 @@ -terra f(x : {}) - return x -end - - -print(f({})) - -terra f2(x : {}) - return x,x -end - -print(f2({})._0) - -terra f3(x : {}, a : int) - return a + 1 -end - -assert(f3({},3) == 4) - -terra f4(x : {}) - return x,4 -end - -a = f4({}) -assert(a._1 == 4) - -terra f5() - return f({}) -end - -f5() \ No newline at end of file diff --git a/samples/Terra/emptyname.t b/samples/Terra/emptyname.t deleted file mode 100644 index b6f200aa..00000000 --- a/samples/Terra/emptyname.t +++ /dev/null @@ -1,5 +0,0 @@ -struct A {} -A.metamethods.__typename = function() return "" end -struct B {} -B.metamethods.__typename = function() return "" end -print(A:cstring(),B:cstring()) \ No newline at end of file diff --git a/samples/Terra/emptystruct.t b/samples/Terra/emptystruct.t deleted file mode 100644 index 5dc75028..00000000 --- a/samples/Terra/emptystruct.t +++ /dev/null @@ -1,30 +0,0 @@ -terra f(x : {}) - return x -end - -print(f({})) - -terra f2(x : {}) - return x,x -end - -print(f2({})) - -terra f3(x : {}, a : int) - return a + 1 -end - -assert(f3({},3) == 4) - -terra f4(x : {}) - return x,4 -end - -a = f4({}) -assert(a._1 == 4) - -terra f5() - return f({}) -end - -f5() \ No newline at end of file diff --git a/samples/Terra/enumc.t b/samples/Terra/enumc.t deleted file mode 100644 index 575e8c13..00000000 --- a/samples/Terra/enumc.t +++ /dev/null @@ -1,14 +0,0 @@ -C = terralib.includecstring [[ - enum Foo { - A_VALUE = -1, - B_VALUE = 4, - C_VALUE = 2 << 1, - D_VALUE = (1 << 31) - 1, - E_VALUE = (1 << 44) - }; -]] -assert(C.A_VALUE == -1) -assert(C.B_VALUE == 4) -assert(C.C_VALUE == 4) -assert(C.D_VALUE == 2147483647) -assert(C.E_VALUE == -2147483648) \ No newline at end of file diff --git a/samples/Terra/evenodd.t b/samples/Terra/evenodd.t deleted file mode 100644 index f226c17a..00000000 --- a/samples/Terra/evenodd.t +++ /dev/null @@ -1,20 +0,0 @@ -terra iseven(a : uint) : bool - if a == 0 then - return true - else - return isodd(a - 1) - end -end and -terra isodd(a : uint) : bool - if a == 0 then - return false - else - return iseven(a - 1) - end -end - -local test = require("test") -test.eq(iseven(3),false) -test.eq(iseven(2),true) -test.eq(isodd(3),true) -test.eq(isodd(2),false) diff --git a/samples/Terra/examplecompiler1.t b/samples/Terra/examplecompiler1.t deleted file mode 100755 index e98d3dcc..00000000 --- a/samples/Terra/examplecompiler1.t +++ /dev/null @@ -1,41 +0,0 @@ -import "lib/examplecompiler" -foo = {} - - -local def foo2(b : eg.number) : eg.number return 2 + b end - - -assert(foo2(3) == 5) - -def foo.bar(a : eg.number) : eg.number - return 1 + -2 * 3 + 1 + a - foo2(a) -end - -assert(-6 == foo.bar(4)) - -local c = def(c : eg.number) : eg.number return 4 end - -assert(4 == c(1)) - -def sign(a : eg.number) : eg.number - if a < 0 then - return -1 - else - return 1 - end -end - -def usev(a : eg.number) : eg.number - var b = 1 - return a + b -end - -def what(a : eg.number) : eg.number - var c = usev - return c(a) -end - -assert(usev(4) == 5) -assert(sign(4) == 1) -assert(sign(-3) == -1) -assert(what(4) == 5) \ No newline at end of file diff --git a/samples/Terra/examplelanguage1.t b/samples/Terra/examplelanguage1.t deleted file mode 100755 index f9f46373..00000000 --- a/samples/Terra/examplelanguage1.t +++ /dev/null @@ -1,7 +0,0 @@ -import "lib/examplelanguage" - -local a,b = 1,2 -c = 3 -local d = sum a,b,c done - -print(d) \ No newline at end of file diff --git a/samples/Terra/exampleparser1.t b/samples/Terra/exampleparser1.t deleted file mode 100644 index 98882fbb..00000000 --- a/samples/Terra/exampleparser1.t +++ /dev/null @@ -1,22 +0,0 @@ -import "lib.exampleparser" - -P exp -1 + 1 * (2 - 3) -P exp not true or false and 3 -P exp a.b.c[d]()(a,b,c) -P exp (a + 3)(4) -P exp {a,3,4, d = 4, [1+3] = 3} -P exp [ 3 + 4 ] -P statement var a,b,c:int = 3 -P statement do - if a then b else c end - if a then b end - if a then b elseif c then d end - while 3 + 3 do end - repeat - until a + b - for a,b,c:int = 1,3 do end - for a,b,c:int in 1,3 do end - a = b - a - a,c = d,e -end \ No newline at end of file diff --git a/samples/Terra/exittest.t b/samples/Terra/exittest.t deleted file mode 100644 index 0f24e5ce..00000000 --- a/samples/Terra/exittest.t +++ /dev/null @@ -1,9 +0,0 @@ - -C = { exit = terralib.externfunction("exit", int -> {}) } - - -terra moo() - C.exit(0) -end - -moo() \ No newline at end of file diff --git a/samples/Terra/explicitcast.t b/samples/Terra/explicitcast.t deleted file mode 100644 index 15d7aab2..00000000 --- a/samples/Terra/explicitcast.t +++ /dev/null @@ -1,11 +0,0 @@ - -terra foo() - var a : int64 = 256+3 - var c = intptr(&a) - var d = [&int64](c) - var fi = int(true) - var what = @[&int8](&a) - return @d,fi,what -end -local test = require("test") -test.meq({256+3,1,3},foo()) \ No newline at end of file diff --git a/samples/Terra/exportdynamic.t b/samples/Terra/exportdynamic.t deleted file mode 100644 index 3bbd63b3..00000000 --- a/samples/Terra/exportdynamic.t +++ /dev/null @@ -1,9 +0,0 @@ -terralib.includepath = terralib.terrahome.."/include/terra" -C = terralib.includecstring [[ - #include "lua.h" - #include "lauxlib.h" -]] - -local s = C.luaL_newstate() -assert(C.lua_gettop(s) == 0) - diff --git a/samples/Terra/expvec.t b/samples/Terra/expvec.t deleted file mode 100644 index 94154777..00000000 --- a/samples/Terra/expvec.t +++ /dev/null @@ -1,34 +0,0 @@ - -if require("ffi").os == "Windows" then - print("Not consistent on windows") - return -end -local C = terralib.includecstring[[ - #include - void dostuff(__m128 what) {} - void dostuff2() { __m128 a; dostuff(a); } -]] - -local V = 1 -local exp = terralib.intrinsic(("llvm.exp.v%df32"):format(V),vector(float,V) -> vector(float,V)) - -terra foo(N : int) - - var d = vector(0.f,1.f,3.f,4.f) - - C.dostuff(d) - - --var v = vector(0.f,1.f,2.f,3.f,4.f,5.f,6.f,7.f) - var v = vector(0.f) - for i = 0, N do - v = exp(v) - end - return v[0],v[1],v[2],v[3] -end - -C.dostuff:printpretty() - -local begin = terralib.currenttimeinseconds() -print(foo(100000000)) -local endd = terralib.currenttimeinseconds() -print(endd - begin) \ No newline at end of file diff --git a/samples/Terra/f2.t b/samples/Terra/f2.t deleted file mode 100644 index a7507f08..00000000 --- a/samples/Terra/f2.t +++ /dev/null @@ -1,17 +0,0 @@ -local C = terralib.includecstring [[ - typedef struct { - int a; - int b; - } Foo; -]] -for i,e in ipairs(C.Foo.entries) do - print(e.field,e.type) -end - -terra useFoo() - var f : C.Foo - f.a = 1 - f.b = 2 -end - -useFoo() \ No newline at end of file diff --git a/samples/Terra/fact.t b/samples/Terra/fact.t deleted file mode 100644 index 284bb512..00000000 --- a/samples/Terra/fact.t +++ /dev/null @@ -1,16 +0,0 @@ -local test = require("test") - -local Num = int -local terra fact(a : Num) : Num - var c,i = 1,1 - while i <= a do - c = c * i - i = i + 1 - end - return c -end - - -test.eq(fact(1),1) -test.eq(fact(2),2) -test.eq(fact(3),6) \ No newline at end of file diff --git a/samples/Terra/fakeasm.t b/samples/Terra/fakeasm.t deleted file mode 100644 index 09998825..00000000 --- a/samples/Terra/fakeasm.t +++ /dev/null @@ -1,31 +0,0 @@ - - -local op = setmetatable({},{ __index = function(self,idx) - return idx -end }) -C = terralib.includec("stdio.h") -local function emit(buf,...) - local str = "" - local operands = {} - for i = 1,select("#",...) do - local v = select(i,...) - local cv,e = v:asvalue() - str = str .. (e and "%d" or tostring(cv)) .. " " - if e then table.insert(operands,v) end - end - str = str.."\n" - return `C.sprintf(buf,str,operands) -end -emit = macro(emit) - -local c = "as28" -terra what(buf : rawstring) - var b = 3 - emit(buf,1,3,4,3+3,op.what,b + 3) -end - -local buf = terralib.new(int8[128]) -what(buf) -local ffi = require("ffi") -local s = ffi.string(buf) -assert("1 3 4 6 what 6 \n" == s) diff --git a/samples/Terra/falsespec.t b/samples/Terra/falsespec.t deleted file mode 100644 index 970a9695..00000000 --- a/samples/Terra/falsespec.t +++ /dev/null @@ -1,8 +0,0 @@ - - -terra derp() - var a = [false] - return a -end - -assert(derp() == false) \ No newline at end of file diff --git a/samples/Terra/fastcall.t b/samples/Terra/fastcall.t deleted file mode 100644 index 1cef49bb..00000000 --- a/samples/Terra/fastcall.t +++ /dev/null @@ -1,24 +0,0 @@ - -terra foo() - return 1 -end - - -assert(1 == foo()) -assert(rawget(foo,"fastcall") == foo:getdefinitions()[1].ffiwrapper) -assert(1 == foo()) - - -terra foo2() - return 1,2 -end -local a,b = terralib.unpackstruct(foo2()) -assert(a == 1 and b == 2) -assert(rawget(foo2,"fastcall") == foo2:getpointer()) -local a,b = unpackstruct(foo2()) -assert(a == 1 and b == 2) - -terra foo(a : int) -end - -assert(rawget(foo,"fastcall") == nil) \ No newline at end of file diff --git a/samples/Terra/fib.t b/samples/Terra/fib.t deleted file mode 100644 index c2fb5fe2..00000000 --- a/samples/Terra/fib.t +++ /dev/null @@ -1,26 +0,0 @@ -local test = require("test") - -local Num = int - -local base = {} -terra base.fib(a : Num) : Num - var i,c,p = 0,1,1 - while i < a do - c,p = c + p,c - i = i + 1 - end - return c -end - -function fib2(a) - local i,c,p = 0,1,1 - while i < a do - c,p = c + p,c - i = i + 1 - end - return c -end -for i = 0,10 do - print(base.fib(i)) - test.eq(base.fib(i),fib2(i)) -end \ No newline at end of file diff --git a/samples/Terra/fib2.t b/samples/Terra/fib2.t deleted file mode 100644 index 29d8127e..00000000 --- a/samples/Terra/fib2.t +++ /dev/null @@ -1,27 +0,0 @@ -local test = require("test") - -local Num = int - -terra fib(a : Num) : Num - if a == 0 then - return 1 - elseif a == 1 then - return 1 - else - return fib(a - 1) + fib(a - 2) - end -end - -function fib2(a) - if a == 0 then - return 1 - elseif a == 1 then - return 1 - else - return fib2(a - 1) + fib2(a - 2) - end -end -for i = 0,10 do - print(fib(i)) - test.eq(fib(i),fib2(i)) -end diff --git a/samples/Terra/fnames.t b/samples/Terra/fnames.t deleted file mode 100644 index befb5e4d..00000000 --- a/samples/Terra/fnames.t +++ /dev/null @@ -1,5 +0,0 @@ -foo = terra(a : int) end -foo:setname("bar") - -assert(foo:getname() == "bar") -foo:disas() \ No newline at end of file diff --git a/samples/Terra/fncalltest.t b/samples/Terra/fncalltest.t deleted file mode 100644 index dcf18907..00000000 --- a/samples/Terra/fncalltest.t +++ /dev/null @@ -1,16 +0,0 @@ - - - -terra foo() - -end - - -terra bar() - foo() - var what = foo - --what() -end - -bar:compile() - diff --git a/samples/Terra/fnpointer.t b/samples/Terra/fnpointer.t deleted file mode 100644 index 042af355..00000000 --- a/samples/Terra/fnpointer.t +++ /dev/null @@ -1,24 +0,0 @@ - -terra foo() - return 4LL -end - -terra bar() - return 5LL -end - -terra bar3(fn: {} -> int64) - return fn() -end - -terra baz(a : int64) - var afn = foo - if a > 2 then - afn = bar - end - return bar3(afn) -end - -local test = require("test") -test.eq(baz(1),4) -test.eq(baz(3),5) \ No newline at end of file diff --git a/samples/Terra/fnptr.t b/samples/Terra/fnptr.t deleted file mode 100644 index baaad41a..00000000 --- a/samples/Terra/fnptr.t +++ /dev/null @@ -1,7 +0,0 @@ -terra baz() return 1 end -bp = baz:getpointer() -terra foo() - return bp() -end - -assert(foo() == 1) \ No newline at end of file diff --git a/samples/Terra/fnptrc.t b/samples/Terra/fnptrc.t deleted file mode 100644 index 935c3341..00000000 --- a/samples/Terra/fnptrc.t +++ /dev/null @@ -1,25 +0,0 @@ - -C = terralib.includecstring [[ - struct Foo { - int (*bar)(int); - }; - int runptr(int (*bar)(int), int a) { - return bar(a); - } -]] - -terra add1(a : int) return a + 1 end - -terra what0() - return C.runptr(add1,1) -end - -assert(what0() == 2) - -terra what() - var c : C.Foo - c.bar = add1 - return c.bar(1) -end - -assert(what() == 2) \ No newline at end of file diff --git a/samples/Terra/foo.t b/samples/Terra/foo.t deleted file mode 100644 index 0aa5252f..00000000 --- a/samples/Terra/foo.t +++ /dev/null @@ -1 +0,0 @@ -a = global( struct { real : float, imag : float }) \ No newline at end of file diff --git a/samples/Terra/for.t b/samples/Terra/for.t deleted file mode 100644 index 41e4d893..00000000 --- a/samples/Terra/for.t +++ /dev/null @@ -1,31 +0,0 @@ - -terra foo(a : int, s : int) - var r = 0 - for i = 0,a,s do - r = r + i - end - return r -end - -terra foo2(a : int) - var r = 0 - for i = 0,a do - r = r + i - end - return r -end - -terra foo3(a : int) - var r = 0 - for i = a,0,-1 do - r = r + i - end - return r -end - -local test = require("test") -test.eq(foo(10,1),45) -test.eq(foo(10,2),20) -test.eq(foo(0,1),0) -test.eq(foo2(10),45) -test.eq(foo3(10),55) \ No newline at end of file diff --git a/samples/Terra/for2.t b/samples/Terra/for2.t deleted file mode 100644 index 3bd8f374..00000000 --- a/samples/Terra/for2.t +++ /dev/null @@ -1,31 +0,0 @@ - -terra foo(a : uint64, s : uint64) - var r = 0 - for i : uint64 = 0,a,s do - r = r + i - end - return r -end - -terra foo2(a : int) - var r = 0 - for i : int = 0.f,a do - r = r + i - end - return r -end -terra foo3(a : int) - var r = 0 - for i = a,0,-1 do - r = r + i - end - return r -end - - -local test = require("test") -test.eq(foo(10,1),45) -test.eq(foo(10,2),20) -test.eq(foo(0,1),0) -test.eq(foo2(10),45) -test.eq(foo3(10),55) diff --git a/samples/Terra/forbreak.t b/samples/Terra/forbreak.t deleted file mode 100644 index d14b056f..00000000 --- a/samples/Terra/forbreak.t +++ /dev/null @@ -1,17 +0,0 @@ - -terra foo(a : int, s : int) - var r = 0 - for i = 0,a,s do - if i == 8 then - break - end - r = r + i - - end - return r -end - -local test = require("test") -test.eq(foo(10,1),28) -test.eq(foo(10,2),12) -test.eq(foo(0,1),0) \ No newline at end of file diff --git a/samples/Terra/forlist.t b/samples/Terra/forlist.t deleted file mode 100644 index da427475..00000000 --- a/samples/Terra/forlist.t +++ /dev/null @@ -1,24 +0,0 @@ - - -struct Range { - a : int; - b : int; -} -Range.metamethods.__for = function(syms,iter,body) - return syms, quote - var it = iter - for [syms[1]] = it.a,it.b do - body - end - end -end - -terra foo() - var a = 0 - for i in Range {0,10} do - a = a + i - end - return a -end - -assert(foo() == 10*9/2) \ No newline at end of file diff --git a/samples/Terra/forlist2.t b/samples/Terra/forlist2.t deleted file mode 100644 index a09b6d73..00000000 --- a/samples/Terra/forlist2.t +++ /dev/null @@ -1,37 +0,0 @@ - - -struct Array { - data : int[3]; -} -Array.metamethods.__for = function(syms,iter,body) - local pe = symbol() - local e = `@pe - return {e}, quote - var it = &iter - for i = 0,3 do - var [pe] = &it.data[i] - body - end - end -end - -terra foo() - var a = Array{ array(1,2,3) } - for i in a do - i = i + 1 - end - return a.data[0] + a.data[1] + a.data[2] -end - -terra foo2() - var a = Array{ array(1,2,3) } - var s = 0 - for i : double in a do - s = s + i - end - return s -end - -assert(foo() == 9) - -assert(foo2() == 6) \ No newline at end of file diff --git a/samples/Terra/forp.t b/samples/Terra/forp.t deleted file mode 100644 index 2db2c3e9..00000000 --- a/samples/Terra/forp.t +++ /dev/null @@ -1,21 +0,0 @@ -struct Range { - a : int; - b : int; -} -Range.metamethods.__for = function(syms,iter,body) - return syms, quote - var it = iter - for [syms[1]] = it.a,it.b do - body - end - end -end - -terra foo() - var v = Range { 0, 3 } - var vp = &v - var i = 0 - for e in vp do i = i + e end - return i -end -assert(3 == foo()) \ No newline at end of file diff --git a/samples/Terra/forsym.t b/samples/Terra/forsym.t deleted file mode 100644 index 10857a48..00000000 --- a/samples/Terra/forsym.t +++ /dev/null @@ -1,24 +0,0 @@ - -terra foo(a : int, s : int) - var r = 0 - for i = 0,a,s do - r = r + i - end - return r -end - -local i = symbol() - -terra foo2(a : int) - var r = 0 - for [i] = 0,a do - r = r + [i] - end - return r -end - -local test = require("test") -test.eq(foo(10,1),45) -test.eq(foo(10,2),20) -test.eq(foo(0,1),0) -test.eq(foo2(10),45) \ No newline at end of file diff --git a/samples/Terra/forwardtodef.t b/samples/Terra/forwardtodef.t deleted file mode 100644 index 228ad86a..00000000 --- a/samples/Terra/forwardtodef.t +++ /dev/null @@ -1,7 +0,0 @@ - - -terra foo() - return 1 -end -foo:setinlined(true) -foo:disas() \ No newline at end of file diff --git a/samples/Terra/functionnoproto.t b/samples/Terra/functionnoproto.t deleted file mode 100644 index 1ce9bad8..00000000 --- a/samples/Terra/functionnoproto.t +++ /dev/null @@ -1,6 +0,0 @@ -C = terralib.includecstring [[ - typedef int (*PROC)(); - PROC what() { return 0; } -]] - -assert(C.what() == nil) \ No newline at end of file diff --git a/samples/Terra/gctest.t b/samples/Terra/gctest.t deleted file mode 100644 index 12342798..00000000 --- a/samples/Terra/gctest.t +++ /dev/null @@ -1,18 +0,0 @@ - - - - -local terra foo() -end - -local terra bar() -end - -foo:compile() -bar:compile() -foo = nil - -collectgarbage() -collectgarbage() - -print("HERE") \ No newline at end of file diff --git a/samples/Terra/gemm.t b/samples/Terra/gemm.t deleted file mode 100644 index 5993ae22..00000000 --- a/samples/Terra/gemm.t +++ /dev/null @@ -1,207 +0,0 @@ -local number = double -local alignment = 8 -local dotune = false - -function symmat(name,I,...) - if not I then return symbol(name) end - local r = {} - for i = 0,I-1 do - r[i] = symmat(name..tostring(i),...) - end - return r -end - -local function isinteger(x) return math.floor(x) == x end - -llvmprefetch = terralib.intrinsic("llvm.prefetch",{&opaque,int,int,int} -> {}) -local function unalignedload(addr) - return `terralib.attrload(addr, { align = alignment }) -end -local function unalignedstore(addr,v) - return `terralib.attrstore(addr,v, { align = alignment }) -end - -unalignedload,unalignedstore = macro(unalignedload),macro(unalignedstore) - -function genkernel(NB, RM, RN, V,alpha,boundary) - - local M,N,K, boundaryargs - if boundary then - M,N,K = symbol(int64,"M"),symbol(int64,"N"),symbol(int64,"K") - boundaryargs = terralib.newlist({M,N,K}) - else - boundaryargs = terralib.newlist() - M,N,K = NB,NB,NB - end - - local A,B,C,mm,nn,ld = symbol("A"),symbol("B"),symbol("C"),symbol("mn"),symbol("nn"),symbol("ld") - local lda,ldb,ldc = symbol("lda"),symbol("ldb"),symbol("ldc") - local a,b,c,caddr = symmat("a",RM), symmat("b",RN), symmat("c",RM,RN), symmat("caddr",RM,RN) - local k = symbol("k") - - local loadc,storec = terralib.newlist(),terralib.newlist() - local VT = vector(number,V) - local VP = &VT - for m = 0, RM-1 do - for n = 0, RN-1 do - loadc:insert(quote - var [caddr[m][n]] = C + m*ldc + n*V - var [c[m][n]] = alpha * unalignedload(VP([caddr[m][n]])) - end) - storec:insert(quote - unalignedstore(VP([caddr[m][n]]),[c[m][n]]) - end) - end - end - - local calcc = terralib.newlist() - - for n = 0, RN-1 do - calcc:insert(quote - var [b[n]] = unalignedload(VP(&B[n*V])) - end) - end - for m = 0, RM-1 do - calcc:insert(quote - var [a[m]] = VT(A[m*lda]) - end) - end - for m = 0, RM-1 do - for n = 0, RN-1 do - calcc:insert(quote - [c[m][n]] = [c[m][n]] + [a[m]] * [b[n]] - end) - end - end - - local result = terra([A] : &number, [B] : &number, [C] : &number, [lda] : int64,[ldb] : int64,[ldc] : int64,[boundaryargs]) - for [mm] = 0, M, RM do - for [nn] = 0, N,RN*V do - [loadc]; - for [k] = 0, K do - llvmprefetch(B + 4*ldb,0,3,1); - [calcc]; - B = B + ldb - A = A + 1 - end - [storec]; - A = A - K - B = B - ldb*K + RN*V - C = C + RN*V - end - C = C + RM * ldb - N - B = B - N - A = A + lda*RM - end - end - return result -end - -local stdlib = terralib.includec("stdlib.h") -local IO = terralib.includec("stdio.h") - -local terra min(a : int, b : int) - return terralib.select(a < b, a, b) -end -function blockedloop(N,M,K,blocksizes,bodyfn) - local function generatelevel(n,ii,jj,kk,bb0,bb1,bb2) - if n > #blocksizes then - return bodyfn(ii,jj,kk) - end - local blocksize = blocksizes[n] - return quote for i = ii,min(ii+bb0,N),blocksize do - for j = jj,min(jj+bb1,M),blocksize do - for k = kk,min(kk+bb2,K),blocksize do - [ generatelevel(n+1,i,j,k,blocksize,blocksize,blocksize) ] - end end end end - end - return generatelevel(1,0,0,0,N,M,K) -end - -function generatedgemm(NB,NBF,RM,RN,V) - if not isinteger(NB/(RN*V)) or not isinteger(NB/RM) then - return false - end - - local NB2 = NBF * NB - local l1dgemm0 = genkernel(NB,RM,RN,V,0,false) - local l1dgemm1 = genkernel(NB,RM,RN,V,1,false) - local l1dgemm0b = genkernel(NB,1,1,1,0,true) - local l1dgemm1b = genkernel(NB,1,1,1,1,true) - - return terra(gettime : {} -> double, M : int, N : int, K : int, alpha : number, A : &number, lda : int, B : &number, ldb : int, - beta : number, C : &number, ldc : int) - [ blockedloop(N,M,K,{NB2,NB},function(m,n,k) return quote - var MM,NN,KK = min(M-m,NB),min(N-n,NB),min(K-k,NB) - var isboundary = MM < NB or NN < NB or KK < NB - var AA,BB,CC = A + (m*lda + k),B + (k*ldb + n),C + (m*ldc + n) - if k == 0 then - if isboundary then - --IO.printf("b0 %d %d %d\n",MM,NN,KK) - l1dgemm0b(AA,BB,CC,lda,ldb,ldc,MM,NN,KK) - - --IO.printf("be %d %d %d\n",MM,NN,KK) - else - l1dgemm0(AA,BB,CC,lda,ldb,ldc) - end - else - if isboundary then - - --IO.printf("b %d %d %d\n",MM,NN,KK) - l1dgemm1b(AA,BB,CC,lda,ldb,ldc,MM,NN,KK) - - --IO.printf("be %d %d %d\n",MM,NN,KK) - else - l1dgemm1(AA,BB,CC,lda,ldb,ldc) - end - end - end end) ] - end -end - -local blocksizes = {16,24,32,40,48,56,64} -local regblocks = {1,2,4} -local vectors = {1,2,4,8,16} ---local best = { gflops = 0, b = 56, rm = 4, rn = 1, v = 8 } -local best = { gflops = 0, b = 40, rm = 4, rn = 2, v = 4 } ---local best = { gflops = 0, b = 40, rm = 1, rn = 1, v = 1 } - -if dotune then - local tunefor = 1024 - local harness = require("lib/matrixtestharness") - for _,b in ipairs(blocksizes) do - for _,rm in ipairs(regblocks) do - for _,rn in ipairs(regblocks) do - for _,v in ipairs(vectors) do - local my_dgemm = generatedgemm(b,5,rm,rn,v) - if my_dgemm then - print(b,rm,rn,v) - my_dgemm:compile() - local i = math.floor(tunefor / b) * b - local avg = 0 - local ctyp - local s, times = harness.timefunctions(tostring(number),i,i,i,function(M,K,N,A,B,C) - my_dgemm(nil,M,N,K,1.0,A,K,B,N,0.0,C,N) - end) - if not s then - print("") - break - end - print(i,unpack(times)) - local avg = times[1] - if best.gflops < avg then - best = { gflops = avg, b = b, rm = rm, rn = rn, v = v } - terralib.tree.printraw(best) - end - end - end - end - end - end -end -local my_dgemm = generatedgemm(best.b, 5, best.rm, best.rn, best.v) -if number == double then - terralib.saveobj("my_dgemm.o", { my_dgemm = my_dgemm }) -else - terralib.saveobj("my_sgemm.o", { my_sgemm = my_dgemm }) -end \ No newline at end of file diff --git a/samples/Terra/getmethod.t b/samples/Terra/getmethod.t deleted file mode 100644 index 5d93531a..00000000 --- a/samples/Terra/getmethod.t +++ /dev/null @@ -1,19 +0,0 @@ - - -struct A {} - - -A.metamethods.__getmethod = function(self,methodname) - local c = methodname:sub(1,1):byte() - return terra(a : &A) - return c - end -end - - -terra foo() - var a : A - return a:a() + a:b() -end - -assert(foo() == ("a"):byte() + ("b"):byte()) \ No newline at end of file diff --git a/samples/Terra/gettype.t b/samples/Terra/gettype.t deleted file mode 100644 index dacd2b39..00000000 --- a/samples/Terra/gettype.t +++ /dev/null @@ -1,18 +0,0 @@ - - - -function makestuff(a) - local T = a:gettype() - local struct ST { - a : T - } - return `ST { a } -end - -makestuff = macro(makestuff) - -terra useit() - return makestuff(true).a,makestuff(3.0).a -end -local test = require("test") -test.meq({true,3},useit()) \ No newline at end of file diff --git a/samples/Terra/globals.t b/samples/Terra/globals.t deleted file mode 100644 index 9dc6d6ba..00000000 --- a/samples/Terra/globals.t +++ /dev/null @@ -1,26 +0,0 @@ - -struct A { a : int } -local a = terralib.global(A) -a:set({3}) -local b = terralib.global(true) -local c = terralib.global(int[3]) -local d = terralib.global(3.5) - -terra foobar() - c[0] = 3 - return a.a + d -end - -e = global(int) -terra doihaveaname() - e = 10 - return e -end - -assert(doihaveaname() == 10) -assert(6.5 == foobar()) -print("HERE") -assert(true == b:get()) -assert(3 == c:get()[0]) - -print("TODO - fix handling of initializers for array-like things and literal strings") \ No newline at end of file diff --git a/samples/Terra/goto.t b/samples/Terra/goto.t deleted file mode 100644 index 241adf0c..00000000 --- a/samples/Terra/goto.t +++ /dev/null @@ -1,16 +0,0 @@ - - -terra foo() - var a = 0 - ::begin:: - if a >= 10 then - goto theend - end - a = a + 1 - goto begin - ::theend:: - return a -end - -test = require("test") -test.eq(foo(),10) \ No newline at end of file diff --git a/samples/Terra/goto2.t b/samples/Terra/goto2.t deleted file mode 100644 index f8f430da..00000000 --- a/samples/Terra/goto2.t +++ /dev/null @@ -1,18 +0,0 @@ - -local begin = symbol() -local theend = symbol() - -terra foo() - var a = 0 - ::[begin]:: - if a >= 10 then - goto [theend] - end - a = a + 1 - goto [begin] - ::[theend]:: - return a -end - -test = require("test") -test.eq(foo(),10) \ No newline at end of file diff --git a/samples/Terra/gvarfault.t b/samples/Terra/gvarfault.t deleted file mode 100644 index 6702563b..00000000 --- a/samples/Terra/gvarfault.t +++ /dev/null @@ -1,24 +0,0 @@ -if require("ffi").os == "Windows" then - print("Disabled on windows (uses unistd.h)") - return -end -local C = terralib.includecstring( -[[ -#include -#include -#include -#include -#include -]] -) - -local gstr = global(&int8, "some text") - -terra fun1() - C.printf("gstr: %s \n", gstr) - return 0 -end - -fun1:printpretty() - -fun1() \ No newline at end of file diff --git a/samples/Terra/hasbeenfrozen.t b/samples/Terra/hasbeenfrozen.t deleted file mode 100644 index c1c40866..00000000 --- a/samples/Terra/hasbeenfrozen.t +++ /dev/null @@ -1,33 +0,0 @@ -struct A { - a : int; - b : int; - c : &B -} and struct B { - a : &A -} - -local a = global(A) - - -terra foo() - var b : B - return a.a + a.b -end - -function A.metamethods.__staticinitialize(self) - print("A") - assert(A:iscomplete()) - a:get().a = 4 -end - -function B.metamethods.__staticinitialize(self) - print("B") - assert(B:iscomplete()) - a:get().b = 3 - foo:gettype(function() - assert(foo() == 7) - a:get().a = a:get().a + 1 - end) -end - -assert(foo() == 8) \ No newline at end of file diff --git a/samples/Terra/hello.t b/samples/Terra/hello.t deleted file mode 100644 index 81af8917..00000000 --- a/samples/Terra/hello.t +++ /dev/null @@ -1,8 +0,0 @@ -local c = terralib.includec("stdio.h") - -terra hello() - c.printf("hello, world\n") -end - -terralib.saveobj("hello",{main = hello}) -hello() diff --git a/samples/Terra/hello2.t b/samples/Terra/hello2.t deleted file mode 100644 index 638b5e15..00000000 --- a/samples/Terra/hello2.t +++ /dev/null @@ -1,10 +0,0 @@ - -local c = terralib.includec("stdio.h") - -terralib.tree.printraw(getmetatable(c).errors) - -terra main() - c.printf("hello, world\n") -end - -main() \ No newline at end of file diff --git a/samples/Terra/hexf.t b/samples/Terra/hexf.t deleted file mode 100644 index 6b767b49..00000000 --- a/samples/Terra/hexf.t +++ /dev/null @@ -1,9 +0,0 @@ - - -assert(0xf == 15) - -terra foo() - return 0xf -end - -assert(foo() == 15) \ No newline at end of file diff --git a/samples/Terra/huge.t b/samples/Terra/huge.t deleted file mode 100644 index e52733db..00000000 --- a/samples/Terra/huge.t +++ /dev/null @@ -1,7 +0,0 @@ - - -terra returnhuge() - return math.huge -end - -assert(returnhuge() == math.huge) \ No newline at end of file diff --git a/samples/Terra/ifelse.t b/samples/Terra/ifelse.t deleted file mode 100644 index 2f3d83a0..00000000 --- a/samples/Terra/ifelse.t +++ /dev/null @@ -1,17 +0,0 @@ - -terra foo(a : int) - return terralib.select(a > 0, 1,-1) -end - - -terra foo2(a : int) - var c = vector(a > 0, a > 1, a > 2) - var d = terralib.select(c,vector(1,2,3),vector(4,5,6)) - return d[0], d[1], d[2] -end -local test = require("test") - -test.eq(foo(1),1) -test.eq(foo(-1),-1) - -test.meq({1,5,6},foo2(1)) \ No newline at end of file diff --git a/samples/Terra/includec.t b/samples/Terra/includec.t deleted file mode 100644 index 3ebb9f4d..00000000 --- a/samples/Terra/includec.t +++ /dev/null @@ -1,42 +0,0 @@ - -local c = terralib.includec("mytest.h") - -terra foo() - var a : int = 3 - return c.myfoobarthing(1,2,3.5,&a) + a -end - -terra bar() - return c.myotherthing(4,5) -end - -terra bar2() - return c.myfnptr(bar) -end - -terra bar3() - var a : c.size_t = 3 - return a -end - -terra bar4() - var opaquething : c.MyStruct2 - var my = c.MyStruct { 3, 4} - return my.a + my.b -end - -terra writefile() - c.printf("%f %f %f\n",3.0,4.0,5.0) - var f = c.fopen("afile.txt","w") - c.fputs("a string\n",f) - c.fclose(f) -end - -local test = require("test") - -test.eq(foo(),15) -test.eq(c.myotherthing(1,2),3) -test.eq(bar2(),9) -test.eq(bar3(),3) -test.eq(bar4(),7) -writefile() diff --git a/samples/Terra/includetwice.t b/samples/Terra/includetwice.t deleted file mode 100644 index eeba70d4..00000000 --- a/samples/Terra/includetwice.t +++ /dev/null @@ -1,21 +0,0 @@ - - -local C1 = terralib.includecstring [[ - typedef struct { int a; } A; - int geta(A* a) { return a->a; } -]] -local C2 = terralib.includecstring [[ - typedef struct { int a; } A; - void seta(A* a, int v) { a->a = v; } -]] - -assert(C1.A == C2.A) - - -terra usethem() - var a = C1.A { 1 } - C2.seta(&a,C1.geta(&a) + 3) - return a.a -end - -assert(usethem() == 4) \ No newline at end of file diff --git a/samples/Terra/incomplete.t b/samples/Terra/incomplete.t deleted file mode 100644 index 8b1d4662..00000000 --- a/samples/Terra/incomplete.t +++ /dev/null @@ -1,32 +0,0 @@ - - -struct A - -terra foo(a : &A) - return a -end - -assert(nil == foo(nil)) -assert(false == A:iscomplete()) - - -struct A { - b : int -} - -terra foo2(a : &A) - a.b = 6 - return @a -end - -foo2:compile() -assert(true == A:iscomplete()) - -local ptr = terralib.new(A) - -ptr.b = 4 - -local r = foo2(ptr) - -assert(r.b == 6) -assert(ptr.b == 6) \ No newline at end of file diff --git a/samples/Terra/incomplete2.t b/samples/Terra/incomplete2.t deleted file mode 100644 index 17223680..00000000 --- a/samples/Terra/incomplete2.t +++ /dev/null @@ -1,25 +0,0 @@ - -struct A { - b : &B -} and -struct B - - -terra foo() - var a : A - a.b = nil - return a -end - -local a = foo() - - -struct B { - a : int -} - -terra foo2(a : &A) - a.b = a.b + 1 -end - -foo2(a) diff --git a/samples/Terra/incomplete3.t b/samples/Terra/incomplete3.t deleted file mode 100644 index c23bb9be..00000000 --- a/samples/Terra/incomplete3.t +++ /dev/null @@ -1,29 +0,0 @@ - -struct A { - b : B -> C -} and -struct B and struct C - - -terra foo() - var a : A - a.b = nil - return a -end - -local a = foo() - - -struct B { - a : int -} -struct C { - b : int -} - -terra foo2(a : &A) - var ptrb : &B - var c = a.b(@ptrb) -end - -foo2:compile() \ No newline at end of file diff --git a/samples/Terra/incomplete4.t b/samples/Terra/incomplete4.t deleted file mode 100644 index 765eadc1..00000000 --- a/samples/Terra/incomplete4.t +++ /dev/null @@ -1,22 +0,0 @@ - - -struct A - -terra foo(a : &A) - return a -end - -assert(nil == foo(nil)) -assert(false == A:iscomplete()) - - -struct A { - b : int -} - -terra foo2(a : &A) - return a.b -end - -foo2:compile() -assert(true == A:iscomplete()) diff --git a/samples/Terra/incomplete5.t b/samples/Terra/incomplete5.t deleted file mode 100644 index 444b451e..00000000 --- a/samples/Terra/incomplete5.t +++ /dev/null @@ -1,65 +0,0 @@ - - - ---terra things that should complete the type -local ct = {} - ---terra things that should not complete the type -local dct = {} - - - -function ct.a(A) - return terra(a : A) return a end -end - -function ct.b(A) - return terra() var a : A end -end - -function ct.c(A) - return terra(a : &A) return a + 1 end -end -function ct.d(A) - local at = A[3] - return terra(a : A[3]) return a[0] end -end -function ct.e(A) - local struct B { a : A } - return terra(a : B) end -end - -function dct.c(A) - local at = A[3] - return terra(a : &A[3]) return a end -end - -function dct.b(A) - return terra(a : &A) return a end -end - -function dct.d(A) - local struct B { - a : &A; - b : int - } - return terra(a : &B) return a.b end -end - - -local function testthem(stuff,completestype) - for k,v in pairs(stuff) do - local struct A - if completestype then - struct A { - a : int - } - end - local result = v(A) - result:compile() - assert(A:iscomplete() == completestype) - end -end - -testthem(ct,true) -testthem(dct,false) \ No newline at end of file diff --git a/samples/Terra/incompletetypetest.t b/samples/Terra/incompletetypetest.t deleted file mode 100644 index e35cfd90..00000000 --- a/samples/Terra/incompletetypetest.t +++ /dev/null @@ -1,13 +0,0 @@ - - -struct A { - a : int -} - - -terra what() - var a : &A = nil - return &a[4] -end - -what:compile() \ No newline at end of file diff --git a/samples/Terra/incompletetypetest2.t b/samples/Terra/incompletetypetest2.t deleted file mode 100644 index 9f48c53e..00000000 --- a/samples/Terra/incompletetypetest2.t +++ /dev/null @@ -1,13 +0,0 @@ - - -struct A { - a : int -} - - -terra what() - var a : &A = nil - return a + 4 -end - -what:compile() \ No newline at end of file diff --git a/samples/Terra/incompletetypetest3.t b/samples/Terra/incompletetypetest3.t deleted file mode 100644 index bae8aa2f..00000000 --- a/samples/Terra/incompletetypetest3.t +++ /dev/null @@ -1,13 +0,0 @@ - - -struct A { - a : int -} - - -terra what() - var a : &A = nil - return a - a -end - -what:compile() \ No newline at end of file diff --git a/samples/Terra/indexing64.t b/samples/Terra/indexing64.t deleted file mode 100644 index 4c87ff73..00000000 --- a/samples/Terra/indexing64.t +++ /dev/null @@ -1,10 +0,0 @@ - - -terra foo() - var a : int[5] - a[2] = 2 - var b = [int64](2) - return a[b] -end - -assert(foo() == 2) \ No newline at end of file diff --git a/samples/Terra/indexingbug.t b/samples/Terra/indexingbug.t deleted file mode 100644 index 0f9cee13..00000000 --- a/samples/Terra/indexingbug.t +++ /dev/null @@ -1,31 +0,0 @@ -arr = terralib.new(int[256]) - -arr[252] = 12 - -terra foo(arr : &int) - var idx = [uint8](252) - return arr[idx] -end - -terra foo2(arr : &int) - var idx = [uint8](252) - return @(arr + idx) -end - -terra foo3(arr : &int) - var idx = [int8](-3) - arr = arr + 255 - return @(arr + idx) -end - - -terra foo4(arr : &int) - var idx = [int8](-3) - arr = arr + 255 - return arr[idx] -end - -assert(foo2(arr) == 12) -assert(foo(arr) == 12) -assert(foo3(arr) == 12) -assert(foo4(arr) == 12) \ No newline at end of file diff --git a/samples/Terra/interface.t b/samples/Terra/interface.t deleted file mode 100644 index d837aa60..00000000 --- a/samples/Terra/interface.t +++ /dev/null @@ -1,33 +0,0 @@ - -IO = terralib.includec("stdio.h") -local Class = require("lib/javalike") - -struct A { - a : int -} - -terra A:foo(a : int) : int - return self.a + a -end - -local m = A.methods.foo:getdefinitions()[1] - -HasFoo = Class.interface({ foo = int -> int }) - -Class.implements(A,HasFoo) - -terra hasfoo(a : &HasFoo) - return a:foo(3) -end - -terra testit() - var a = A.alloc() - a.a = 4 - return hasfoo(a) + a:foo(5) -end - -print(m:getpointer()) -testit:compile() -print("DONE") - -assert(testit() == 16) \ No newline at end of file diff --git a/samples/Terra/interface2.t b/samples/Terra/interface2.t deleted file mode 100644 index bdb9a02d..00000000 --- a/samples/Terra/interface2.t +++ /dev/null @@ -1,38 +0,0 @@ - -IO = terralib.includec("stdio.h") -local Class = require("lib/javalike") - -HasFoo = Class.interface({ foo = int -> int }) - -struct A { - a : int -} - -terra A:foo(a : int) : int - return 1 -end -Class.implements(A,HasFoo) - -struct B {} -Class.extends(B,A) - - -struct C {} -Class.extends(C,B) - -terra C:foo(a : int) : int - return 3 -end - -terra hasfoo(a : &HasFoo) - return a:foo(3) -end - -terra testit() - var a = A.alloc() - var b = B.alloc() - var c = C.alloc() - return hasfoo(a) + hasfoo(b) + hasfoo(c) -end - -assert(testit() == 5) \ No newline at end of file diff --git a/samples/Terra/intrinsic.t b/samples/Terra/intrinsic.t deleted file mode 100644 index 8617ce5c..00000000 --- a/samples/Terra/intrinsic.t +++ /dev/null @@ -1,21 +0,0 @@ -local sqrt = terralib.intrinsic("llvm.sqrt.f32",float -> float) -local sqrt2 = terralib.intrinsic("llvm.sqrt.v4f32",vector(float,4) -> vector(float,4)) - -local sqrt3 = terralib.intrinsic(function(types) - if #types == 1 and types[1]:isvector() and types[1].type == float then - local N = types[1].N - return ("llvm.sqrt.v%df32"):format(N), vector(float,N) -> vector(float,N) - elseif #types == 1 and types[1] == float then - return "llvm.sqrt.f32",float -> float - end -end) - -terra foo() - var v = vector(1.f,2.f,3.f,4.f) - var c = sqrt2(vector(1,2,3,4)) - return sqrt(4) + c[3] + sqrt3(v)[3] + sqrt3(4.f) -end - -local test = require("test") - -test.eq(foo(),8) \ No newline at end of file diff --git a/samples/Terra/isvolatile.t b/samples/Terra/isvolatile.t deleted file mode 100644 index f293fb96..00000000 --- a/samples/Terra/isvolatile.t +++ /dev/null @@ -1,7 +0,0 @@ - - -terra foobar(a : &vector(float,4),b : vector(int,4)) - terralib.attrstore(a,b,{ isvolatile = true }) -end - -foobar:disas() diff --git a/samples/Terra/labelbug.t b/samples/Terra/labelbug.t deleted file mode 100644 index 4d996e4f..00000000 --- a/samples/Terra/labelbug.t +++ /dev/null @@ -1,5 +0,0 @@ - -terra foo() - ::alabel:: ;; - return 0 -end \ No newline at end of file diff --git a/samples/Terra/latelink.t b/samples/Terra/latelink.t deleted file mode 100644 index 43a64765..00000000 --- a/samples/Terra/latelink.t +++ /dev/null @@ -1,24 +0,0 @@ -C = terralib.includecstring [[ - typedef struct { - int a; - } S; - typedef struct { - S a; - } A; -]] -C2 = terralib.includecstring [[ - typedef struct { - int a; - } S; - typedef struct { - S a; - } B; -]] - -terra second() - var a : C2.B - var b : C.A - - a.a = b.a -end -second:disas() \ No newline at end of file diff --git a/samples/Terra/lazycstring.t b/samples/Terra/lazycstring.t deleted file mode 100644 index 3b3270a1..00000000 --- a/samples/Terra/lazycstring.t +++ /dev/null @@ -1,21 +0,0 @@ - -struct A { - a : int -} - - -print(A:cstring()) - -terra foo() - return A { 1 } -end - -struct B { - a : int -} - -terra foo2() - return B { 1 } -end - -assert(foo().a == foo2().a) \ No newline at end of file diff --git a/samples/Terra/lazylog.t b/samples/Terra/lazylog.t deleted file mode 100644 index 84bba0fa..00000000 --- a/samples/Terra/lazylog.t +++ /dev/null @@ -1,61 +0,0 @@ -local function gentrees(depth) - local function treetostring(tree) - if type(tree) == "string" then return tree - elseif tree.rhs then return "(" .. treetostring(tree.lhs) .. " " .. tree.op .. " " .. treetostring(tree.rhs) .. ")" - else return "(" .. tree.op .. " " .. treetostring(tree.lhs) .. ")" end - end - local function gendepth(depth) - local trees = {} - table.insert(trees, "%s") - if depth == 0 then return trees end - local subtrees = gendepth(depth - 1) - for _,t0 in ipairs(subtrees) do - table.insert(trees, { lhs = t0, op = "not" }) - for _,t1 in ipairs(subtrees) do - table.insert(trees, { lhs = t0, rhs = t1, op = "and" }) - table.insert(trees, { lhs = t0, rhs = t1, op = "or" }) - end - end - return trees - end - local trees = gendepth(depth) - local nargs = 2 ^ depth - local argassign = "local i0" - local targs = "return terra(i0 : bool" - local args = {"i0"} - for i = 1, nargs - 1 do - local arg = "i"..tostring(i) - table.insert(args,arg) - argassign = argassign .. ", " .. arg - targs = targs .. ", " .. arg .. " : bool" - end - argassign = argassign .. " = ..." - targs = targs .. ")" - - argassign = argassign .. "\nreturn " - targs = targs .. "\nreturn " - for treeno,t in ipairs(trees) do - local line = string.format(treetostring(t),unpack(args)) - io.write(string.format("\r%3d%% %s",treeno/#trees * 100,line)) - local lcode = argassign .. line - local tcode = targs .. line .. " end" - local lfn = assert(loadstring(lcode)) - local tfn = assert(terralib.loadstring(tcode))() - tfn:compile() - local states = 2 ^ nargs - local actuals = {} - local band = bit.band - local blshift = bit.lshift - for i = 0, states - 1 do - for s = 1, nargs do - actuals[s] = 0 ~= band(i,blshift(1,s-1)) - end - local result = lfn(unpack(actuals)) - local result2 = tfn(unpack(actuals)) - assert(result == result2) - end - end - io.write("\n") -end - -gentrees(2) \ No newline at end of file diff --git a/samples/Terra/leaktest.t b/samples/Terra/leaktest.t deleted file mode 100644 index d49ff6bb..00000000 --- a/samples/Terra/leaktest.t +++ /dev/null @@ -1,27 +0,0 @@ -local leak = require "lib.leak" - -function make() - local terra a(x:int) - return x+1 - end - - local terra b(x:int) - return a(x) - end - - return b(12),leak.track(b) -end -nan = 0/0 -res,t=make() -assert(res == 13) -local gcd, path = leak.find(t) -if gcd then - print(path) - assert(false) -end - -l = leak.track(leak) -foo = 0/0 -local f,p = leak.find(l) -assert(f) -assert(p == "$locals.leak") \ No newline at end of file diff --git a/samples/Terra/let1.t b/samples/Terra/let1.t deleted file mode 100644 index 2363cc7f..00000000 --- a/samples/Terra/let1.t +++ /dev/null @@ -1,15 +0,0 @@ - - -terra foo() - return (1),(2) -end - -terra bar() - var c = [quote var a = 3 in a end] - var d = 5 - c = c + 10 - return [quote var a = 3 in [quote var b = 4 in a + b + c + d end] end] -end -local test = require("test") -test.meq({1,2},foo()) -assert(25 == bar()) diff --git a/samples/Terra/let2.t b/samples/Terra/let2.t deleted file mode 100644 index 273984a2..00000000 --- a/samples/Terra/let2.t +++ /dev/null @@ -1,64 +0,0 @@ - - -local a = -quote - var b = 1 -in - b + 0, b + 1 -end - -terra f0() - return (a) -end -terra f1() - return a -end -terra f2() - a -end -local test = require("test") -test.meq({1,2},f0()) -test.meq({1,2},f1()) - -local c = symbol() -local b = -quote - var [c] = 3 -in - c,c+1 -end - -terra f3() - b - return ([c]) -end -assert(f3() == 3) - -a = global(1) -local emptyexp = quote - a = a + 1 -end - -local emptystmts = {4,3} - -local both = quote -in 4,[quote a = a + 1 in 3 end] -end - -terra bar(a : int, b : int) - return a + b -end -terra bar2(a : int, b : int, c : {}) - return a + b -end -terra f4() - return bar(emptystmts) + bar2(1,2,emptyexp) + a -end - -assert(f4() == 12) - -terra f5() - return bar(both._0,both._0) + a -end - -assert(f5() == 12) \ No newline at end of file diff --git a/samples/Terra/linkllvm.t b/samples/Terra/linkllvm.t deleted file mode 100644 index 852f503f..00000000 --- a/samples/Terra/linkllvm.t +++ /dev/null @@ -1,13 +0,0 @@ - - -terra add(a : int, b : int) - return a + b -end - - -terralib.saveobj("add.bc",{ add = add }) - -local addlib = terralib.linkllvm("add.bc") -add2 = addlib:extern("add", {int,int} -> int) - -assert(add2(3,4) == 7) \ No newline at end of file diff --git a/samples/Terra/localenv.t b/samples/Terra/localenv.t deleted file mode 100644 index da37d91a..00000000 --- a/samples/Terra/localenv.t +++ /dev/null @@ -1,46 +0,0 @@ - -local a = 4 -b = 3 -local terra foo() - return a + b -end -local terra bar() - return foo() -end -local test = require("test") - -test.eq(foo(),7) -test.eq(bar(),7) - -terra nested() - return [ (function(a) return a + b end)(8) ] -end -terra nested2() - return [ a + b ] -end -local c = {} -local d = {} -local vv = {} -local b = 3 -local e = 8 -g = 1 -local dd = 8 - aa = global(10) -terra nested3() - var luav = 8 - return [ (function() - local b = 5 - function c.b() return 7 end - local f = 7 - vv.bb = global(aa:get()) - terra d.c() return e + f + g + vv.bb + [ `dd ] end - return b + a - end)() ] -end - -test.eq(nested(),11) - -test.eq(nested2(),7) -test.eq(nested3(),9) -test.eq(c.b(),7) -test.eq(d.c(),34) \ No newline at end of file diff --git a/samples/Terra/localenv2.t b/samples/Terra/localenv2.t deleted file mode 100644 index 355602ba..00000000 --- a/samples/Terra/localenv2.t +++ /dev/null @@ -1,7 +0,0 @@ - -local dd = 8 -terra nested3() - return [ `dd ] -end -local test = require("test") -test.eq(nested3(),8) \ No newline at end of file diff --git a/samples/Terra/logical.t b/samples/Terra/logical.t deleted file mode 100644 index 7e4f7523..00000000 --- a/samples/Terra/logical.t +++ /dev/null @@ -1,33 +0,0 @@ - - -local T = true -local F = false - -terra check() - var a = true - return not true == false -end - -assert(check() == true) - -terra check2() - return not T == F -end - -assert(check2() == true) - -terra check3() - return not T == not not T -end - -assert(check3() == false) - -terra check4() - return not not T == T and not not F == F and true == T and false == F -end - -assert(check4() == true) - -terra foo() return not false end - -assert(foo() == true) \ No newline at end of file diff --git a/samples/Terra/luabridge.t b/samples/Terra/luabridge.t deleted file mode 100644 index d7fcb285..00000000 --- a/samples/Terra/luabridge.t +++ /dev/null @@ -1,18 +0,0 @@ -struct A { a : int, b : double } - -terra foo(a : A) - return a.a + a.b -end - - -terra foo2(a : A) - return a.a + a.b,a.a -end - -local test = require("test") - -test.eq( foo( {a = 1,b = 2.3} ), 3.3 ) -test.eq( foo( {1,2.3} ), 3.3 ) -test.eq( foo( {b = 1, a = 2.3} ),3 ) - -test.meq({3.3,1},foo2( { a = 1, b = 2.3} )) \ No newline at end of file diff --git a/samples/Terra/luabridge2.t b/samples/Terra/luabridge2.t deleted file mode 100644 index f4d86412..00000000 --- a/samples/Terra/luabridge2.t +++ /dev/null @@ -1,92 +0,0 @@ -struct A { a : int, b : double } - -terra returnstruct() - var a = A { 1, 2.5} - return a -end -terra returnstruct2() - var a = A { 1, 2.5} - var b = A { 2, 3.5} - return a,b -end - -terra returnarray() - var a : int[4] = array(1,2,3,4) - return a -end -terra returnarray2() - var a : int[4] = array(1,2,3,4) - var b : int[4] = array(5,6,7,8) - return a,b -end - -terra returnaos() - var a : A[2] = arrayof(A, {1,2.5}, {2,3.5} ) - return a -end -struct B { a : int[4] } -terra returnsoa() - var a = B { array(1,2,3,4) } - return a -end - -global_a = global(A) -global_a:set( {3, 4.5}) - -terra retstructptr() - return &global_a -end -terra structptr(a : &A) - return a.a + a.b -end - -global_arr = global(int[2]) -global_arr:set({3,4}) - -terra retarrptr() - return &global_arr -end -terra arrptr(a : &int[2]) - return (@a)[0] + a[0][1] -end - -local test = require("test") -local a0 = returnstruct() -test.eq(a0.a,1) -test.eq(a0.b,2.5) -local a1,b1 = terralib.unpackstruct(returnstruct2()) -test.eq(a1.a,1) -test.eq(a1.b,2.5) -test.eq(b1.a,2) -test.eq(b1.b,3.5) ---[[ C doesn't actually allow you to return arrays directly -local arr = returnarray() -test.eq(arr[0],1) -test.eq(arr[1],2) -test.eq(arr[2],3) -test.eq(arr[3],4) -local arr2,arr3 = returnarray2() -test.eq(arr2[0],1) -test.eq(arr2[1],2) -test.eq(arr2[2],3) -test.eq(arr2[3],4) -test.eq(arr3[0],5) -test.eq(arr3[1],6) -test.eq(arr3[2],7) -test.eq(arr3[3],8) -local arr4 = returnaos() -test.eq(arr4[0].a,1) -test.eq(arr4[1].b,3.5) -]] - -local arr5 = returnsoa() -test.eq(arr5.a[0],1) -test.eq(arr5.a[3],4) -local ptrret = retstructptr() -test.eq(ptrret[0].a,3) -test.eq(ptrret[0].b,4.5) -test.eq(structptr(ptrret),7.5) -local ptrarr = retarrptr() -test.eq(ptrarr[0][0],3) -test.eq(ptrarr[0][1],4) -test.eq(arrptr(ptrarr),7) \ No newline at end of file diff --git a/samples/Terra/luabridgefn.t b/samples/Terra/luabridgefn.t deleted file mode 100644 index 488e4f9e..00000000 --- a/samples/Terra/luabridgefn.t +++ /dev/null @@ -1,23 +0,0 @@ - -terra plus1(a : int) - return a + int(1) -end - -terra afn() : int -> int - return plus1 -end - -terra doit(a : int, b : int -> int) - return b(a) -end - -local test = require("test") - -local foobar = afn() -test.eq(foobar(3),4) -test.eq(doit(4,foobar),5) -local function whatwhat(a) - print("I GOT A ", a) - return a + 3 -end -test.eq(doit(5,whatwhat),8) diff --git a/samples/Terra/luabridgerec.t b/samples/Terra/luabridgerec.t deleted file mode 100644 index b5a5ad23..00000000 --- a/samples/Terra/luabridgerec.t +++ /dev/null @@ -1,10 +0,0 @@ - -struct A { a : &A, b : int } - -terra foo(a : A) - return a.b -end - -local test = require("test") - -test.eq(foo({b = 5}),5) diff --git a/samples/Terra/luabridgeunion.t b/samples/Terra/luabridgeunion.t deleted file mode 100644 index 8866866f..00000000 --- a/samples/Terra/luabridgeunion.t +++ /dev/null @@ -1,14 +0,0 @@ -struct A { union {a : int, b : double}, c : int } - -terra foo(a : A) - return a.a + a.c -end -terra foo2(a : A) - return a.b + a.c -end - - -local test = require("test") - -test.eq( foo({a = 4, c = 6}), 10) -test.eq( foo2({b = 4.4, c = 6}), 10.4) \ No newline at end of file diff --git a/samples/Terra/luaterramethod.t b/samples/Terra/luaterramethod.t deleted file mode 100644 index 8cad2f52..00000000 --- a/samples/Terra/luaterramethod.t +++ /dev/null @@ -1,40 +0,0 @@ - - -struct Foo { - a : int; - b : int; -} - -terra Foo:bar() - self.a = self.a + 1 - return self.a + self.b -end - -Foo.methods.baz = function(self) print(self.a,self.b) end -Foo.methods.mac = macro(function() return `1 end) - -terra usemethod() - var a = Foo { 3, 4} - a:baz() - return a:bar() -end -assert(8 == usemethod()) - -obj = terralib.new(Foo[1], {{3,4}}) - -assert(8 == obj[0]:bar()) -assert(9 == obj[0]:bar()) -obj[0]:baz() - -local a,b = pcall(function() -obj[0]:mac() -end) -assert(not a) -assert(string.match(b,"not supported")) - -local a,b = pcall(function() -obj[0]:maz() -end) - -assert(not a) -assert(string.match(b,"attempt to call method")) \ No newline at end of file diff --git a/samples/Terra/lvaluepointer.t b/samples/Terra/lvaluepointer.t deleted file mode 100644 index 1e3855ba..00000000 --- a/samples/Terra/lvaluepointer.t +++ /dev/null @@ -1,10 +0,0 @@ - - -terra foo() - var a : int = 5 - var pa = &a - @pa = 4 - @[&float](pa) = 5 -end - -foo() \ No newline at end of file diff --git a/samples/Terra/lvaluequote.t b/samples/Terra/lvaluequote.t deleted file mode 100644 index 56f4536e..00000000 --- a/samples/Terra/lvaluequote.t +++ /dev/null @@ -1,22 +0,0 @@ - - -checkl = macro(function(a) - assert(a:islvalue()) - return a -end) - -checkr = macro(function(a) - assert(not a:islvalue()) - return a -end) - - -terra testit() - - var a = checkr(4) - var b = checkr(checkl(a) + 3) - var c = checkl([quote var d = 5 in d end]) - return a + b + c -end - -assert(4+7+5 == testit()) diff --git a/samples/Terra/lvaluetreelist.t b/samples/Terra/lvaluetreelist.t deleted file mode 100644 index cfc01a57..00000000 --- a/samples/Terra/lvaluetreelist.t +++ /dev/null @@ -1,9 +0,0 @@ - - -terra foobar() - var a = 4 - @&[quote in a end] = 5 - return a -end - -assert(foobar() == 5) \ No newline at end of file diff --git a/samples/Terra/macro.t b/samples/Terra/macro.t deleted file mode 100644 index 3c8afcf5..00000000 --- a/samples/Terra/macro.t +++ /dev/null @@ -1,50 +0,0 @@ - -local bar = terralib.internalmacro(function(ctx,tree,typ) - return terralib.newtree(typ.tree, { kind = terralib.kinds.literal, type = double, value = 4.0 }) - -end) - -local bar2 = macro(function(typ) - return typ - -end) - - -local bar3 = macro(function(a,b) - return {a.tree,b.tree} -end) - -terra up(v : &int) - @v = @v + 1 -end - -local bar4 = macro(function() - local terra myfn() - return 42 - end - return myfn -end) - -moo = global(int,3) - -local bar4 = macro(function() - local terra myfn() - return 42 - end - return myfn -end) - -local bar5 = macro(function() - return moo -end) - -terra foo() : int - var a : int = bar(int,int16,int32) - bar2(a) = bar2(a) + 5 - bar3(up(&a),up(&a)) - bar5() = bar5() + 1 - return a + bar4()() + moo -end - -local test = require("test") -test.eq(57,foo()) diff --git a/samples/Terra/macro2.t b/samples/Terra/macro2.t deleted file mode 100644 index c910bb14..00000000 --- a/samples/Terra/macro2.t +++ /dev/null @@ -1,14 +0,0 @@ - -local bar2 = macro(function(typ) - return typ - -end) - -terra foo() : int - var a = 3 - bar2(a) = bar2(a) + 5 - return a -end - -local test = require("test") -test.eq(8,foo()) diff --git a/samples/Terra/macro3.t b/samples/Terra/macro3.t deleted file mode 100644 index 9b1015c8..00000000 --- a/samples/Terra/macro3.t +++ /dev/null @@ -1,14 +0,0 @@ - - -foo = macro(function() - local terra bar() - return 3 - end - return bar -end) - -terra baz() - return foo()() -end - -assert(baz() == 3) \ No newline at end of file diff --git a/samples/Terra/macrokey.t b/samples/Terra/macrokey.t deleted file mode 100644 index 329b92aa..00000000 --- a/samples/Terra/macrokey.t +++ /dev/null @@ -1,9 +0,0 @@ - -what = function() return "abcd" end - -terra foo() - var a = { [what()] = 4 } - return a.abcd -end -local test = require("test") -test.eq(foo(),4) \ No newline at end of file diff --git a/samples/Terra/macrolet.t b/samples/Terra/macrolet.t deleted file mode 100644 index f6343823..00000000 --- a/samples/Terra/macrolet.t +++ /dev/null @@ -1,17 +0,0 @@ - - -twice = macro(function(a) - return quote - var v = a - in - v + v - end -end) - - -terra foobar() - var what = 1 - return twice([quote what = what + 1 in what end]) + what -end - -assert(6 == foobar()) \ No newline at end of file diff --git a/samples/Terra/macroselect.t b/samples/Terra/macroselect.t deleted file mode 100644 index 31c18f6c..00000000 --- a/samples/Terra/macroselect.t +++ /dev/null @@ -1,11 +0,0 @@ - -struct A { a : int, b : int } - -local c = "b" -terra foo() - var a = A {1,2} - return a.[c] -end - -local test = require("test") -test.eq(foo(),2) \ No newline at end of file diff --git a/samples/Terra/macrotest.t b/samples/Terra/macrotest.t deleted file mode 100644 index 707e6b6e..00000000 --- a/samples/Terra/macrotest.t +++ /dev/null @@ -1,9 +0,0 @@ -C = terralib.includecstring [[ -#define foo 1 -#define foo2 -3.4 -#undef foo -#define foo 3 -]] - -assert(C.foo == 3) -assert(C.foo2 == -3.4) \ No newline at end of file diff --git a/samples/Terra/malloc.t b/samples/Terra/malloc.t deleted file mode 100644 index 6672bfdd..00000000 --- a/samples/Terra/malloc.t +++ /dev/null @@ -1,23 +0,0 @@ -local c = terralib.includecstring [[ - #include - #include -]] - -local N = 10 -terra foo() - c.printf("size = %d\n",int(sizeof(int))) - var list = [&int](c.malloc(sizeof(int)*N)) - for i = 0,N do - list[i] = i + 1 - end - var result = 0 - for i = 0,N do - c.printf("%d = %d\n",int(i),list[i]) - result = result + list[i] - end - c.free([&uint8](list)) - return result -end - -local test = require("test") -test.eq(foo(),N*(1 + N)/2) diff --git a/samples/Terra/mathlib.t b/samples/Terra/mathlib.t deleted file mode 100644 index 26af6cc8..00000000 --- a/samples/Terra/mathlib.t +++ /dev/null @@ -1,9 +0,0 @@ -local c = terralib.includec("math.h") - -terra mysqrt(a : float) - return c.sqrtf(a) -end - -local test = require("test") -test.eq(mysqrt(4),2) -test.eq(mysqrt(9),3) \ No newline at end of file diff --git a/samples/Terra/metatype.t b/samples/Terra/metatype.t deleted file mode 100644 index bd8cdd64..00000000 --- a/samples/Terra/metatype.t +++ /dev/null @@ -1,16 +0,0 @@ -local function foo(T) - terra T:what() - return self.a + self.b - end -end -struct A(foo) { - a : int; - b : int; -} - -terra test() - var a = A {1,2} - return a:what() -end - -assert(test() == 3) \ No newline at end of file diff --git a/samples/Terra/method.t b/samples/Terra/method.t deleted file mode 100644 index 7e38fa45..00000000 --- a/samples/Terra/method.t +++ /dev/null @@ -1,42 +0,0 @@ ---the zero line -struct A { b : B } and -struct B {a : int, b : int} - -B.methods.foo = terra(b : B) - return b.a -end -terra bar() - var b = B { 1,2 } - return b:foo() -end - - -B.methods.foo2 = terra(b : &B) - b.a = 6 -end - -terra bar2() - var b = B { 1,2 } - b:foo2() - return b.a -end - -B.methods.foo3 = terra(b : B) - return b.a -end - -terra bar3() - var b = B { 1,2 } - return (&b):foo3() -end -terra bar4() - var b = B { 1,2 } - (&b):foo2() - return b.a -end - -test = require("test") -test.eq(bar(),1) -test.eq(bar2(),6) -test.eq(bar3(),1) -test.eq(bar4(),6) \ No newline at end of file diff --git a/samples/Terra/methodantiquote.t b/samples/Terra/methodantiquote.t deleted file mode 100644 index 6fbb79ad..00000000 --- a/samples/Terra/methodantiquote.t +++ /dev/null @@ -1,18 +0,0 @@ ---the zero line -M = {} -struct M.B {a : int, b : int} - -terra M.B:foo(a : int) - return self.a + a -end - - -local avar = "foo" - -terra bar() - var b = M.B { 1,2 } - return b:[avar](3) -end - -test = require("test") -test.eq(bar(),4) diff --git a/samples/Terra/methodmissing.t b/samples/Terra/methodmissing.t deleted file mode 100644 index b60cd5cf..00000000 --- a/samples/Terra/methodmissing.t +++ /dev/null @@ -1,17 +0,0 @@ - - -struct A { - a : int -} - -A.metamethods.__methodmissing = macro(function(methodname,obj,anarg) - print(methodname) - return `anarg + [string.byte(methodname,1,1)] -end) - -terra foobar() - var a : A - return a:a(3) + a:b(4) -end - -assert(foobar() == 202) \ No newline at end of file diff --git a/samples/Terra/methodrvalue.t b/samples/Terra/methodrvalue.t deleted file mode 100644 index 13513b98..00000000 --- a/samples/Terra/methodrvalue.t +++ /dev/null @@ -1,18 +0,0 @@ ---the zero line -M = {} -struct M.B {a : int, b : int} - -terra M.B:foo(a : int) - return self.a + a -end - -terra rify() - var a = M.B { 1,2} - return a -end -terra bar() - return (rify()):foo(3) -end - -test = require("test") -test.eq(bar(),4) diff --git a/samples/Terra/methodsugar.t b/samples/Terra/methodsugar.t deleted file mode 100644 index 473f9521..00000000 --- a/samples/Terra/methodsugar.t +++ /dev/null @@ -1,15 +0,0 @@ ---the zero line -M = {} -struct M.B {a : int, b : int} - -terra M.B:foo(a : int) - return self.a + a -end - -terra bar() - var b = M.B { 1,2 } - return b:foo(3) -end - -test = require("test") -test.eq(bar(),4) diff --git a/samples/Terra/missingfields.t b/samples/Terra/missingfields.t deleted file mode 100644 index acd09f2d..00000000 --- a/samples/Terra/missingfields.t +++ /dev/null @@ -1,14 +0,0 @@ -test = terralib.includecstring([[ - typedef struct {} emptyanon; - typedef struct foo foobar; - void test(struct foo * f); - struct foo { int x; }; - union ufoo; - typedef union { int a; int b; } anonunion; -]]) -terra main() - var s : test.foo - s.x = 1 -end - -main() \ No newline at end of file diff --git a/samples/Terra/mixed.t b/samples/Terra/mixed.t deleted file mode 100644 index 267bf814..00000000 --- a/samples/Terra/mixed.t +++ /dev/null @@ -1,13 +0,0 @@ -a = terra() return 4 end -local d = {} -do - struct A{} - and local terra a() return 5 end - and terra d.d(a : B) end - and terra B:a() end - and struct B {} - and terra c() end - and struct C {} - assert(a() == 5) -end -assert(a() == 4) \ No newline at end of file diff --git a/samples/Terra/multiconstructor.t b/samples/Terra/multiconstructor.t deleted file mode 100644 index b9bdd6d1..00000000 --- a/samples/Terra/multiconstructor.t +++ /dev/null @@ -1,17 +0,0 @@ - -terra foo() : {double, double} - return 1.0,3.0 -end - -struct A {c : int, a : int, b : double } - -terra bar() - var r = foo() - var a = A {1,unpackstruct(r)} - var b = A {1,2,(foo())._0} - var c = A {c = 1,a = 2,b = foo()._0} - return a.c + a.a + a.b + b.c + c.c -end - -local test = require("test") -test.eq(7,bar()) \ No newline at end of file diff --git a/samples/Terra/multimacro.t b/samples/Terra/multimacro.t deleted file mode 100644 index b0d72374..00000000 --- a/samples/Terra/multimacro.t +++ /dev/null @@ -1,17 +0,0 @@ - -local bar = terralib.internalmacro(function(ctx,tree,typ,x) - return {terralib.newtree(typ.tree, { kind = terralib.kinds.literal, type = double, value = 4.0 }), x } -end) - -local x,y,z = 1,2,3 - -terra foo() : int - var a,b = bar(int,x + y + z) - var c = bar(int,0)._0 + 1 - --bar2(int) = bar2(int) + 5 - --bar3(up(&a),up(&a)) - return a + b + c -end - -local test = require("test") -test.eq(15,foo()) diff --git a/samples/Terra/multiterra.t b/samples/Terra/multiterra.t deleted file mode 100644 index 28a97b42..00000000 --- a/samples/Terra/multiterra.t +++ /dev/null @@ -1,79 +0,0 @@ -local ffi = require("ffi") - -C = terralib.includecstring [[ -#ifndef _WIN32 -#include -#endif -#include -typedef struct lua_State lua_State; -lua_State * luaL_newstate(); -int terra_init(lua_State * L); -int luaL_openlibs(lua_State * L); -int luaL_loadstring(lua_State * L, const char *); -int lua_close(lua_State * L); -void lua_call(lua_State * L, int,int); -int lua_pushnumber(lua_State * L, double); -int terra_loadstring(lua_State *L, const char *s); -double luaL_checknumber(lua_State * L,int); -]] - -if ffi.os == "Windows" then - -- fake it on windows - C.pthread_t = int - C.pthread_create = terra(t : &int, stuff : &opaque,fn : &opaque -> &opaque, data : &opaque) - return fn(data) - end - C.pthread_join = terra(t : int, stuff : &opaque) - end -end - - -N = 4 - -local acc = global(int[N]) - -terra forkedFn(args : &opaque) : &opaque - var threadid = @[&int](args) - C.printf("threadid %d\n",threadid) - - var L = C.luaL_newstate(); - if L == nil then - C.printf("can't initialize luajit\n") - end - - C.luaL_openlibs(L) - C.terra_init(L) - - C.terra_loadstring(L, [[ a = ...; C = terralib.includec("stdio.h"); terra foo () C.printf("new terra %d\n",a) return a end; return foo() ]]) - C.lua_pushnumber(L,threadid) - C.lua_call(L,1,1) - acc[threadid] = C.luaL_checknumber(L,-1) - C.lua_close(L) - - return nil -end - -terra foo() - var thread : C.pthread_t[N] - for i = 0,N do - acc[i] = -1 - end - - var args : int[N] - for i = 0,N do - args[i] = i - C.pthread_create(&thread[i],nil,forkedFn,&args[i]) - end - - for i = 0,N do - C.pthread_join(thread[i],nil) - end - var sum = 0 - for i = 0,N do - sum = sum + acc[i] - end - return sum -end - -print(foo()) -assert(foo() == N * (N - 1) / 2) \ No newline at end of file diff --git a/samples/Terra/names.t b/samples/Terra/names.t deleted file mode 100644 index 3bfd6187..00000000 --- a/samples/Terra/names.t +++ /dev/null @@ -1,16 +0,0 @@ -struct A { -} - -local B = (function() - local struct A {} - return A -end)() -C = terralib.types.newstruct("A$1") -D = terralib.types.newstruct("A$1") - -local names = {} -for i,t in ipairs {A,B,C,D} do - local n = tostring(t) - assert(not names[n]) - names[n] = true -end \ No newline at end of file diff --git a/samples/Terra/nestedcalls.t b/samples/Terra/nestedcalls.t deleted file mode 100644 index d9410798..00000000 --- a/samples/Terra/nestedcalls.t +++ /dev/null @@ -1,11 +0,0 @@ - -terra foo3(a : &int) : &int - return a -end - -terra bar2(a : int) - return @(foo3(&a)) -end - -local test = require("test") -test.eq(bar2(42),42) \ No newline at end of file diff --git a/samples/Terra/nestextract.t b/samples/Terra/nestextract.t deleted file mode 100644 index 13a15db3..00000000 --- a/samples/Terra/nestextract.t +++ /dev/null @@ -1,40 +0,0 @@ - - -struct A { - a : int -} - -count = global(int,0) - -terra twoAs(a : int) - return A {a}, A { a } -end - -function A.metamethods.__cast(fromt,tot,exp) - if tot == A and fromt == int then - return `twoAs(exp)._0 - end - error("what") -end - -terra twoInts() - count = count + 1 - return count,2 -end - -terra takesAnA(a : A) - return a.a -end - -dotwice = macro(function(exp) - return {exp,exp} -end) - -terra doit() - return dotwice(takesAnA((twoInts()._0))) -end - - -doit:printpretty() -local test = require("test") -test.meq({1,2},doit()) diff --git a/samples/Terra/nestnoerror.t b/samples/Terra/nestnoerror.t deleted file mode 100644 index c0a41500..00000000 --- a/samples/Terra/nestnoerror.t +++ /dev/null @@ -1,17 +0,0 @@ - - -terra haserror() - return (1):foo() -end - -local m = macro(function() - local success = pcall(function() haserror:compile() end) - assert(not success) - return 1 -end) - -terra noerror() - return m() -end - -assert(1 == noerror()) \ No newline at end of file diff --git a/samples/Terra/new.t b/samples/Terra/new.t deleted file mode 100644 index 0029c19d..00000000 --- a/samples/Terra/new.t +++ /dev/null @@ -1,14 +0,0 @@ -local c = terralib.includec("stdlib.h") - -new = macro(function(typquote) - local typ = typquote:astype() - return `[&typ](c.malloc(sizeof(typ))) -end) - -local typ = int -terra doit() - var a : &int = new(int) - return a -end - -doit() \ No newline at end of file diff --git a/samples/Terra/nillocal.t b/samples/Terra/nillocal.t deleted file mode 100644 index 93c415c0..00000000 --- a/samples/Terra/nillocal.t +++ /dev/null @@ -1,6 +0,0 @@ - -a = 4 -local a = nil - -terra foo() return [assert(not a)] end -assert(foo() == true) \ No newline at end of file diff --git a/samples/Terra/niltype.t b/samples/Terra/niltype.t deleted file mode 100644 index b8b0000d..00000000 --- a/samples/Terra/niltype.t +++ /dev/null @@ -1,9 +0,0 @@ - -terra foo() - var a : &int = nil - var b = nil - return a == b -end - -local test = require("test") -test.eq(foo(),true) \ No newline at end of file diff --git a/samples/Terra/nojit.t b/samples/Terra/nojit.t deleted file mode 100644 index 46b66331..00000000 --- a/samples/Terra/nojit.t +++ /dev/null @@ -1,20 +0,0 @@ - - ---var a = 4 + 5 -a = global(4 + 5) -terra foo() - return a -end - - -foo:gettype() ---we currently don't track what initializers need to be run after a nojit compile ---hopefully we can just remove the need to have nojit entirely ---otherwise we need to seperate the calling of variable initializers from the compilation process ---so that they can be called when jit is invoked -a:gettype() - -local test = require("test") -test.eq(foo(),9) - - diff --git a/samples/Terra/nolengthop.t b/samples/Terra/nolengthop.t deleted file mode 100644 index ceac4581..00000000 --- a/samples/Terra/nolengthop.t +++ /dev/null @@ -1,2 +0,0 @@ -local a,b = terralib.loadstring([[terra g() return #a]]) -assert(b:find("operator not supported")) \ No newline at end of file diff --git a/samples/Terra/nonprototypec.t b/samples/Terra/nonprototypec.t deleted file mode 100644 index 36256bb6..00000000 --- a/samples/Terra/nonprototypec.t +++ /dev/null @@ -1,12 +0,0 @@ -C = terralib.includecstring [[ - int foobar() { - return 3; - } -]] - - -terra doit() - return C.foobar() -end - -print(doit()) \ No newline at end of file diff --git a/samples/Terra/nontemporal.t b/samples/Terra/nontemporal.t deleted file mode 100644 index 2e634783..00000000 --- a/samples/Terra/nontemporal.t +++ /dev/null @@ -1,7 +0,0 @@ - - -terra foobar(a : &vector(float,4),b : vector(int,4)) - terralib.attrstore(a,b,{ nontemporal = true }) -end - -foobar:disas() diff --git a/samples/Terra/numliteral.t b/samples/Terra/numliteral.t deleted file mode 100644 index 9d5183ec..00000000 --- a/samples/Terra/numliteral.t +++ /dev/null @@ -1,14 +0,0 @@ - -terra thetest() - var a,b,c,d,e = 3,3.0,3.f,3LL, 3ULL - return a,b,c,d,e -end - -local exp = { "int32", "double", "float", "int64", "uint64" } - -local test = require("test") -thetest:compile() -local typ = thetest.definitions[1]:gettype() -for i,e in ipairs(typ.returntype:getentries()) do - test.eq(tostring(e.type),exp[i]) -end \ No newline at end of file diff --git a/samples/Terra/objc.t b/samples/Terra/objc.t deleted file mode 100644 index 134f5a48..00000000 --- a/samples/Terra/objc.t +++ /dev/null @@ -1,25 +0,0 @@ -local f = assert(io.popen("uname", 'r')) -local s = assert(f:read('*a')) -f:close() - -if s~="Darwin\n" then - print("Warning, not running test b/c this isn't a mac") -else - -local OC = require("lib/objc") - -terra main() - OC.NSAutoreleasePool:new() - var str = OC.NSString:stringWithUTF8String("the number of hacks is overwhelming...") - var err = OC.NSError:errorWithDomain_code_userInfo(str,12,nil) - var alert = OC.NSAlert:alertWithError(err) - - var imgname = OC.NSString:stringWithUTF8String("foo.png") - var img = OC.NSImage:alloc():initByReferencingFile(imgname) - alert:setIcon(img) - alert:runModal() -end - -terralib.saveobj("objc",{main = main}, { "-framework", "Foundation", "-framework", "Cocoa" }) - -end \ No newline at end of file diff --git a/samples/Terra/objc2.t b/samples/Terra/objc2.t deleted file mode 100644 index d92e1bde..00000000 --- a/samples/Terra/objc2.t +++ /dev/null @@ -1,42 +0,0 @@ -local f = assert(io.popen("uname", 'r')) -local s = assert(f:read('*a')) -f:close() - -if s~="Darwin\n" then - print("Warning, not running test b/c this isn't a mac") -else - - -local OC = require("lib/objc") -local IO = terralib.includec("stdio.h") - -struct Rect { - a : double, - b : double, - c : double, - d : double -} - -terra str(data : &uint8) - return OC.NSString:stringWithUTF8String(data) -end - -terra main() - OC.NSAutoreleasePool:new() - var app = OC.NSApplication:sharedApplication() - var rec = Rect {0,0,200,200} - var window = OC.NSWindow:alloc():initWithContentRect_styleMask_backing_defer(rec,1,2,false) - window:makeKeyAndOrderFront(nil) - --[[var img = OC.NSImage:alloc():initByReferencingFile(str("objc2.jpg")) - var imgView = OC.NSImageView:alloc():initWithFrame(rec) - imgView:setImage(img) - window:setContentView(imgView) - IO.printf("entering run loop\n")--]] - app:run() -end - -terralib.saveobj("objc2", {main = main}, {"-framework","Cocoa"}) - ---os.execute("./objc2") - -end \ No newline at end of file diff --git a/samples/Terra/objtest.t b/samples/Terra/objtest.t deleted file mode 100644 index f429f0fe..00000000 --- a/samples/Terra/objtest.t +++ /dev/null @@ -1,45 +0,0 @@ -C = terralib.includec("stdio.h") ---the zero line -struct A { a : int } - -terra A:foo1() - self.a = self.a + 1 - return self.a -end - -terra A.methods.foo2(self : &A) - self.a = self.a + 1 - return self.a -end - -terra A.methods.foo3(self : A) - self.a = self.a + 1 - return self.a -end - -terra bar() - var a = A { 0 } - var ptra = &a - - var v0 = a.a - var v1 = a:foo1() - var v2 = a.a - var v3 = a:foo2() - var v4 = a.a - var v5 = a:foo3() - var v6 = a.a - - ptra.a = 0 - var p0 = ptra.a - var p1 = ptra:foo1() - var p2 = ptra.a - var p3 = ptra:foo2() - var p4 = ptra.a - var p5 = ptra:foo3() - var p6 = ptra.a - - return v0,v1,v2,v3,v4,v5,v6,p0,p1,p2,p3,p4,p5,p6 -end - -test = require("test") -test.meq({0,1,1,2,2,3,2,0,1,1,2,2,3,2},bar()) \ No newline at end of file diff --git a/samples/Terra/offsetcalc.t b/samples/Terra/offsetcalc.t deleted file mode 100644 index ec6b0c9b..00000000 --- a/samples/Terra/offsetcalc.t +++ /dev/null @@ -1,33 +0,0 @@ -local offsetinbytescache = {} -function offsetinbytes(structtype,key) - local typetable = offsetinbytescache[structtype] or {} - local value = typetable[key] - if value then - return value - end - offsetinbytescache[structtype] = typetable - - local terra offsetcalc() : int - var a : &structtype = [&structtype](0) - return [&int8](&a.[key]) - [&int8](a) - end - - local result = offsetcalc() - - typetable[key] = result - return result -end - - -struct A { a : int8, c : int8, b : int } - - -terra foo() - return 4LL -end - -local test = require("test") - -test.eq(offsetinbytes(A,"b"),4) - - diff --git a/samples/Terra/opaquealloc.t b/samples/Terra/opaquealloc.t deleted file mode 100644 index 91f07604..00000000 --- a/samples/Terra/opaquealloc.t +++ /dev/null @@ -1,19 +0,0 @@ - - - -local r,e = pcall(function() - local struct A { - a : opaque - } - local v = terralib.new(A) -end) - -assert(not r and e:match("Errors reported during")) - - -local r,e = pcall(function() - local v = terralib.new(opaque) -end) - - -assert(not r and e:match("attempting to use an opaque type")) \ No newline at end of file diff --git a/samples/Terra/or.t b/samples/Terra/or.t deleted file mode 100644 index 98a95761..00000000 --- a/samples/Terra/or.t +++ /dev/null @@ -1,9 +0,0 @@ -local test = require("test") - -terra foo(a : double, b : double, c : double) : bool - return a < b or b < c -end - -test.eq(foo(1,2,1),true) -test.eq(foo(2,1,2),true) -test.eq(foo(3,2,1),false) \ No newline at end of file diff --git a/samples/Terra/ordercomplete.t b/samples/Terra/ordercomplete.t deleted file mode 100644 index eb451822..00000000 --- a/samples/Terra/ordercomplete.t +++ /dev/null @@ -1,25 +0,0 @@ - - -struct A { - a : int -} - -struct B { - a : A -} - -function A.metamethods.__staticinitialize() - print("STATIC INIT A") - local terra what(b : B) - end - what:gettype(true) -end - -function B.metamethods.__staticinitialize() - print("STATIC INIT B") -end - -terra foo(b : B) -end - -foo:compile() \ No newline at end of file diff --git a/samples/Terra/output.t b/samples/Terra/output.t deleted file mode 100644 index bb2b17b8..00000000 --- a/samples/Terra/output.t +++ /dev/null @@ -1,16 +0,0 @@ -C = terralib.includec("stdio.h") -terra main() - C.printf("hello world\n") -end -local m = { main = main } -terralib.saveobj("output.o",m) -local a = terralib.saveobj(nil,"object",m) -terralib.saveobj("output2.bc",m) -local b = terralib.saveobj(nil,"bitcode",m) -terralib.saveobj("output.ll",m) -local c = terralib.saveobj(nil,"llvmir",m) -terralib.saveobj("output",m) -terralib.saveobj("output2","executable",m) - -assert(a:match("hello world")) -assert(c:match("hello world")) \ No newline at end of file diff --git a/samples/Terra/overload.t b/samples/Terra/overload.t deleted file mode 100644 index 57483413..00000000 --- a/samples/Terra/overload.t +++ /dev/null @@ -1,17 +0,0 @@ - -terra foo(a : int) - return 1 -end - -terra foo(a : &int8) - return 2 -end - -print(#foo.definitions) - -terra doit() - return foo(1) + foo("what") -end - -local test = require("test") -test.eq(doit(),3) \ No newline at end of file diff --git a/samples/Terra/overload2.t b/samples/Terra/overload2.t deleted file mode 100644 index 417d5aab..00000000 --- a/samples/Terra/overload2.t +++ /dev/null @@ -1,15 +0,0 @@ - -terra foo(a : int) - return 1 -end - -terra foo(a : double) - return 2 -end - -terra doit() - return foo(2.5) -end - -local test = require("test") -test.eq(doit(),2) \ No newline at end of file diff --git a/samples/Terra/overload3.t b/samples/Terra/overload3.t deleted file mode 100644 index 93a516c6..00000000 --- a/samples/Terra/overload3.t +++ /dev/null @@ -1,15 +0,0 @@ - -terra foo(a : {int} ) - return 1 -end - -terra foo(a : {int,int} ) - return 2 -end - -terra doit() - return foo({1,2}) + foo({1,2}) -end - -local test = require("test") -test.eq(doit(),4) \ No newline at end of file diff --git a/samples/Terra/overloadcall.t b/samples/Terra/overloadcall.t deleted file mode 100644 index 343deb84..00000000 --- a/samples/Terra/overloadcall.t +++ /dev/null @@ -1,12 +0,0 @@ - - -terra foo(a : int) - return a -end - -terra foo(a : int, b : int) - return a + b -end - -local test = require("test") -test.eq(foo(1) + foo(3,4), 8) \ No newline at end of file diff --git a/samples/Terra/overloadmethod.t b/samples/Terra/overloadmethod.t deleted file mode 100644 index 226842b8..00000000 --- a/samples/Terra/overloadmethod.t +++ /dev/null @@ -1,24 +0,0 @@ - -struct A { a : int } -terra A:foo(a : int) - return self.a + a -end - -terra A:foo(a : &int8) - return self.a -end - - -terra doit() - var a = A { 3 } - return a:foo(1) + a:foo("what") -end -terra doit2() - var a = A { 3 } - var pa = &a - return pa:foo(1) + pa:foo("what") -end - -local test = require("test") -test.eq(doit(),7) -test.eq(doit2(),7) \ No newline at end of file diff --git a/samples/Terra/overloadmethod2.t b/samples/Terra/overloadmethod2.t deleted file mode 100644 index f3c411ec..00000000 --- a/samples/Terra/overloadmethod2.t +++ /dev/null @@ -1,17 +0,0 @@ - -struct A { a : int } -A.methods.foo = terra(self : A, a : int) - return self.a + a -end - -terra A:foo() - return self.a -end - - -terra doit() - var a = A { 3 } - return a:foo() + a:foo(1) -end -local test = require("test") -test.eq(doit(),7) \ No newline at end of file diff --git a/samples/Terra/overloadmethod3.t b/samples/Terra/overloadmethod3.t deleted file mode 100644 index 87290ade..00000000 --- a/samples/Terra/overloadmethod3.t +++ /dev/null @@ -1,18 +0,0 @@ - -struct A { a : int } -A.methods.foo = terra(self : A) - return 2 -end - -terra A:foo() - return 1 -end - - -terra doit() - var a = A { 3 } - var pa = &a - return a:foo() + pa:foo() -end -local test = require("test") -test.eq(doit(),4) \ No newline at end of file diff --git a/samples/Terra/overloadproduct.t b/samples/Terra/overloadproduct.t deleted file mode 100644 index 85230e29..00000000 --- a/samples/Terra/overloadproduct.t +++ /dev/null @@ -1,65 +0,0 @@ - -local ans = { -{1,1,1,1}; -{2,2,2,2}; -{1,2,1,2}; -{3,3,3,3}; -{1,1,3,3}; -{0,2,3,0}; -{1,2,3,0}; -{4,4,4,4}; -{1,0,0,4}; -{2,2,4,4}; -{1,2,0,4}; -{3,4,3,4}; -{1,0,3,4}; -{0,2,3,4}; -{1,2,3,4}; -} -function create(foo,a,b,c,d) - if a then - terra foo(a : int, b : int) - return 1 - end - end - if b then - terra foo(a : int, b : double) - return 2 - end - end - if c then - terra foo(a : double, b : int) - return 3 - end - end - if d then - terra foo(a : double, b : double) - return 4 - end - end -end - -local function bitset(i,b) - return bit.band(bit.rshift(i,b),1) == 1 -end - -for i = 1,15 do - local terra foo - local a,b,c,d = bitset(i,0),bitset(i,1),bitset(i,2),bitset(i,3) - create(foo, a,b,c,d) - local function trycall(arg1,arg2) - local r = 0 - pcall(function() - local terra testit() - var a : arg1, b : arg2 = 0,0 - return foo(a,b) - end - r = testit() - end) - return r - end - local r = {trycall(int,int),trycall(int,double),trycall(double,int),trycall(double,double)} - for j,rr in ipairs(r) do - assert(rr == ans[i][j]) - end -end \ No newline at end of file diff --git a/samples/Terra/overloadrecv.t b/samples/Terra/overloadrecv.t deleted file mode 100644 index a07a8bbf..00000000 --- a/samples/Terra/overloadrecv.t +++ /dev/null @@ -1,20 +0,0 @@ - - -struct A { - a : int -} - -terra A:foo(a : int, b : uint8) - return 1 -end -terra A:foo(a : double, b : uint8) - return 2 -end - -terra useit() - var a = A { 3 } - var pa = &a - return a:foo(1,1) + a:foo(1.1,1) + pa:foo(1,1) + pa:foo(1.1,1) -end - -assert(6 == useit()) \ No newline at end of file diff --git a/samples/Terra/painfulrecstruct.t b/samples/Terra/painfulrecstruct.t deleted file mode 100644 index 1b2026b6..00000000 --- a/samples/Terra/painfulrecstruct.t +++ /dev/null @@ -1,22 +0,0 @@ - - -struct A { - a : A -> int; - b : int -} - -terra foo(a : A) - return a.b -end - -terra callit(a : A) - return a.a(a) -end - -terra bar() - var a = A { foo, 3 } - return callit(a) -end - -local test = require("test") -test.eq(bar(),3) \ No newline at end of file diff --git a/samples/Terra/paren.t b/samples/Terra/paren.t deleted file mode 100644 index bcd40960..00000000 --- a/samples/Terra/paren.t +++ /dev/null @@ -1,5 +0,0 @@ -terra foo(a : int) - return a + (a) -end - -foo(3) \ No newline at end of file diff --git a/samples/Terra/parsecrash.t b/samples/Terra/parsecrash.t deleted file mode 100644 index 1ce8c06d..00000000 --- a/samples/Terra/parsecrash.t +++ /dev/null @@ -1,7 +0,0 @@ -local result,err = terralib.loadstring [[ -terra result() - [startXNeeded] = a + strip*L.stripWidth - [endXNeeded] = 1 -end -]] -assert(result ~= nil) \ No newline at end of file diff --git a/samples/Terra/parsefail.t b/samples/Terra/parsefail.t deleted file mode 100644 index 491ce0f2..00000000 --- a/samples/Terra/parsefail.t +++ /dev/null @@ -1,35 +0,0 @@ - -local self = 1 -local Rt = 1 -local i = 1 -local j = 1 -terra bar() -var a = Rt.MatrixDouble{[&double](self.ptr) , i,j} -end - -local r,e = terralib.loadstring[[ - - terra foo() - var a = { [&double](4) = 3 } - end -]] - -assert(r == nil and e:match("unexpected symbol near '='")) - -terra foo() - var a = { [""] = 3 } -end - -local s = symbol() - -local function getsym() - return s -end -terra foo2() - var [getsym()] = 3 - var a = { [getsym()] = 4, _1 = [getsym()] } - return a.[getsym()] + a._1 -end - -assert(7 == foo2()) - diff --git a/samples/Terra/parsefail2.t b/samples/Terra/parsefail2.t deleted file mode 100644 index 74119074..00000000 --- a/samples/Terra/parsefail2.t +++ /dev/null @@ -1,5 +0,0 @@ -terra foo() - var a : int[4] @&a[0] = 3 - return a[0] -end -assert(3 == foo()) \ No newline at end of file diff --git a/samples/Terra/pattern.t b/samples/Terra/pattern.t deleted file mode 100644 index dfb23037..00000000 --- a/samples/Terra/pattern.t +++ /dev/null @@ -1,43 +0,0 @@ - -terra foobar() - return 1,2 -end - -terra what() - var _,a,b = 1,foobar() - a,b = foobar() - return a + b -end -terra what2() - var a = foobar() - var b,c = unpackstruct(a) - return b+c -end - -assert(what() == 3) -assert(what2() == 3) - - -struct A { - a : int - b : int -} - -terra what3() : A - var a = A {1,2} - return unpacktuple(a) -end -assert(what3().b == 2) - -terra what4() - var a = A {1,2} - var c,d = unpackstruct(a) - return c+d -end -assert(what4() == 3) - -local terra ra() return A {1,2} end -local a,b = unpackstruct(foobar()) -assert(a == 1 and b == 2) -assert(unpacktuple(ra()).a == 1) -assert(unpackstruct(ra()) == 1) \ No newline at end of file diff --git a/samples/Terra/point.t b/samples/Terra/point.t deleted file mode 100644 index 088e3702..00000000 --- a/samples/Terra/point.t +++ /dev/null @@ -1,13 +0,0 @@ - -terra bar(a : &int) - @a = @a + 1 -end -terra foo(a : int) : int - var b : int - b = a - bar(&b) - return b -end - -local test = require("test") -test.eq(foo(4),5) \ No newline at end of file diff --git a/samples/Terra/pointerarith.t b/samples/Terra/pointerarith.t deleted file mode 100644 index d59c9b59..00000000 --- a/samples/Terra/pointerarith.t +++ /dev/null @@ -1,31 +0,0 @@ -terra foo(a : &int) : ptrdiff - var b : &int b = a + 10 - return b-a -end - -terra bar() - var b:int = 10; - return foo(&b) -end - -terra foo2(a : &int) : &int - a = a + 6 - a = 3 + a - a = a + 10 - return a -end - -terra foo3(a : &int) : &int - a = a - 11 - a = 2 + a - a = a - 10 - return a -end - -terra bar2(a : int) - return @(foo3(foo2(&a))) -end - -local test = require("test") -test.eq(bar(),10) -test.eq(bar2(42),42) diff --git a/samples/Terra/pointerlike.t b/samples/Terra/pointerlike.t deleted file mode 100644 index 2d3d8542..00000000 --- a/samples/Terra/pointerlike.t +++ /dev/null @@ -1,7 +0,0 @@ - -terra foo() - var a : int[4] - var b : &int = a - return a + 1, a - a, b - a, a - b, 1 + a -end -foo() \ No newline at end of file diff --git a/samples/Terra/pow.t b/samples/Terra/pow.t deleted file mode 100644 index 701c8247..00000000 --- a/samples/Terra/pow.t +++ /dev/null @@ -1,28 +0,0 @@ -local N = 4 -- N is a Lua variable -terra powN(a : double) - var r = 1 - for i = 0, N do - r = r * a - end - return r -end - - - - -local math = {} -for N = 1,10 do - math["pow"..tostring(N)] = terra(a : double) - var r = 1 - for i = 0, N do - r = r * a - end - return r - end -end - -local test = require("test") -test.eq(powN(3),81) -test.eq(math.pow1(2),2) -test.eq(math.pow2(2),4) -test.eq(math.pow3(2),8) \ No newline at end of file diff --git a/samples/Terra/ppltalk.t b/samples/Terra/ppltalk.t deleted file mode 100644 index d9e29868..00000000 --- a/samples/Terra/ppltalk.t +++ /dev/null @@ -1,18 +0,0 @@ - ---this is a comment. ---top level is Lua code: -function min(a,b) - if a < b then return a - else return b end -end - -print(min(3,4)) --3 - -terra mint(a : int, b : int) : int -if a < b then return a -else return b end -end - -print(mint(3,4)) --3 - -mint:disas() \ No newline at end of file diff --git a/samples/Terra/ppnil.t b/samples/Terra/ppnil.t deleted file mode 100644 index 93e6e561..00000000 --- a/samples/Terra/ppnil.t +++ /dev/null @@ -1,4 +0,0 @@ -terra foo() - return nil -end -foo:printpretty() \ No newline at end of file diff --git a/samples/Terra/pratttest1.t b/samples/Terra/pratttest1.t deleted file mode 100755 index 95b9f739..00000000 --- a/samples/Terra/pratttest1.t +++ /dev/null @@ -1,4 +0,0 @@ -import "lib/pratttest" -local a = goexp 1 + 3 * 4 ^ 5 ^ 6/(2 - 4 + -a) + -b(c) - -terralib.tree.printraw(a) diff --git a/samples/Terra/prec.t b/samples/Terra/prec.t deleted file mode 100644 index b6afe988..00000000 --- a/samples/Terra/prec.t +++ /dev/null @@ -1,4 +0,0 @@ -local a = &double -> double -assert(a:ispointer()) -assert(a.type:isfunction()) -assert(a.type.parameters[1]:ispointer()) \ No newline at end of file diff --git a/samples/Terra/prec2.t b/samples/Terra/prec2.t deleted file mode 100644 index 99a8974b..00000000 --- a/samples/Terra/prec2.t +++ /dev/null @@ -1,2 +0,0 @@ -terra foo(a : float, b : float, c : float, d : float) return a * (b - c) end -foo:printpretty() \ No newline at end of file diff --git a/samples/Terra/pretty.t b/samples/Terra/pretty.t deleted file mode 100644 index 3953c97a..00000000 --- a/samples/Terra/pretty.t +++ /dev/null @@ -1,69 +0,0 @@ - - -terra bar(a : int) - return 4,5 -end -terra takebar(a : double, b : int) - return 1 -end -terra baz() -end -function whatwhat() -end -struct A { data : int } -terra A:moo() end -Aptr = terralib.new(A) -terra foo() - var aa : A - - baz() - whatwhat() - do - end - ::what:: - goto what - while 4 < 3 do - break - terralib.attrload(&aa,{}) - var d = terralib.attrstore(&aa,aa,{}) - return 3,4,4,bar(aa.data) - end - var a = 0.0 - if a < 3 then - a = -(a + 1) - end - - if a < 3 then - a = -a + 1 - elseif a > 4 then - a = a - 1 - end - repeat - a = a + 1 - until a > 55 - var b,c = 4,5 - a,b = 5,c - var d = array(1,2,3) - b = (&a)[1] - var e : int = a - var g = terralib.select(true,0,1) - var ee = sizeof(int) - var more = { a = 5, c = 4, _2 = 3} - baz() - var bbb = bar(1) - var bb = takebar(bbb._0,bbb._1) - var vv = vector(3,4) - var vvv = Aptr - var vvvv = Aptr:moo() - return 3,4,ee,bar(1) -end - -foo:compile() -foo:printpretty(false) --before compilation -foo:printpretty() --after compilation - -local a = `1 + 2 -local b = quote var c = a + a in a + 1 end - -a:printpretty() -b:printpretty() \ No newline at end of file diff --git a/samples/Terra/printd.t b/samples/Terra/printd.t deleted file mode 100644 index d9a9f85d..00000000 --- a/samples/Terra/printd.t +++ /dev/null @@ -1,5 +0,0 @@ -a = .4 - -terra foo() return a end - -foo:printpretty(false) \ No newline at end of file diff --git a/samples/Terra/printfarray.t b/samples/Terra/printfarray.t deleted file mode 100644 index 98c21bef..00000000 --- a/samples/Terra/printfarray.t +++ /dev/null @@ -1,12 +0,0 @@ - - -C = terralib.includec("stdio.h") - -terra char(a : &int8) : int8 - return a[0] -end -terra foobar() - var a = arrayof(int8,char("a"),0) - C.printf("%s\n",a) -end -foobar() \ No newline at end of file diff --git a/samples/Terra/printfloat.t b/samples/Terra/printfloat.t deleted file mode 100644 index 37927f54..00000000 --- a/samples/Terra/printfloat.t +++ /dev/null @@ -1,7 +0,0 @@ -local IO = terralib.includec("stdio.h") - -terra foobar() - IO.printf("%f\n",3.3f) -end - -foobar() \ No newline at end of file diff --git a/samples/Terra/proxystruct.t b/samples/Terra/proxystruct.t deleted file mode 100644 index bde53457..00000000 --- a/samples/Terra/proxystruct.t +++ /dev/null @@ -1,19 +0,0 @@ -local c = terralib.includecstring [[ - #include - #include -]] - - -struct Node { - next : &Node; - v : int; -} - -terra foo() - var cur : &Node = [&Node](c.malloc(sizeof(Node))) - cur.v = 3 - return cur.v -end - -local test = require("test") -test.eq(foo(),3) diff --git a/samples/Terra/pt.t b/samples/Terra/pt.t deleted file mode 100644 index 6212d290..00000000 --- a/samples/Terra/pt.t +++ /dev/null @@ -1,18 +0,0 @@ - - -local a = global(double) - -terra getptr() - return &a -end - -local b = getptr() -local c = terralib.pointertolightuserdata(b) -print(b,c,a) - -terra foo(a : &&int) - -end - -foo(c) -print("DONE") \ No newline at end of file diff --git a/samples/Terra/pthreads.t b/samples/Terra/pthreads.t deleted file mode 100644 index b903dcdb..00000000 --- a/samples/Terra/pthreads.t +++ /dev/null @@ -1,47 +0,0 @@ -local ffi = require("ffi") -if ffi.os == "Windows" then - return -end - -C = terralib.includecstring [[ -#include -#include -]] - -acc = global(int[4]) - -terra forkedFn(args : &opaque) : &opaque - var threadid = @[&int](args) - C.printf("threadid %d\n",threadid) - acc[threadid] = threadid - return nil -end - -terra foo() - var thread0 : C.pthread_t - var thread1 : C.pthread_t - var thread2 : C.pthread_t - var thread3 : C.pthread_t - - acc[0]=-42 - acc[1]=-42 - acc[2]=-42 - acc[3]=-42 - - var args = arrayof(int,0,1,2,3) - - C.pthread_create(&thread0,nil,forkedFn,&args[0]) - C.pthread_create(&thread1,nil,forkedFn,&args[1]) - C.pthread_create(&thread2,nil,forkedFn,&args[2]) - C.pthread_create(&thread3,nil,forkedFn,&args[3]) - - C.pthread_join(thread0,nil) - C.pthread_join(thread1,nil) - C.pthread_join(thread2,nil) - C.pthread_join(thread3,nil) - - return acc[0]+acc[1]+acc[2]+acc[3] -end - -local test = require("test") -test.eq(foo(),0+1+2+3) \ No newline at end of file diff --git a/samples/Terra/quote.t b/samples/Terra/quote.t deleted file mode 100644 index 6110380e..00000000 --- a/samples/Terra/quote.t +++ /dev/null @@ -1,10 +0,0 @@ - -local c = `10 -local a = `4 + c -terra doit() - var c = 3 - return a + a -end - -local test = require("test") -test.eq(doit(),28) \ No newline at end of file diff --git a/samples/Terra/quote10.t b/samples/Terra/quote10.t deleted file mode 100644 index f32e9e22..00000000 --- a/samples/Terra/quote10.t +++ /dev/null @@ -1,13 +0,0 @@ - -terra foo() - return 1,2 -end - -local q = `foo() - -terra bar() - return q -end - -local test = require("test") -test.meq({1,2},bar()) \ No newline at end of file diff --git a/samples/Terra/quote2.t b/samples/Terra/quote2.t deleted file mode 100644 index 378510a3..00000000 --- a/samples/Terra/quote2.t +++ /dev/null @@ -1,9 +0,0 @@ - -local c = `10 -local a = `4 + c -terra doit() - return a -end - -local test = require("test") -test.eq(doit(),14) \ No newline at end of file diff --git a/samples/Terra/quote3.t b/samples/Terra/quote3.t deleted file mode 100644 index 9f24b51f..00000000 --- a/samples/Terra/quote3.t +++ /dev/null @@ -1,13 +0,0 @@ -c = global(0) -terra count() - c = c + 1 - return c -end -foo = macro(function(a,b) return `a + a + a + b + count() end) -terra doit() - var a = -100 - return foo(count(),4) -end - -local test = require("test") -test.eq(doit(),14) \ No newline at end of file diff --git a/samples/Terra/quote4.t b/samples/Terra/quote4.t deleted file mode 100644 index 29f5150f..00000000 --- a/samples/Terra/quote4.t +++ /dev/null @@ -1,9 +0,0 @@ - -local str2 = `{a = 4} -local str = `str2 -terra doit() - return str.a -end - -local test = require("test") -test.eq(doit(),4) \ No newline at end of file diff --git a/samples/Terra/quote5.t b/samples/Terra/quote5.t deleted file mode 100644 index 23539bc4..00000000 --- a/samples/Terra/quote5.t +++ /dev/null @@ -1,20 +0,0 @@ - -c = global(0) -terra foo(a : int) - c = c + a -end - -local stmts = quote - foo(5) - foo(6) - foo(7) -end - -local stmts2 = {stmts,stmts} -terra doit() - stmts - stmts2 - return c -end -local test = require("test") -test.eq(doit(),54) \ No newline at end of file diff --git a/samples/Terra/quote6.t b/samples/Terra/quote6.t deleted file mode 100644 index 59a2b83f..00000000 --- a/samples/Terra/quote6.t +++ /dev/null @@ -1,12 +0,0 @@ -function mymacro() - return {`4,`5} -end -mymacro = macro(mymacro) - -local exps = {`2,`3, `mymacro()} - -terra doit() - return exps -end -local test = require("test") -test.meq({2,3,4,5},doit()) \ No newline at end of file diff --git a/samples/Terra/quote7.t b/samples/Terra/quote7.t deleted file mode 100644 index cbd4cb3b..00000000 --- a/samples/Terra/quote7.t +++ /dev/null @@ -1,23 +0,0 @@ -a = {} - -local c = terralib.includec("stdio.h") - - -a.c = quote - c.printf("hello\n") -end - -a.b = quote - var d = 4 - a.c - return d -end - - -terra foo() - a.c - a.b -end - -local test = require("test") -test.eq(foo(),4) \ No newline at end of file diff --git a/samples/Terra/quote8.t b/samples/Terra/quote8.t deleted file mode 100644 index afec0869..00000000 --- a/samples/Terra/quote8.t +++ /dev/null @@ -1,19 +0,0 @@ -a = {} - -local c = terralib.includec("stdio.h") - - -a.c = {`1,`2,`3} - -a.b = quote - return a.c,a.c -end - - -terra foo() - a.b -end - - -local test = require("test") -test.meq({1,2,3,1,2,3},foo()) diff --git a/samples/Terra/quote9.t b/samples/Terra/quote9.t deleted file mode 100644 index 834a4afd..00000000 --- a/samples/Terra/quote9.t +++ /dev/null @@ -1,19 +0,0 @@ -a = {} - -local c = terralib.includec("stdio.h") - - -a.c = {`1,`2,`3} - -a.b = quote - return a.c._0,(a.c)._0 -end - - -terra foo() - a.b -end - - -local test = require("test") -test.meq({1,1}, foo()) \ No newline at end of file diff --git a/samples/Terra/quoteblock.t b/samples/Terra/quoteblock.t deleted file mode 100644 index 3833dbbf..00000000 --- a/samples/Terra/quoteblock.t +++ /dev/null @@ -1,12 +0,0 @@ - -local a = symbol() -local myquote = quote - var [a] = 3 -end - -terra bar() - [myquote]; - return [a] -end - -print(bar()) \ No newline at end of file diff --git a/samples/Terra/quoteenv.t b/samples/Terra/quoteenv.t deleted file mode 100644 index 607631a1..00000000 --- a/samples/Terra/quoteenv.t +++ /dev/null @@ -1,25 +0,0 @@ ---quotes, unlike functions bind symbols eagerly ---function have :compile() to bind their symbols, but no similar thing exists ---for quotes, making it hard to control ---furthermore there aren't many use cases for late-binding quotes, ---but a bunch exist for needing early-bound quotes, like below: - - -function times5(x) - local c = `0 - for i = 1,5 do - c = `c + x - end - return c -end -times5 = macro(times5) - -terra foo() - var a = 3 - return times5(a) -end - -foo:printpretty() -foo:disas() -local test = require("test") -test.eq(foo(),15) diff --git a/samples/Terra/quoteselect.t b/samples/Terra/quoteselect.t deleted file mode 100644 index 46864e34..00000000 --- a/samples/Terra/quoteselect.t +++ /dev/null @@ -1,12 +0,0 @@ - -local a = {} - -local c = terralib.includec("stdio.h") - -b = `c.printf("hello\n") - -terra foo() - return b -end - -foo() \ No newline at end of file diff --git a/samples/Terra/rd.t b/samples/Terra/rd.t deleted file mode 100644 index c80487fc..00000000 --- a/samples/Terra/rd.t +++ /dev/null @@ -1 +0,0 @@ -C = terralib.includec("stdarg.h") \ No newline at end of file diff --git a/samples/Terra/receivercasts.t b/samples/Terra/receivercasts.t deleted file mode 100644 index 384c7bce..00000000 --- a/samples/Terra/receivercasts.t +++ /dev/null @@ -1,22 +0,0 @@ - -struct A { a : int } - -terra A.methods.foo(a : int) - return a + 1 -end - -function A.metamethods.__cast(from,to,exp) - if from == A and to == int then - return `exp.a - end - error("what") -end - - - -terra testit() - var a = A { 5 } - return a:foo() -end - -assert(6 == testit()) \ No newline at end of file diff --git a/samples/Terra/recfn.t b/samples/Terra/recfn.t deleted file mode 100644 index 3a0d757f..00000000 --- a/samples/Terra/recfn.t +++ /dev/null @@ -1,10 +0,0 @@ -local terra foo() : {} - bar() -end and -local terra bar() : {} - foo() -end - -bar = nil - -foo:printpretty() \ No newline at end of file diff --git a/samples/Terra/recoverfromerror.t b/samples/Terra/recoverfromerror.t deleted file mode 100644 index 92ef01a5..00000000 --- a/samples/Terra/recoverfromerror.t +++ /dev/null @@ -1,15 +0,0 @@ - - -terra what() - return " " / 1 -end - -dostuff = macro(function() - pcall(what.compile,what) - return 4 -end) - -terra foobar() - return dostuff() -end -assert(4 == foobar()) \ No newline at end of file diff --git a/samples/Terra/recstruct.t b/samples/Terra/recstruct.t deleted file mode 100644 index dff75679..00000000 --- a/samples/Terra/recstruct.t +++ /dev/null @@ -1,33 +0,0 @@ -local c = terralib.includecstring [[ - #include - #include -]] - - -struct Node { - next : &Node; - v : int; -} - -local N = 10 -terra foo() - var cur : &Node = nil - for i = 0, N do - var n = [&Node](c.malloc(sizeof(Node))) - n.v = i - n.next = cur - cur = n - end - var sum = 0 - while cur ~= nil do - c.printf("%d\n",cur.v) - sum = sum + cur.v - var old = cur - cur = cur.next - c.free(old) - end - return sum -end - -local test = require("test") -test.eq(foo(),N * (N - 1) / 2) \ No newline at end of file diff --git a/samples/Terra/recstruct2.t b/samples/Terra/recstruct2.t deleted file mode 100644 index 0c92d4d8..00000000 --- a/samples/Terra/recstruct2.t +++ /dev/null @@ -1,17 +0,0 @@ - - -local struct A { b : &B } - and struct B { a : &A } - -struct C { a : &A, b : &B, c : &C } - -local struct D {} - -terra foo() - var a : A, b : B, c : C - a.b = &b - b.a = &a - c.c = &c -end - -foo() \ No newline at end of file diff --git a/samples/Terra/rename.t b/samples/Terra/rename.t deleted file mode 100644 index 323c09d7..00000000 --- a/samples/Terra/rename.t +++ /dev/null @@ -1,8 +0,0 @@ -terralib.includecstring [[ - int foo() { return 3; } -]] - -terra what() return 4 end - - -terralib.saveobj("foo.o",{foo = what}) \ No newline at end of file diff --git a/samples/Terra/renaming.t b/samples/Terra/renaming.t deleted file mode 100644 index c0674d6f..00000000 --- a/samples/Terra/renaming.t +++ /dev/null @@ -1,21 +0,0 @@ - -C = terralib.includec("stdio.h") -terra main() - C.printf("what\n") -end -main:setinlined(false) - -terra realmain() - main() -end - -terra foo() -end -and terra foo(a : int) -end - -foo:compile() - -terralib.saveobj("renamed",{ main = realmain }) - -terralib.dumpmodule() \ No newline at end of file diff --git a/samples/Terra/requiretwice.t b/samples/Terra/requiretwice.t deleted file mode 100644 index 4999edc6..00000000 --- a/samples/Terra/requiretwice.t +++ /dev/null @@ -1,3 +0,0 @@ -A = require("lib.golike") -B = require("lib.golike") -assert(A == B) \ No newline at end of file diff --git a/samples/Terra/rvaluerecv.t b/samples/Terra/rvaluerecv.t deleted file mode 100644 index 5ccad573..00000000 --- a/samples/Terra/rvaluerecv.t +++ /dev/null @@ -1,30 +0,0 @@ -struct A { a : int } - -terra A:foo() - self.a = self.a + 1 - return self.a -end - -terra A.methods.foo2(self : A) - self.a = self.a + 1 - return self.a -end - - -mya = global(A) -mya:set({0}) - -terra geta() - return mya -end - -terra bar() - var v0 = mya.a - var v1 = geta():foo() - var v2 = mya.a - var v3 = geta():foo2() - var v4 = mya.a - return v0,v1,v2,v3,v4 -end -test = require("test") -test.meq({0,1,0,1,0},bar()) \ No newline at end of file diff --git a/samples/Terra/scope.t b/samples/Terra/scope.t deleted file mode 100644 index 866d7e26..00000000 --- a/samples/Terra/scope.t +++ /dev/null @@ -1,13 +0,0 @@ -terra scope() - var a = 4 - var b = 0 - b = b + a - do - var a = 5 - b = b + a - end - b = b + a - return b -end -local test = require('test') -test.eq(scope(),13) \ No newline at end of file diff --git a/samples/Terra/selectoverload.t b/samples/Terra/selectoverload.t deleted file mode 100644 index b4b33d96..00000000 --- a/samples/Terra/selectoverload.t +++ /dev/null @@ -1,25 +0,0 @@ -struct Vec { data : float[3] } - - -local get = {} -get.x = terra(self : &Vec) - return self.data[0] -end -get.y = macro(function(self) - return `self.data[1] -end) - -Vec.metamethods.__entrymissing = macro(function(name,self) - return `[get[name]](&self) -end) - -terra bar() - var a = Vec { array(1.f,2.f,3.f) } - a.y = a.y + 1 - var pa = &a - return a.x + a.y + pa.x -end - -local test = require("test") -test.eq(bar(),5) - diff --git a/samples/Terra/setname.t b/samples/Terra/setname.t deleted file mode 100644 index 06c15855..00000000 --- a/samples/Terra/setname.t +++ /dev/null @@ -1,7 +0,0 @@ - -two = terra() - return 1 + 1 -end -two:setname("two") - -two:disas() \ No newline at end of file diff --git a/samples/Terra/setter.t b/samples/Terra/setter.t deleted file mode 100644 index abd55acc..00000000 --- a/samples/Terra/setter.t +++ /dev/null @@ -1,39 +0,0 @@ - -struct A { -a : int; -b : int; -} - -terra A.metamethods.__update(self : &A, a : int, b : int) - self.a = a - self.b = b -end -terra A.metamethods.__apply(self : &A, a : int) - return a + self.b -end - -struct B { - a : int -} - - -B.metamethods.__update = macro(function(me,arg,arg2,rhs) - return quote me.a = arg + arg2 + rhs end -end) - -B.metamethods.__setentry = macro(function(field,self,rhs) - field = field:sub(2) - return quote self.[field] = self.[field] + rhs end -end) - -terra foo() - var a : A - a(4) = 5 - var b : B - b(3,4) = 5 - b._a = 1 - return a.a + a.b + a(3) + b.a -end - ---foo:printpretty() -assert(foo() == 9+8+3+4+5+1) diff --git a/samples/Terra/sgemm-old.t b/samples/Terra/sgemm-old.t deleted file mode 100644 index 36d58007..00000000 --- a/samples/Terra/sgemm-old.t +++ /dev/null @@ -1,205 +0,0 @@ - -local IO = terralib.includec("stdio.h") -local stdlib = terralib.includec("stdlib.h") - - - -local NB = 64 -local V = 8 - -terra vecload(data : &float, idx : int) - var addr = &data[idx] - return @[&vector(float,V)](addr) -end - -haddavx = terralib.intrinsic("llvm.x86.avx.hadd.ps.256", { vector(float,8), vector(float,8) } -> vector(float,8)) -terra hadd(v : vector(float,8)) - var v1 = haddavx(v,v) - var v2 = haddavx(v1,v1) - return v2[0] + v2[4] -end - - -local AR = 2 -local BR = 2 -local KR = 2 -local NK = 64 - -local BLOCKB = true -local BLOCKA = true - -local function isinteger(x) return math.floor(x) == x end - -assert(isinteger(NK / (KR * V))) -assert(isinteger(NB / AR )) -assert(isinteger(NB / BR )) - - - -blockregisters = macro(function(C,A,B,K,lda,ldc,mm,nn,kk,m,n) - local function mkmatrix(nm,I,J) - local r = {} - for i = 0,I-1 do - r[i] = {} - for j = 0,J-1 do - r[i][j] = symbol(nm..tostring(i)..tostring(j)) - end - end - return r - end - local as,bs,cs = mkmatrix("a",AR,KR),mkmatrix("b",BR,KR),mkmatrix("c",AR,BR) - local stmts = terralib.newlist() - for i = 0, AR-1 do - for j = 0, BR-1 do - stmts:insert(quote var [cs[i][j]] : vector(float,V) = 0.f end) - end - end - - local k = symbol("k") - local kloopbody = terralib.newlist() - - local alreadyloaded = {} - local function get(vs,i,j,loadfn) - if not alreadyloaded[vs[i][j]] then - alreadyloaded[vs[i][j]] = true - kloopbody:insert(loadfn(vs[i][j])) - end - return vs[i][j] - end - - local function getA(i,j) - return get(as,i,j,function(sym) - local result - if BLOCKA then - result = quote - var [sym] = vecload(A, mm * K + NB*(kk + m - mm + i) + k - kk + j *V) - end - else - result = quote - var [sym] = vecload(A, (m + i) * lda + k + j * V) - end - end - return result - end) - end - - local function getB(i,j) - return get(bs,i,j,function(sym) - local result - if BLOCKB then - result = quote - var [sym] = vecload(B, nn * K + NB*(kk + n - nn + i) + k - kk + j * V) - end - else - result = quote - var [sym] = vecload(B, (n + i) * K + k + j * V) - end - end - return result - end) - end - - for l = 0, KR-1 do - for i = 0, AR-1 do - for j = 0, BR-1 do - local aa = getA(i,l) - local bb = getB(j,l) - kloopbody:insert(quote - [cs[i][j]] = [cs[i][j]] + aa * bb - end) - end - end - end - - stmts:insert(quote - for [k] = kk, kk + NK, V*KR do - kloopbody - end - end) - - for i = 0, AR-1 do - for j = 0, BR-1 do - local function getsum(b,e) - if b + 1 == e then - return `[cs[i][j]][b] - else - local mid = (e + b)/2 - assert(math.floor(mid) == mid) - local lhs = getsum(b,mid) - local rhs = getsum(mid,e) - return `lhs + rhs - end - end - local sum - if V == 8 and false then - sum = `hadd([cs[i][j]]) - else - sum = getsum(0,V) - end - stmts:insert(quote - var r = sum - if kk == 0 then - C[(m + i)*ldc + (n + j)] = r - else - C[(m + i)*ldc + (n + j)] = C[(m + i)*ldc + (n + j)] + r - end - end) - end - end - - return stmts -end) - -terra my_sgemm(gettime : {} -> double, M : int, N : int, K : int, alpha : float, A : &float, lda : int, B : &float, ldb : int, - beta : float, C : &float, ldc : int) - - var TB = [&float](stdlib.malloc(K * N * sizeof(float))) - var TA = A - for kk = 0,K,NK do - for nn = 0,N,NB do - for k = kk,kk+NK do - for n = nn,nn+NB do - if BLOCKB then - TB[nn * K + NB*(kk + n - nn) + k - kk] = B[k*ldb + n] - else - TB[n*K + k] = B[k*ldb + n] - end - end - end - end - end - - if BLOCKA then - TA = [&float](stdlib.malloc(M * K * sizeof(float))) - for mm = 0,M,NB do - for kk = 0,K,NK do - for m = mm,mm+NB do - for k = kk,kk+NK do - TA[mm * K + NB*(kk + m - mm) + k - kk] = A[m*lda + k] - end - end - end - end - end - - for mm = 0,M,NB do - for nn = 0, N,NB do - for kk = 0, K, NK do - for m = mm,mm+NB,AR do - for n = nn,nn+NB,BR do - blockregisters(C,TA,TB,K,lda,ldc,mm,nn,kk,m,n) - end - end - end - end - end - stdlib.free(TB) - if BLOCKA then - stdlib.free(TA) - end -end - -my_sgemm:compile() -my_sgemm:printpretty() - -terralib.saveobj("my_sgemm.o", {my_sgemm = my_sgemm}) \ No newline at end of file diff --git a/samples/Terra/sgemm.t b/samples/Terra/sgemm.t deleted file mode 100644 index c5121daa..00000000 --- a/samples/Terra/sgemm.t +++ /dev/null @@ -1,162 +0,0 @@ - -local IO = terralib.includec("stdio.h") -local stdlib = terralib.includec("stdlib.h") - - - -local NB = 72 -local V = 8 - -terra vecload(data : &float, idx : int) - var addr = &data[idx] - return @[&vector(float,V)](addr) -end - -haddavx = terralib.intrinsic("llvm.x86.avx.hadd.ps.256", { vector(float,8), vector(float,8) } -> vector(float,8)) -terra hadd(v : vector(float,8)) - var v1 = haddavx(v,v) - var v2 = haddavx(v1,v1) - return v2[0] + v2[4] -end - - -local AR = 2 -local BR = 4 -local KR = 1 -local NK = 72 - - -local function isinteger(x) return math.floor(x) == x end - -assert(isinteger(NK / (KR * V))) -assert(isinteger(NB / AR )) -assert(isinteger(NB / BR )) - - - -blockregisters = macro(function(C,A,B,K,lda,ldc,m,n,kk) - local function mkmatrix(nm,I,J) - local r = {} - for i = 0,I-1 do - r[i] = {} - for j = 0,J-1 do - r[i][j] = symbol(nm..tostring(i)..tostring(j)) - end - end - return r - end - local as,bs,cs = mkmatrix("a",AR,KR),mkmatrix("b",BR,KR),mkmatrix("c",AR,BR) - local stmts = terralib.newlist() - for i = 0, AR-1 do - for j = 0, BR-1 do - stmts:insert(quote var [cs[i][j]] : vector(float,V) = 0.f end) - end - end - - local k = symbol("k") - local kloopbody = terralib.newlist() - - local alreadyloaded = {} - local function get(vs,i,j,loadfn) - if not alreadyloaded[vs[i][j]] then - alreadyloaded[vs[i][j]] = true - kloopbody:insert(loadfn(vs[i][j])) - end - return vs[i][j] - end - - local function getA(i,j) - return get(as,i,j,function(sym) - return quote - var [sym] = vecload(A, (m + i) * lda + k + j * V) - end - end) - end - - local function getB(i,j) - return get(bs,i,j,function(sym) - return quote - var [sym] = vecload(B, (n + i) * K + k + j * V) - end - end) - end - - for l = 0, KR-1 do - for i = 0, AR-1 do - for j = 0, BR-1 do - local aa = getA(i,l) - local bb = getB(j,l) - kloopbody:insert(quote - [cs[i][j]] = [cs[i][j]] + aa * bb - end) - end - end - end - - stmts:insert(quote - for [k] = kk, kk + NK, V*KR do - kloopbody - end - end) - - for i = 0, AR-1 do - for j = 0, BR-1 do - local function getsum(b,e) - if b + 1 == e then - return `[cs[i][j]][b] - else - local mid = (e + b)/2 - assert(math.floor(mid) == mid) - local lhs = getsum(b,mid) - local rhs = getsum(mid,e) - return `lhs + rhs - end - end - local sum - if V == 8 and terralib.llvmversion ~= 31 then - sum = `hadd([cs[i][j]]) - else - sum = getsum(0,V) - end - stmts:insert(quote - var r = sum - if kk == 0 then - C[(m + i)*ldc + (n + j)] = r - else - C[(m + i)*ldc + (n + j)] = C[(m + i)*ldc + (n + j)] + r - end - end) - end - end - - return stmts -end) - -terra my_sgemm(gettime : {} -> double, M : int, N : int, K : int, alpha : float, A : &float, lda : int, B : &float, ldb : int, - beta : float, C : &float, ldc : int) - - var TB = [&float](stdlib.malloc(K * N * sizeof(float))) - for k = 0,K do - for n = 0,N do - TB[n*K + k] = B[k*ldb + n] - end - end - - for mm = 0,M,NB do - for nn = 0, N,NB do - for kk = 0, K, NK do - for m = mm,mm+NB,AR do - for n = nn,nn+NB,BR do - blockregisters(C,A,TB,K,lda,ldc,m,n,kk) - end - end - end - end - end - stdlib.free(TB) -end - -my_sgemm:compile() -my_sgemm:printpretty() - -terralib.saveobj("my_sgemm.o", {my_sgemm = my_sgemm}) diff --git a/samples/Terra/sgemm3.t b/samples/Terra/sgemm3.t deleted file mode 100644 index 4c625cb6..00000000 --- a/samples/Terra/sgemm3.t +++ /dev/null @@ -1,124 +0,0 @@ - -function symmat(name,I,...) - if not I then return symbol(name) end - local r = {} - for i = 0,I-1 do - r[i] = symmat(name..tostring(i),...) - end - return r -end - - -llvmprefetch = terralib.intrinsic("llvm.prefetch",{&opaque,int,int,int} -> {}) - - - -function genkernel(NB, RM, RN, V,alpha) - - local A,B,C,mm,nn,ld = symbol("A"),symbol("B"),symbol("C"),symbol("mn"),symbol("nn"),symbol("ld") - local lda,ldb,ldc = ld,ld,ld - local a,b,c,caddr = symmat("a",RM), symmat("b",RN), symmat("c",RM,RN), symmat("caddr",RM,RN) - local k = symbol("k") - - local loadc,storec = terralib.newlist(),terralib.newlist() - local VT = vector(float,V) - local VP = &VT - for m = 0, RM-1 do - for n = 0, RN-1 do - loadc:insert(quote - var [caddr[m][n]] = C + m*ldc + n*V - var [c[m][n]] = alpha * @VP([caddr[m][n]]) - end) - storec:insert(quote - @VP([caddr[m][n]]) = [c[m][n]] - end) - end - end - - local calcc = terralib.newlist() - - for n = 0, RN-1 do - calcc:insert(quote - var [b[n]] = @VP(&B[n*V]) - end) - end - for m = 0, RM-1 do - calcc:insert(quote - var [a[m]] = VT(A[m*lda]) - end) - end - for m = 0, RM-1 do - for n = 0, RN-1 do - calcc:insert(quote - [c[m][n]] = [c[m][n]] + [a[m]] * [b[n]] - end) - end - end - - - return terra([A] : &float, [B] : &float, [C] : &float, [ld] : int64) - for [mm] = 0, NB, RM do - for [nn] = 0, NB,RN*V do - [loadc]; - for [k] = 0, NB do - llvmprefetch(B + 4*ldb,0,3,1); - [calcc]; - B = B + ldb - A = A + 1 - end - [storec]; - A = A - NB - C = C + RN*V - B = B - ldb*NB + RN*V - end - C = C + RM * ldb - NB - B = B - NB - A = A + lda*RM - end - end -end - -local NB = 48 -local NB2 = 5 * NB - -local V = 1 - -l1dgemm0 = genkernel(NB,1,1,V,0) -l1dgemm1 = genkernel(NB,1,1,V,1) - -terra min(a : int, b : int) - return terralib.select(a < b, a, b) -end - -local stdlib = terralib.includec("stdlib.h") -local IO = terralib.includec("stdio.h") - -terra my_sgemm(gettime : {} -> double, M : int, N : int, K : int, alpha : float, A : &float, lda : int, B : &float, ldb : int, - beta : float, C : &float, ldc : int) - - - for mm = 0,M,NB2 do - for nn = 0,N,NB2 do - for kk = 0,K, NB2 do - for m = mm,min(mm+NB2,M),NB do - for n = nn,min(nn+NB2,N),NB do - for k = kk,min(kk+NB2,K),NB do - --IO.printf("%d %d starting at %d\n",m,k,m*lda + NB*k) - if k == 0 then - l1dgemm0(A + (m*lda + k), - B + (k*ldb + n), - C + (m*ldc + n),lda) - else - l1dgemm1(A + (m*lda + k), - B + (k*ldb + n), - C + (m*ldc + n),lda) - end - end - end - end - end - end - end -end - -terralib.saveobj("my_sgemm.o", { my_sgemm = my_sgemm }) \ No newline at end of file diff --git a/samples/Terra/sgemmkernel.t b/samples/Terra/sgemmkernel.t deleted file mode 100644 index 46c21454..00000000 --- a/samples/Terra/sgemmkernel.t +++ /dev/null @@ -1,164 +0,0 @@ - -function symmat(name,I,...) - if not I then return symbol(name) end - local r = {} - for i = 0,I-1 do - r[i] = symmat(name..tostring(i),...) - end - return r -end - - -function genkernel(NB, RM, RN, V,alpha) - - local terra vecload(data : &float, idx : int) - var addr = &data[idx] - return @[&vector(float,V)](addr) - end - local terra vecstore(data : &float, idx : int, v : vector(float,V)) - var addr = &data[idx] - @[&vector(float,V)](addr) = v - end - - local A,B,C,mm,nn = symbol("A"),symbol("B"),symbol("C"),symbol("mn"),symbol("nn") - local lda,ldb,ldc = NB,NB,NB - local a,b,c,caddr = symmat("a",RM), symmat("b",RN), symmat("c",RM,RN), symmat("caddr",RM,RN) - local k = symbol("k") - - local loadc,storec = terralib.newlist(),terralib.newlist() - local VT = vector(float,V) - local VP = &VT - for m = 0, RM-1 do - for n = 0, RN-1 do - loadc:insert(quote - var [caddr[m][n]] = C + (mm+m)*ldc + nn + n*V - var [c[m][n]] = alpha * @VP([caddr[m][n]]) - end) - storec:insert(quote - @VP([caddr[m][n]]) = [c[m][n]] - end) - end - end - - local calcc = terralib.newlist() - - for n = 0, RN-1 do - calcc:insert(quote - var [b[n]] = @VP(&B[k*ldb + nn + n*V]) - end) - end - for m = 0, RM-1 do - calcc:insert(quote - var [a[m]] = VT(A[(mm+m)*lda + k]) - end) - end - for m = 0, RM-1 do - for n = 0, RN-1 do - calcc:insert(quote - [c[m][n]] = [c[m][n]] + [a[m]] * [b[n]] - end) - end - end - - - return terra([A] : &float, [B] : &float, [C] : &float) - for [mm] = 0, NB, RM do - for [nn] = 0, NB,RN*V do - [loadc]; - for [k] = 0, NB do - [calcc]; - end - [storec]; - end - end - end -end - -local NB = 32 -local NB2 = 8 * NB - -local V = 8 - -l1sgemm0 = genkernel(NB,2,4,V,0) -l1sgemm1 = genkernel(NB,2,4,V,1) - -terra min(a : int, b : int) - return terralib.select(a < b, a, b) -end - -local stdlib = terralib.includec("stdlib.h") -local IO = terralib.includec("stdio.h") - -local VT = vector(float,V) - -terra my_sgemm(gettime : {} -> double, M : int, N : int, K : int, alpha : double, A : &float, lda : int, B : &float, ldb : int, - beta : float, C : &float, ldc : int) - - var AA = [&float](stdlib.malloc(sizeof(float)*M*K)) - var BB = [&float](stdlib.malloc(sizeof(float)*K*N)) - var CC = [&float](stdlib.malloc(sizeof(float)*M*N)) - - var i = 0 - for mm = 0,M,NB do - for kk = 0,K,NB do - for m = mm,mm+NB do - for k = kk,kk+NB,V do - @[&VT](&AA[i]) = @[&VT](&A[m*lda + k]) - i = i + V - end - end - end - end - i = 0 - for kk = 0,K,NB do - for nn = 0,N,NB do - for k = kk,kk+NB do - for n = nn,nn+NB,V do - @[&VT](&BB[i]) = @[&VT](&B[k*ldb + n]) - i = i + V - end - end - end - end - - for mm = 0,M,NB2 do - for nn = 0,N,NB2 do - for kk = 0,K, NB2 do - for m = mm,min(mm+NB2,M),NB do - for n = nn,min(nn+NB2,N),NB do - for k = kk,min(kk+NB2,K),NB do - --IO.printf("%d %d starting at %d\n",m,k,m*lda + NB*k) - if k == 0 then - l1sgemm0(AA + (m*lda + NB*k), - BB + (k*ldb + NB*n), - CC + (m*ldc + NB*n)) - else - l1sgemm1(AA + (m*lda + NB*k), - BB + (k*ldb + NB*n), - CC + (m*ldc + NB*n)) - end - end - end - end - end - end - end - - i = 0 - for mm = 0,M,NB do - for nn = 0,N,NB do - for m = mm,mm+NB do - for n = nn,nn+NB,V do - @[&VT](&C[m*ldc + n]) = @[&VT](&CC[i]) - i = i + V - end - end - end - end - - stdlib.free(AA) - stdlib.free(BB) - stdlib.free(CC) -end - -terralib.saveobj("my_sgemmkernel.o", { my_sgemm = my_sgemm }) \ No newline at end of file diff --git a/samples/Terra/shallowfreeze.t b/samples/Terra/shallowfreeze.t deleted file mode 100644 index 7d5b3d9e..00000000 --- a/samples/Terra/shallowfreeze.t +++ /dev/null @@ -1,24 +0,0 @@ - - -struct B { - d : int -} -struct A { - b : &B; - c : int; - d : int; - e : int; -} - - -terra foo() : A - return A {nil} -end - -foo:disas() - -print(foo()) - - - -terralib.dumpmodule() \ No newline at end of file diff --git a/samples/Terra/sharedlib.t b/samples/Terra/sharedlib.t deleted file mode 100644 index 64a7afe9..00000000 --- a/samples/Terra/sharedlib.t +++ /dev/null @@ -1,22 +0,0 @@ - - -terra foo(a : int, b : int) - return a + b -end - -local ffi = require 'ffi' - -local name = (ffi.os == "Windows" and "foo.dll" or "foo.so") - -local args = {} - -if ffi.os == "Windows" then - args = {"/IMPLIB:foo.lib","/EXPORT:foo" } -end - -terralib.saveobj(name,{ foo = foo }, args) - -local foo2 = terralib.externfunction("foo", {int,int} -> int ) -terralib.linklibrary("./"..name) - -assert(4 == foo2(1,3)) diff --git a/samples/Terra/shift.t b/samples/Terra/shift.t deleted file mode 100644 index 67794ebd..00000000 --- a/samples/Terra/shift.t +++ /dev/null @@ -1,7 +0,0 @@ -local test = require("test") - -terra foo(a : int) - return 1 << 2, a >> 1, -4 >> 1, uint32(-a) >> 1 -end - -test.meq({4,2,-2,2147483646},foo(4)) diff --git a/samples/Terra/signext.t b/samples/Terra/signext.t deleted file mode 100644 index a9a17096..00000000 --- a/samples/Terra/signext.t +++ /dev/null @@ -1,12 +0,0 @@ - - -terra bar() - var a : uint8 = 255 - var b = foo(a) - return a == b -end and -terra foo(a : uint8) - return a -end - -print(bar()) \ No newline at end of file diff --git a/samples/Terra/simple.t b/samples/Terra/simple.t deleted file mode 100644 index 8d21c5eb..00000000 --- a/samples/Terra/simple.t +++ /dev/null @@ -1,6 +0,0 @@ - -terra simple(a : int) - return a + a -end -local test = require("test") -test.eq(simple(2),4) \ No newline at end of file diff --git a/samples/Terra/simpleadd.t b/samples/Terra/simpleadd.t deleted file mode 100644 index dd8e42cd..00000000 --- a/samples/Terra/simpleadd.t +++ /dev/null @@ -1,15 +0,0 @@ -struct Complex { real : float, imag : float } - -terra Complex.metamethods.__add(a : Complex, b : Complex) - return Complex { a.real + b.real, a.imag + b.imag } -end - - -terra foo() - var a = Complex { 1, 2 } - var b = Complex { 3, 4 } - var c = a + b - return c.real,c.imag -end - -print(foo()) \ No newline at end of file diff --git a/samples/Terra/simpleapply.t b/samples/Terra/simpleapply.t deleted file mode 100644 index e6a67034..00000000 --- a/samples/Terra/simpleapply.t +++ /dev/null @@ -1,19 +0,0 @@ -struct Vec { data : int[4] } -Vec.metamethods.__apply = terra(self : &Vec, i : int) - return self.data[i] -end - -struct Vec2 { data : int[4] } -Vec2.metamethods.__apply = macro(function(self,b) - return `self.data[b] -end) - -terra bar() - var a = Vec { array(1,2,3,4) } - var b = Vec2 { array(1,2,3,4) } - b(2) = b(2) + 1 - return b(2) + a(2) -end - -local test = require("test") -test.eq(bar(),7) \ No newline at end of file diff --git a/samples/Terra/simpleglobal.t b/samples/Terra/simpleglobal.t deleted file mode 100644 index ff8964ce..00000000 --- a/samples/Terra/simpleglobal.t +++ /dev/null @@ -1,19 +0,0 @@ - -local a = terralib.global(int) -local b = terralib.global(5) -local c = terralib.global(int,3) -terra foo() - a = 4 -end - - -terra bar() - return c + a + b -end - -foo() -assert(bar() == 12) - -b:set(4) - -assert(bar() == 11) \ No newline at end of file diff --git a/samples/Terra/simplerec.t b/samples/Terra/simplerec.t deleted file mode 100644 index 5d0b98ff..00000000 --- a/samples/Terra/simplerec.t +++ /dev/null @@ -1,25 +0,0 @@ - - - -local terra bar() - return 1 -end -and struct A { - a : int -} -and local struct B { - a : int -} -and terra B:foo() - return self.a -end -and terra foo() - var b , a = B{4}, A{5} - return 1 + b:foo() -end -and local terra mydecl -and struct mystructdecl - -print(bar()) - -print(foo()) diff --git a/samples/Terra/simplestruct.t b/samples/Terra/simplestruct.t deleted file mode 100644 index fc0b5ac8..00000000 --- a/samples/Terra/simplestruct.t +++ /dev/null @@ -1,10 +0,0 @@ - -struct A { - a : int -} - -terra foo(a : &A) - return a -end - -print(foo(terralib.new(A,{3}))) diff --git a/samples/Terra/simplevec.t b/samples/Terra/simplevec.t deleted file mode 100644 index b75f3d1a..00000000 --- a/samples/Terra/simplevec.t +++ /dev/null @@ -1,12 +0,0 @@ - -terra sum(input : &float, N : int) - var acc : vector(float,4) = vector(0.f,0.f,0.f,0.f) - for i = 0,N,4 do - --cast the floats to float4s and load - var entry = @[&vector(float,4)](input + i) - acc = acc + entry - end - return acc[0] + acc[1] + acc[2] + acc[3] -end - -sum:disas() diff --git a/samples/Terra/sintable.t b/samples/Terra/sintable.t deleted file mode 100644 index c1606563..00000000 --- a/samples/Terra/sintable.t +++ /dev/null @@ -1,17 +0,0 @@ -local N = 32 -local tbl = terralib.new(float[N]) -for i = 1,N do - tbl[i-1] = math.sin( 2 * math.pi * (i-1)/N) -end - -local ctable = terralib.constant(tbl) - -terra sintable(a : float) : float - var idx = int(a / (2 * math.pi) * N) - return ctable[idx] -end - -sintable:disas() - -print(sintable(0)) -print(sintable(math.pi/4)) \ No newline at end of file diff --git a/samples/Terra/special.t b/samples/Terra/special.t deleted file mode 100644 index 218aa3a2..00000000 --- a/samples/Terra/special.t +++ /dev/null @@ -1,61 +0,0 @@ - -local test = require("test") - -function mkspecial(N) - local terra pow(a : double) - var i,r = 0,1.0 - while i < N do - r = r * a - i = i + 1 - end - return r - end - return pow -end - - -local pow2 = mkspecial(2) -local pow3 = mkspecial(3) - -test.eq(pow2(2),4) -test.eq(pow3(2),8) - - -function mkor(T) - local terra fn(a : T, b : T) : T - return a or b - end - return fn -end - -local lor = mkor(bool) -local aor = mkor(int) - -test.eq(lor(1,2),true) -test.eq(aor(1,2),3) - - ---[[ -function my_lua_fun() - - val my_list = new_list() - defer delete(my_list) - - - - return { ["a"] = 1, ["b"] = 2 } -end ---wess weimer PhD on controlling actions -a:my_method(b) - -a.my_method(a,b) - -var a : T -a:my_method(b) -T.my_method(a,b) - -Pair = typedef(struct { a = int, b = int}) - -var a : Pair = { 1, 3 } -var a : Pair = my_lua_fun() -]] \ No newline at end of file diff --git a/samples/Terra/speed.t b/samples/Terra/speed.t deleted file mode 100644 index ceca0264..00000000 --- a/samples/Terra/speed.t +++ /dev/null @@ -1,30 +0,0 @@ -local c = terralib.includecstring [[ - #include - #include -]] - -terra doit(N : int64) - var cur,last = 1ULL,1ULL - for i = 0ULL, (N-2ULL) do - cur,last = cur+last,cur - end - return cur -end -terra main(argc : int, argv : &&int8) - var N = 4ULL - if argc == 2 then - N = c.atoi(argv[1]) - end - var result = doit(N) - c.printf("%lld\n",result) -end - -terra what() - return c.atoi("54") -end - -local test = require("test") -print(what()) -print(test.time( function() doit:compile() end)) -print(test.time( function() doit(100000000) end)) -print(test.time( function() terralib.saveobj("speed",{main = main}) end)) diff --git a/samples/Terra/splitprimary.t b/samples/Terra/splitprimary.t deleted file mode 100644 index aed90417..00000000 --- a/samples/Terra/splitprimary.t +++ /dev/null @@ -1,19 +0,0 @@ -r = 1 -local function foo(a) - r = a - return r -end -local b = foo(1) -(foo)(3) -assert(b + r == 4) - -terra testescapes() - var a = [4] - [ quote - a = a + 1 - end - ] - return [ `&a ][0] -end - -assert(testescapes() == 5) \ No newline at end of file diff --git a/samples/Terra/ssimple.t b/samples/Terra/ssimple.t deleted file mode 100644 index a50f90a8..00000000 --- a/samples/Terra/ssimple.t +++ /dev/null @@ -1,477 +0,0 @@ -function failit(fn) - local success,msg = pcall(fn) - if success then - error("failed to fail.",2) - elseif not string.match(msg,"Errors reported during") then - error("failed wrong: "..msg,2) - end -end - -terra foo() - return 1 -end - -a = 4 -terra foo2() - return a -end -b = 4.5 -terra foo3() - return b -end - -terra foo4() - var a = 3 - return a -end - - - -sa = symbol("myname") - -terra foo5() - var [sa] = 5 - return sa -end - -whatwhat = `3 + b - -terra foo6() - return whatwhat -end - -local whatwhat2 = {4,5} - -terra foo7() - return 3,4,5,whatwhat,whatwhat2 -end - -terra foo8() - return whatwhat2,4 -end - -local test = require("test") -assert(foo() == 1) -assert(foo2() == 4) -assert(foo3() == 4.5) -assert(foo4() == 3) -assert(foo5() == 5) -assert(foo6() == 7.5) -test.meq({3,4,5,7.5,4,5},foo7()) -test.meq({4,5,4},foo8()) - -local a = { b = {c = 4}} -terra foo9() - return a.["b"].c -end -print(foo9()) - -struct A { a : int } - -A.methods.what = terra() return 4 end - - -terra foo10() - return A.what() -end - -assert(foo10() == 4) - - -terra foo11() - var c = 3 - return [4 + 5 + a.b.c] + [c] -end - -assert(foo11() == 16) - -failit(function() - local terra missingvar() - return missing - end -end) -local b = coroutine.create(failit) -failit(function() - return `sa.foobar,`b.e -end) -failit(function() - return `a.d -end) -failit(function() - return `a.[1+"nope"] -end) -failit(function() - return `a.[1] -end) - -over = symbol() - -anint = symbol(int) - -terra foo13() - var [anint] - anint = 3 - return anint -end -assert(foo13() == 3) - -terra foo12() - goto [over] - while true do - end - ::[over]:: -end - -foo12() - - -terra foo14() : {int,double} - return 3.5,4.5 -end - -test.meq({3,4.5},foo14()) - -terra foo15() : int - return 3.5 -end -assert(foo15() == 3) - -failit(function() - local terra foo16() : 3 - end -end) - -terra foo16() - var r = 0 - for i = 0,10 do - r = r + 2 - end - return r -end - -assert(foo16() == 20) - -terra foo17() - var i = 0 - repeat - i = i + 1 - var b = i + 1 - until b == 10 - repeat - until true - return i -end -assert(foo17() == 9) - -local terra foo18() - var a : int, b : double = 2.5,2.5 - return a,b -end - -test.meq({2,2.5},foo18()) - -failit(function() - local function doit() - return 1 + {} - end - return `[doit()] -end) - -failit(function() -local terra foo19() - var a : 3, b : double = 2.5,2.5 - return a,b -end -foo19() -end) - -failit(function() -local terra foo20() - var a : int, a : double = 2.5,2.5 - return a,a -end -foo20() -end) - -foo21s = symbol() - -local terra foo21() - var [foo21s],b = 3,4 - return b + foo21s -end -assert(foo21() == 7) - -failit(function() -local terra foo20() - var ["a"] : int, ["b"] = 4,5 - return a -end -end) - -failit(function() - return quote var a end -end) - -astring = "astring" - -local terra foo22() - return astring[0] -end - -assert(foo22() == 97) - -local aquote = `7 -local atree = aquote.tree - -terra foo23() - return atree -end - -assert(foo23() == 7) - -terra foo24(a : int) - return 3,4 + a -end - -terra foo25() - var c,a,b = 4,foo24(3) - return a + b + c -end - - - -assert(foo25() == 14) - -local obfuscate = { foo24 } -terra foo26() - var c,a,b = 4,obfuscate(3) - return a + b + c -end - -local obfuscate2 = { `foo24(3) } -terra foo27() - obfuscate2 - foo24(3) -end -foo27() - -assert(foo26() == 14) - -failit(function() -local terra foo26a(a : int) - if a == 0 then - return a - else - return foo26a(a - 1) + 1 - end -end -foo26a(3) -end) - -local terra foo26b(a : int) : int - if a == 0 then - return a - else - var foo26bptr = foo26b - return foo26b(a - 1) + foo26bptr(0) + 1 - end -end - -assert(foo26b(3) == 3) - - -failit(function() - (terra() return (3)(4) end)() -end) - -failit(function() - local terra notdefined - local terra callnotdefined() - return notdefined(1) - end - callnotdefined() -end) - - - local terra norets() - end - local terra callnotdefined() - return (norets()) - end - callnotdefined() - -local terra returns2() return 1,2 end - -terra foo29(a : int) - if a > 1 then - return (returns2()._0) - else - return 5 - end -end - -assert(foo29(3) == 1 and foo29(0) == 5) - - -terra foo30() - print(4) -end - -foo30() - - -local terra notdefined -local terra definedtwice(a : int) return a end -terra definedtwice(a : int, b : int) return a + b end - -failit(function() -local terra foo31() - return (notdefined), (definedtwice) -end -foo31() -end) - -terra foo35() - return definedtwice(3) + definedtwice(3,4) -end - - -local terra foo36() - var r = returns2() - return definedtwice(unpackstruct(r)) -end -assert(3 == foo36()) - -assert(foo35() == 10) - -struct B { - a : int; - b : double; -} - -terra B:add() - return self.a + self.b -end - -terra B:inc(v : int) - self.a = self.a + v -end - -B.metamethods.__apply = terra(self : &B, v :int) - return v + v -end - -B.metamethods.__entrymissing = macro(function() return 8 end) - -struct C { - a : int; -} - -terra B.metamethods.__add(self : &B, a : int, b : int) - return self.a + a -end -terra B.metamethods.__add(self : &B, a : int, b : int, c : int) - return self.a + a -end - - -function myvoid() - print("CALLED") -end -terra testcallvoid() - myvoid() -end -print("BEFORE") -testcallvoid() -print("AFTER") - -terra C.metamethods.__add(b : &B, c : &C) - return b.a + c.a -end - -terra foo40() - var b = B { 5,6 } - var c = C { 3 } - var ptrb = &b - b:inc(3) - ptrb:inc(3) - return b:add() + ptrb:add() + b(3) + ptrb(3) + b.foo + ptrb.foo + (b + c) -end - -assert(foo40() == 8 + 8 + 6 + 6 + 6 + 11 + 6 + 11 + 3 + 11) -B.metamethods.__add = macro(function(b,c) return `b.a + c.a + 1 end) -terra foo41() - var b = B { 5,6 } - var c = C { 3 } - var ptrb = &b - b:inc(3) - ptrb:inc(3) - return b:add() + ptrb:add() + b(3) + ptrb(3) + b.foo + ptrb.foo + (b + c) -end - -assert(foo41() == 8 + 8 + 6 + 6 + 6 + 11 + 6 + 11 + 3 + 11 + 1) - -terra foo32() - var a = B { b = 3, a = 4 } - var ptra = &a - a.b = a.b + 1 - ptra.a = ptra.a + (@ptra).a + 1 - return a.a, a.b -end - -test.meq({9,4},foo32()) - -terra foo33() - return (vector(3,4,5) + vectorof(double,3,4,5))[0] + sizeof(double) -end - -local notinscope = symbol() - -failit(function() - local terra foo34() - return notinscope - end - foo34() -end) - -local gbl = global(int) - -terra foo37() - gbl = 4 -end -foo37() - -assert(gbl:get() == 4) -assert(foo33() == 14) - -local C = terralib.includec("stdio.h") - -terra foo38() - C.printf("hello, world %f\n", 3.5f) -end -foo38() -local twice = macro(function(exp,call) - return quote - exp = exp + 1 + call._0 - exp = exp + 1 + call._0 - end -end) -terra foo39() - var a = 4 - twice(a,returns2()) - return a -end - -assert(foo39() == 8) ---checkexp truncate and allowluaobjects behavior ---global variable resolution ---select/pointerselect/__get ---expression macro 1 return ---expression macro truncated ---expression macro expanded ---expression macro that returns a multi-ret function ---expression macro that returns a multi-ret function that was an argument ---function call, function call with multi-return, ---function call to overloaded function/undef function ---overloaded operator with mixed macro/function stuff ---reciever cast stuff \ No newline at end of file diff --git a/samples/Terra/staticmethod.t b/samples/Terra/staticmethod.t deleted file mode 100644 index 0ce91a4c..00000000 --- a/samples/Terra/staticmethod.t +++ /dev/null @@ -1,9 +0,0 @@ -struct A { -} -A.metamethods.__getmethod = function(self,idx) - return tonumber(string.sub(idx,2,-1)) -end -terra foo() - return A.f33 + A.b34 -end -assert(67 == foo()) \ No newline at end of file diff --git a/samples/Terra/stattest.t b/samples/Terra/stattest.t deleted file mode 100644 index 71380d2d..00000000 --- a/samples/Terra/stattest.t +++ /dev/null @@ -1,13 +0,0 @@ -local ffi = require("ffi") -if ffi.os == "Windows" then - return -end - -C,T = terralib.includec("sys/stat.h") -terra dostat() - var s : T.stat - C.stat("stattest.t",&s) - return s.st_size -end - -assert(dostat() == 210) diff --git a/samples/Terra/stencil.t b/samples/Terra/stencil.t deleted file mode 100644 index 1ce4d732..00000000 --- a/samples/Terra/stencil.t +++ /dev/null @@ -1,134 +0,0 @@ - -local C = terralib.includecstring [[ -#include -#include -#ifndef _WIN32 -#include -static double CurrentTimeInSeconds() { - struct timeval tv; - gettimeofday(&tv, NULL); - return tv.tv_sec + tv.tv_usec / 1000000.0; -} -#else -#include -static double CurrentTimeInSeconds() { - return time(NULL); -} -#endif - -int CalcTime(int * times, double * start) { - if(*times == 0) { - *start = CurrentTimeInSeconds(); - } else { - double elapsed = CurrentTimeInSeconds() - *start; - if(elapsed > 0.1f && *times >= 3) { - *start = elapsed / *times; - return 0; - } - } - (*times)++; - return 1; -} -]] - - -function symmat(name,I,...) - if not I then return symbol(name) end - local r = {} - for i = 0,I-1 do - r[i] = symmat(name..tostring(i),...) - end - return r -end - - - -local IO = terralib.includec("stdio.h") - - - -NI,NJ = 1,4 -V = 8 -terra uload(d : &float) - return terralib.attrload([&vector(float,V)](d), { align = 4 }) -end -terra ustore(d : &float, v : vector(float,V)) - terralib.attrstore([&vector(float,V)](d), v, { align = 4 }) -end - -terra runit(N : int, input : &float, output : &float) - input = input + N*NI + V*NJ - output = output + N*NI + V*NJ - for i = NI, N-NI,NI do - for j = V*NJ, N-V*NJ,V*NJ do - [(function() - local C = symmat("C",NI,NJ) - local stmts = terralib.newlist() - for iii = 0,NI-1 do for jjj = 0,NJ-1 do - stmts:insert(quote - var [C[iii][jjj]] : vector(float,V) = 0 - end) - end end - - for ii = -1,1 do - for jj = -1,1 do - for iii = 0,NI-1 do for jjj = 0,NJ-1 do - if math.abs(ii) + math.abs(jj) ~= 2 then - stmts:insert(quote - var d = uload(input + N * (ii + iii) + jj + V*jjj); - [C[iii][jjj]] = [C[iii][jjj]] + d - end) - end - end end - end - end - for iii = 0,NI-1 do for jjj = 0,NJ-1 do - stmts:insert(quote - ustore(output + N * (iii) + V*jjj, [C[iii][jjj]]) - end) - end end - return stmts - end)()] - input = input + V*NJ - output = output + V*NJ - end - input = input + 2*V*NJ - output = output + 2*V*NJ - end -end - -terra doit() - var N = 2048 - var img = [&float](C.malloc(N*N*sizeof(float))) - var img2 = [&float](C.malloc(N*N*sizeof(float))) - - for i = 0, N do - for j = 0, N do - img[i*N+j] = 1 - end - end - - var times = 0 - var mytime : double - while C.CalcTime(×,&mytime) ~= 0 do - runit(N,img,img2) - end - - C.printf("times = %d\n",times) - for i = NI, N-NI do - for j = V*NJ, N-V*NJ do - if img2[i*N+j] ~= 5 then - C.printf("wrong! %d %d %f\n",i,j,img2[i*N+j]) - goto out - end - end - end - ::out:: - var togiga = 1.0/(1024*1024*1024) - var pixels = (N-NI)*(N-V*NJ) - C.printf("%f %f %f\n", mytime, pixels*4*2 *togiga / mytime, 5*pixels * togiga / mytime) - -end -doit() -runit:disas() -doit() diff --git a/samples/Terra/strerror.t b/samples/Terra/strerror.t deleted file mode 100644 index 6eb0b83f..00000000 --- a/samples/Terra/strerror.t +++ /dev/null @@ -1,9 +0,0 @@ -string=terralib.includec("string.h") -buf=terralib.new(int8[1024]) -ffi = require "ffi" -if ffi.os == "Windows" then - string.strerror_s(buf,1024,1) -else - string.strerror_r(1,buf,1024) -end -print(ffi.string(buf)) diff --git a/samples/Terra/string.t b/samples/Terra/string.t deleted file mode 100644 index d44388eb..00000000 --- a/samples/Terra/string.t +++ /dev/null @@ -1,15 +0,0 @@ - -local c = terralib.includec("stdio.h") - -terra foo() - var a = "whatwhat\n" - return c.puts(a) -end - -local test = require("test") -local ffi = require("ffi") -if ffi.os == "Windows" then - test.eq(foo(),0) -else - test.eq(foo(),10) -end \ No newline at end of file diff --git a/samples/Terra/struct.t b/samples/Terra/struct.t deleted file mode 100644 index 5c3f96cd..00000000 --- a/samples/Terra/struct.t +++ /dev/null @@ -1,50 +0,0 @@ ---the zero line -struct A { b : B } and -struct B {a : int, b : int} - -terra bar(a : B) - a.a = a.a + 1 - return a,3 -end - -terra foo() - var a : B - a.a = 4; - --(bar(a)).a = 3, TODO: why is the offset == 0 for this value? - var c,d = bar(a) - return c.a + a.a + d -end - - -terra baz(a : &B) - a.a = 1 - a.b = 2 - return a.a -end - - -terra foo2() - var a : B - var d = baz(&a) - return a.a + a.b + d -end -local test = require("test") - -test.eq(foo(),12) -test.eq(foo2(),4) - - -local C = tuple(int, int) - -local D = tuple(int, int) - -terra anon() - var c : C - c._0 = 3 - c._1 = 4 - var d : D = c - --var b : B = d - return d._0 + d._1 -end - -test.eq(anon(),7) \ No newline at end of file diff --git a/samples/Terra/structarg.t b/samples/Terra/structarg.t deleted file mode 100644 index c3d1f4ed..00000000 --- a/samples/Terra/structarg.t +++ /dev/null @@ -1,9 +0,0 @@ -terra foobar() - var a = { a=3,b=4} - var b = {a=5,b=6.0} - b = a - return a.a -end - -local test = require("test") -test.eq(foobar(),3) \ No newline at end of file diff --git a/samples/Terra/structcast.t b/samples/Terra/structcast.t deleted file mode 100644 index 9b84a258..00000000 --- a/samples/Terra/structcast.t +++ /dev/null @@ -1,38 +0,0 @@ -struct A { a : int } -struct B {a : int, b : A} - -local D = tuple(double, A) - -terra anon() - var b : B - b.a = 4 - b.b.a = 3 - - var d : D - d._0 = 1.0 - d._1.a = 2 - - b = B(d) - - return b.a + b.b.a -end - -terra anon2() - var b = B { b = A{ 2.0 }, a = 4 } - var b2 = B { a = 4, b = A{ 2.0 } } - var b3 = B{ 4, A{2.0} } - return b.a + b.b.a + b2.a + b2.b.a + b3.a + b3.b.a -end - -terra anon3() - return {5,A{6}} -end - -terra anon4() - var b = B(anon3()) - return b.a + b.b.a -end -test = require("test") -test.eq(anon(),3) -test.eq(anon2(),18) -test.eq(anon4(),11) \ No newline at end of file diff --git a/samples/Terra/structconstructor.t b/samples/Terra/structconstructor.t deleted file mode 100644 index 8a9bd5c9..00000000 --- a/samples/Terra/structconstructor.t +++ /dev/null @@ -1,9 +0,0 @@ -struct A { a : int, b : int} - -terra foobar() - var a = A { 3, 4} - return a.b -end - -local test = require("test") -test.eq(foobar(),4) \ No newline at end of file diff --git a/samples/Terra/structrvalue.t b/samples/Terra/structrvalue.t deleted file mode 100644 index 31c0f6eb..00000000 --- a/samples/Terra/structrvalue.t +++ /dev/null @@ -1,16 +0,0 @@ ---the zero line -struct A { b : B } and -struct B {a : int, b : int} - - -terra foo() - var b = B {1,2} - return b -end - -terra bar() - return foo().b -end - -local test = require("test") -test.eq(bar(),2) \ No newline at end of file diff --git a/samples/Terra/structsyntax.t b/samples/Terra/structsyntax.t deleted file mode 100644 index 43d1b06a..00000000 --- a/samples/Terra/structsyntax.t +++ /dev/null @@ -1,14 +0,0 @@ -struct A { - a : int - b : float - union { - c : int - d : float - } -} - -terra foo() - return A { a = 4, b = 5, c = 3} -end - -assert(foo().c == 3) \ No newline at end of file diff --git a/samples/Terra/sugar.t b/samples/Terra/sugar.t deleted file mode 100644 index 6870fde5..00000000 --- a/samples/Terra/sugar.t +++ /dev/null @@ -1,15 +0,0 @@ - -local foo = &int - - -local a = int -> {bool,int} - -print(a.name) - -terra foo2() - -end - - - -local test = require("test") diff --git a/samples/Terra/sumlanguage1.t b/samples/Terra/sumlanguage1.t deleted file mode 100755 index 84889622..00000000 --- a/samples/Terra/sumlanguage1.t +++ /dev/null @@ -1,2 +0,0 @@ -import "lib/sumlanguage" -assert((sum 1.0f,2LL,2ULL,3.0,1U,1 done)==10) \ No newline at end of file diff --git a/samples/Terra/sumlanguage2.t b/samples/Terra/sumlanguage2.t deleted file mode 100755 index 7c84b980..00000000 --- a/samples/Terra/sumlanguage2.t +++ /dev/null @@ -1,4 +0,0 @@ -import "lib/sumlanguage2" -a = 2 -local b = 3 -assert(sum 1,a,b done == 6) \ No newline at end of file diff --git a/samples/Terra/symbolmangling.t b/samples/Terra/symbolmangling.t deleted file mode 100644 index 70c5ad79..00000000 --- a/samples/Terra/symbolmangling.t +++ /dev/null @@ -1,4 +0,0 @@ -C = terralib.includecstring [[ - #include -]] -C.fopen("broken.t","r") diff --git a/samples/Terra/symbolvar.t b/samples/Terra/symbolvar.t deleted file mode 100644 index 4d4b0cbd..00000000 --- a/samples/Terra/symbolvar.t +++ /dev/null @@ -1,11 +0,0 @@ - - -local a = symbol() - -terra foo() - var [a] = 3 - return [a] -end - -local test = require("test") -test.eq(3,foo()) \ No newline at end of file diff --git a/samples/Terra/symbolvar2.t b/samples/Terra/symbolvar2.t deleted file mode 100644 index 1195e539..00000000 --- a/samples/Terra/symbolvar2.t +++ /dev/null @@ -1,16 +0,0 @@ - - -local a = symbol() - -local q = quote - [a] = [a] + 1 -end - -terra foo() - var [a] = 2 - q - return [a] -end - -local test = require("test") -test.eq(3,foo()) \ No newline at end of file diff --git a/samples/Terra/symbolvar3.t b/samples/Terra/symbolvar3.t deleted file mode 100644 index 5eed2aaa..00000000 --- a/samples/Terra/symbolvar3.t +++ /dev/null @@ -1,16 +0,0 @@ - - -local a = symbol() - -local q = quote - var [a] = 2 - [a] = [a] + 1 -end - -terra foo() - q - return [a] -end - -local test = require("test") -test.eq(3,foo()) \ No newline at end of file diff --git a/samples/Terra/symbolvar4.t b/samples/Terra/symbolvar4.t deleted file mode 100644 index 1db5c832..00000000 --- a/samples/Terra/symbolvar4.t +++ /dev/null @@ -1,16 +0,0 @@ -local a = symbol() -local b = symbol(int) - -local c = symbol(int) -local d = symbol() - - -terra foo() - var [a],[b] = 1.25,1.25 - var [c],[d] = 3.25,3.25 - return [a] + [b] + [c] + [d] -end - -local test = require("test") - -test.eq(foo(),8.50) \ No newline at end of file diff --git a/samples/Terra/symbolvar5.t b/samples/Terra/symbolvar5.t deleted file mode 100644 index 6028bb13..00000000 --- a/samples/Terra/symbolvar5.t +++ /dev/null @@ -1,16 +0,0 @@ -local a = symbol() -local b = { symbol(int), symbol(int) } - -local c = symbol(int) -local d = { symbol(), symbol() } - - -terra foo() - var [a],[b] = 1.25,1.25,1.25 - var [c],[d] = 3.25,3.25,3.25 - return [a] + [b[1]] + [b[2]] + [c] + [d[1]] + [d[2]] -end - -local test = require("test") - -test.eq(foo(),12.75) \ No newline at end of file diff --git a/samples/Terra/symbolvar6.t b/samples/Terra/symbolvar6.t deleted file mode 100644 index efd07137..00000000 --- a/samples/Terra/symbolvar6.t +++ /dev/null @@ -1,16 +0,0 @@ -local a = symbol() -local b = {} - -local c = symbol(int) -local d = {} - - -terra foo() - var [a],[b] = 1.25 - var [c],[d] = 3.25 - return [a] + [c] -end - -local test = require("test") - -test.eq(foo(),4.25) \ No newline at end of file diff --git a/samples/Terra/symbolvar7.t b/samples/Terra/symbolvar7.t deleted file mode 100644 index 5c0bc621..00000000 --- a/samples/Terra/symbolvar7.t +++ /dev/null @@ -1,15 +0,0 @@ -local a = symbol() -local b = { symbol(int), symbol(int) } - -local c = symbol(int) -local d = symbol(double) - -terra foo() - var [a] : double,[b] = 1.25,1.25,1.25 - var [c] : double,[d] : int = 3.25,3.25 - return [a] + [b[1]] + [b[2]] + [c] + [d] -end - -local test = require("test") - -test.eq(foo(),9.50) \ No newline at end of file diff --git a/samples/Terra/symparam.t b/samples/Terra/symparam.t deleted file mode 100644 index 9aea4d3a..00000000 --- a/samples/Terra/symparam.t +++ /dev/null @@ -1,9 +0,0 @@ - -local a = symbol() -terra foo([a] : int, b : int) - return [a] + b -end - -local test = require("test") - -test.eq(foo(1,2),3) \ No newline at end of file diff --git a/samples/Terra/symparam2.t b/samples/Terra/symparam2.t deleted file mode 100644 index f6c7e393..00000000 --- a/samples/Terra/symparam2.t +++ /dev/null @@ -1,9 +0,0 @@ - -local a = symbol(int) -terra foo([a], [a], b : int) - return [a] + b -end - -local test = require("test") - -test.eq(foo(1,2,4),6) \ No newline at end of file diff --git a/samples/Terra/symparam3.t b/samples/Terra/symparam3.t deleted file mode 100644 index 35b3e40b..00000000 --- a/samples/Terra/symparam3.t +++ /dev/null @@ -1,15 +0,0 @@ - -local a = symbol(int) -local c = {} -terra foo([a], b : int, [c]) - return [a] + b -end -local d = {symbol(int),symbol(int)} -terra foo2([a], b : int, [d]) - return [a] + b + [d[1]] + [d[2]] -end - -local test = require("test") - -test.eq(foo2(1,2,3,4),10) -test.eq(foo(1,2),3) \ No newline at end of file diff --git a/samples/Terra/template.t b/samples/Terra/template.t deleted file mode 100644 index b305aeb9..00000000 --- a/samples/Terra/template.t +++ /dev/null @@ -1,6 +0,0 @@ - -terra foo() - -end - -local test = require("test") diff --git a/samples/Terra/terracast.t b/samples/Terra/terracast.t deleted file mode 100644 index 05df48f7..00000000 --- a/samples/Terra/terracast.t +++ /dev/null @@ -1,15 +0,0 @@ - - - -function addone(a) - return a + 1 -end - - -local a1 = terralib.cast(int -> int, addone) - -terra dofn(a : int -> int) - return a(3) -end -local test = require("test") -test.eq(dofn(a1),4) \ No newline at end of file diff --git a/samples/Terra/terralua.t b/samples/Terra/terralua.t deleted file mode 100644 index 8084f68c..00000000 --- a/samples/Terra/terralua.t +++ /dev/null @@ -1,32 +0,0 @@ -function dog(...) - print("Hi. This is Dog.",...) -end - -terra foo() - dog() -end - -terra passanarg() - dog(3,4,5,nil) -end - -function takesastruct(a) - print(a.a,a.b) - a.a = a.a + 1 -end -struct A { a : int , b : double } -terra passastruct() - var a = A {1,3.4} - --takesastruct(a) luajit doesn't like having structs passed to its callbacks by value? - var b = a.a - takesastruct(&a) - var c = a.a - return b + c -end - -foo() -passanarg() - -local test = require("test") - -test.eq(passastruct(),3) diff --git a/samples/Terra/terraluamethod.t b/samples/Terra/terraluamethod.t deleted file mode 100644 index 09de7b2d..00000000 --- a/samples/Terra/terraluamethod.t +++ /dev/null @@ -1,16 +0,0 @@ -struct A { a : int } - -A.methods.up = function(self,b) - self.a = self.a + 1 + (b or 0) -end - -terra foo() - var a = A { 1 } - a:up() - var b = &a - b:up(4) - return a.a -end - -local test = require("test") -test.eq(foo(),7) \ No newline at end of file diff --git a/samples/Terra/terranew.t b/samples/Terra/terranew.t deleted file mode 100644 index 67336e38..00000000 --- a/samples/Terra/terranew.t +++ /dev/null @@ -1,19 +0,0 @@ - - -A = terralib.new(int[4],{1,2,3,4}) - -terra foo(a : &int) - var sum = 0 - for i = 0,4 do - sum = sum + a[i] - end - return sum,a -end - -local test = require("test") - -local a,b = terralib.unpackstruct(foo(A)) - -test.eq(a,10) -test.eq(terralib.typeof(A),int[4]) -test.eq(terralib.typeof(b),&int) \ No newline at end of file diff --git a/samples/Terra/testdebug.t b/samples/Terra/testdebug.t deleted file mode 100644 index b155e795..00000000 --- a/samples/Terra/testdebug.t +++ /dev/null @@ -1,57 +0,0 @@ -if not terralib.traceback then return end ---this test require debug on, if it is not on, relaunch with it on -if 0 == terralib.isdebug then - assert(0 == os.execute(terralib.terrahome.."/bin/terra -g testdebug.t")) - return -end -C = terralib.includec("stdio.h") - -terra foo(a : int, b : int) - var c = a + b - return c * 2 -end - -local ptr = terralib.cast(rawstring,foo:getdefinitions()[1]:getpointer()) - -terra findptr(a : &opaque) - var si : terralib.SymbolInfo - var li : terralib.LineInfo - terralib.lookupsymbol(a,&si) - C.printf("p = %p, addr = %p, sz = %d, nm = %.*s\n",a,si.addr,[int](si.size), si.namelength,si.name) - terralib.lookupline(si.addr,a, &li) - C.printf("line = %.*s:%d\n",li.namelength,li.name,[int](li.linenum)) - return li.linenum -end -assert(11 == findptr(ptr+6)) -assert(10 == findptr(ptr+4)) -local ra = terralib.intrinsic("llvm.returnaddress", int32 -> &opaque ) -local fa = terralib.intrinsic("llvm.frameaddress", int32 -> &opaque ) -terra testbt3() - var frames : (&opaque)[128] - terralib.traceback(nil) - var N = terralib.backtrace(frames,128,ra(0),fa(1)) - for i = 0,N do - C.printf("%p ",frames[i]) - var nm : rawstring - var nmL : uint64 - var si : terralib.SymbolInfo - if terralib.lookupsymbol(frames[i],&si) then - C.printf("frame %.*s\n", si.namelength, si.name) - else - C.printf("\n") - end - end -end -testbt3:setinlined(false) -terra fn2() - testbt3() - C.printf("fn2\n") - return 1 -end -terra what() - fn2() - C.printf("what\n") -end -fn2:setinlined(false) -what() -terralib.disas(terralib.traceback,5,5) \ No newline at end of file diff --git a/samples/Terra/testimport.t b/samples/Terra/testimport.t deleted file mode 100644 index e2ef63db..00000000 --- a/samples/Terra/testimport.t +++ /dev/null @@ -1,6 +0,0 @@ - -local r,e = terralib.loadstring [[ -import "lib.fakeimport" -]] - -assert(e:match("stack traceback")) \ No newline at end of file diff --git a/samples/Terra/testlang1.t b/samples/Terra/testlang1.t deleted file mode 100755 index 89496035..00000000 --- a/samples/Terra/testlang1.t +++ /dev/null @@ -1,21 +0,0 @@ -import "lib/testlang" - -print("hello") -local a = image "astring" -image 4 -image and,or,& -image image -image akeyword -image foobar -print(a) -image bar 3 -print(bar,bar1) - -local image what 4 3 -print(what) -local a = 4 -local b = 5 -c = 6 -print(foolist { a, b, c}) ---test eos token -image diff --git a/samples/Terra/testlang2.t b/samples/Terra/testlang2.t deleted file mode 100755 index b4d1229f..00000000 --- a/samples/Terra/testlang2.t +++ /dev/null @@ -1,4 +0,0 @@ -import "lib/testlang" - -local a = image "astring" -print(a) diff --git a/samples/Terra/testlog.t b/samples/Terra/testlog.t deleted file mode 100644 index 2e015773..00000000 --- a/samples/Terra/testlog.t +++ /dev/null @@ -1,8 +0,0 @@ -terra foo(a : bool, b : bool, c : bool) return a and b or c end - -foo:disas() -terra callfoo() - var r = foo(true,false,true) - return r -end -assert(callfoo()) \ No newline at end of file diff --git a/samples/Terra/testrequire.t b/samples/Terra/testrequire.t deleted file mode 100644 index e72084de..00000000 --- a/samples/Terra/testrequire.t +++ /dev/null @@ -1,14 +0,0 @@ -local f = assert(io.popen("uname", 'r')) -local s = assert(f:read('*a')) -f:close() - -if s~="Darwin\n" then - print("Warning, not running test b/c this isn't a mac") -else - -local A = require("lib.objc") -local B = require("lib.objc") - -assert(A == B) - -end \ No newline at end of file diff --git a/samples/Terra/teststd.t b/samples/Terra/teststd.t deleted file mode 100644 index 8df604a9..00000000 --- a/samples/Terra/teststd.t +++ /dev/null @@ -1,45 +0,0 @@ -local S = require "std" - -c = global(int,0) - -struct A(S.Object) { - a : int; - b : int[5]; -} -struct C { - a : int -} -struct B(S.Object) { - a : A; - b : A[2]; - c : C[3]; - c2 : C; - c3 : C[2]; -} - -terra A:__destruct() - S.printf("A dtor!\n") - c = c + 1 -end -terra B:__destruct() - c = c + 10 -end -terra foo() - var a = A.salloc() -end - -foo() -assert(c:get() == 1) - -terra bar() - var b = B.salloc() -end -bar() -assert(c:get() == 14) - -terra baz() - var b = B.alloc() - b:delete() -end -baz() -assert(c:get() == 27) \ No newline at end of file diff --git a/samples/Terra/testvector.t b/samples/Terra/testvector.t deleted file mode 100644 index 7ba46c2b..00000000 --- a/samples/Terra/testvector.t +++ /dev/null @@ -1,57 +0,0 @@ - -local S = require "std" - -local floatv = S.Vector(int) -terra foo() - var a = floatv.salloc():init() - for i = 0,100 do - a:insert(i) - end - for i = 0,50 do - a:insert(0,i) - end - for i = 0,50 do - a:insert(1,2,i) - end - for i = 0ULL,a:size() do - a(i) = a(i) + 1 - end - for i = 0ULL,50 do - @a:insert() = 5 - end - var s = 0 - for i = 0ULL,a:size() do - s = s + a(i) - end - var z = a:size() - S.assert(a:remove() == 5) - S.assert(a:size() == z - 1) - S.assert(a:remove(0) == 50) - S.assert(a:remove(0) == 50) - S.assert(a:remove(0) == 50) - S.assert(a(1) == 49) - return s -end -assert(foo() == 8875 + 5 *50) - -local g = global(int,0) - -struct A (S.Object) { - a : int -} - -terra A:__destruct() - g = g + self.a -end - -assert(S.Vector(int) == S.Vector(int)) - -terra foo2() - var a = [S.Vector(A)].salloc():init() - for i = 0,50 do - a:insert().a = i - end -end - -foo2() -assert(g:get() == 49*50/2) \ No newline at end of file diff --git a/samples/Terra/torturechain.t b/samples/Terra/torturechain.t deleted file mode 100644 index 91af6a06..00000000 --- a/samples/Terra/torturechain.t +++ /dev/null @@ -1,67 +0,0 @@ - -terra foo() - return 8.0,9 -end - -local torturechain = quote - var a = 3.0 -in - [quote - var b = 4 - in - [quote - var c = 5.0 - in - a,b,c, [quote - var d = 6 - in - [quote - var e = 7.0 - in - d,e,foo() - end] - end] - end] - end] -end - -terra bindit() - var a,b,c,r1 = torturechain - var d,e,r2 = r1 - var f,g = r2 - return a + b + c + d + e + f + g -end - -local sum = 3+4+5+6+7+8+9 -assert(sum == bindit()) - -terra foo(z : int, a : int, b : int, c : int, d : int, e : int, f : int, g : int) - return z + a + b + c + d + e + f + g -end - - -terra overloadit(a : int, b : int, c : int, d : int, e : int, f : int) - return 0 -end - -terra overloadit(a : double, b : int, c : int, d : int, e : int, f : int) - return 1 -end - - -terra callit() - var a,b,c,r1 = torturechain - var d,e,r2 = r1 - var f,g = r2 - return foo(0,a,b,c,d,e,f,g) -end - -terra callol() - var a,b,c,r1 = torturechain - var d,e,r2 = r1 - var f,g = r2 - return overloadit(a,b,c,e,f,g) -end - -assert(callit() == sum) -assert(callol() == 1) diff --git a/samples/Terra/toterraexpression.t b/samples/Terra/toterraexpression.t deleted file mode 100644 index ba31fb7a..00000000 --- a/samples/Terra/toterraexpression.t +++ /dev/null @@ -1,8 +0,0 @@ -local x = setmetatable({a = 4}, { __toterraexpression = function(self) return self.a end}) - - -local terra foo() - return x -end - -assert(foo() == 4) \ No newline at end of file diff --git a/samples/Terra/twolang.t b/samples/Terra/twolang.t deleted file mode 100644 index fddc25e6..00000000 --- a/samples/Terra/twolang.t +++ /dev/null @@ -1,23 +0,0 @@ - -do -import "lib/foolang" -a = foo bar -import "lib/barlang" -b = bar foo -assert( foo bar + bar foo == 3) -assert(a + b == 3) -end - -local function failparse(str,match) - local r,msg = terralib.loadstring(str) - assert(not r) - local match = msg:match(match) - if not match then print(msg) end - assert(match) -end - -failparse("return (foo bar + bar foo)", "near 'bar'") -failparse('import "lib/foolang";return (foo bar + bar foo)', "near foo") -failparse('import "lib/foolang"; import "lib/foolang";',"entrypoint 'foo' already defined") - -do import "lib/foolang" end do import "lib/foolang" end \ No newline at end of file diff --git a/samples/Terra/typeexp.t b/samples/Terra/typeexp.t deleted file mode 100644 index 6f29586e..00000000 --- a/samples/Terra/typeexp.t +++ /dev/null @@ -1,9 +0,0 @@ -atype = int -terra foo(a : atype) - var b : &atype = &a - return @b -end - -local test = require("test") - -test.eq(foo(3),3) \ No newline at end of file diff --git a/samples/Terra/union.t b/samples/Terra/union.t deleted file mode 100644 index eb18b998..00000000 --- a/samples/Terra/union.t +++ /dev/null @@ -1,26 +0,0 @@ - -struct A { a : int, union { c : int8[6], b : int }, d : float, union { e : int, f : float }, g : int } -struct B { union { b : int , c : int8[6] }, a : int } -local C = struct { union { union { b : int} , c : int8[6] }, w : int } -terra foo() - var a : A - var b : B - var c : C - a.b = 4 - a.a = 5 - a.c[4] = 3 - a.d = 4 - return a.a + a.b + a.c[4] + a.d -end - -struct Stuff { union { a : int, b : float } } - -terra what() - var a : Stuff, b : Stuff - a.a,b.a = 3,4 - return a.b/b.b --== .75, this is the best bad interview question -end - -local test = require("test") -test.eq(foo(),16) -test.eq(what(),.75) \ No newline at end of file diff --git a/samples/Terra/unm.t b/samples/Terra/unm.t deleted file mode 100644 index 665e2060..00000000 --- a/samples/Terra/unm.t +++ /dev/null @@ -1,20 +0,0 @@ - - -struct A { - a : int -} - -A.metamethods.__unm = terra(self : &A) - return A { -self.a } -end - -A.metamethods.__sub = terra(self : &A, rhs : &A) - return A { self.a - rhs.a } -end - -terra doit() - var a,b = A { 1 } , A { 2 } - return (-(a - b)).a -end - -assert(doit() == 1) \ No newline at end of file diff --git a/samples/Terra/unpacktuple.t b/samples/Terra/unpacktuple.t deleted file mode 100644 index 7701455f..00000000 --- a/samples/Terra/unpacktuple.t +++ /dev/null @@ -1,30 +0,0 @@ - - -terra foo() - return 1,2 -end - -terra foo2() - return {a = 1, b = 2} -end - -assert(unpacktuple(1) == 1) -assert(unpacktuple(foo()) == 1) - -assert(unpacktuple(foo(),2) == 2) - -assert(unpacktuple(foo(),nil,1) == 1) -assert(unpacktuple(foo2()).a == 1) - -assert(2 == #{unpacktuple(foo())}) - -assert(1 == #{unpacktuple(foo(),2)}) - -terra usefoo() - var a = foo() - var c,d = unpacktuple(a) - var e = unpacktuple(a,2) - return e -end - -assert(usefoo() == 2) \ No newline at end of file diff --git a/samples/Terra/unsafesym.t b/samples/Terra/unsafesym.t deleted file mode 100644 index c8d2f2f2..00000000 --- a/samples/Terra/unsafesym.t +++ /dev/null @@ -1,14 +0,0 @@ - -local mymacro = macro(function(a) - a = a:asvalue() - print(a, terralib.issymbol(a), terralib.unsafetypeofsymbol(a)) - return {} -end) - - - -terra foo(a : int) - mymacro(a) -end - -foo:compile() \ No newline at end of file diff --git a/samples/Terra/unstrict.t b/samples/Terra/unstrict.t deleted file mode 100644 index a4292ec0..00000000 --- a/samples/Terra/unstrict.t +++ /dev/null @@ -1,5 +0,0 @@ -Strict.__newindex,Strict.__index = nil,nil - -print(b) -terra foo() end -print(c) \ No newline at end of file diff --git a/samples/Terra/usercast.t b/samples/Terra/usercast.t deleted file mode 100644 index f35bec84..00000000 --- a/samples/Terra/usercast.t +++ /dev/null @@ -1,24 +0,0 @@ - -struct A { a : int, b : float } - -function A.metamethods.__cast(from,to,exp) - if from == int and to == A then - return `A {exp, 1.f } - elseif from == float and to == A then - return `A { 1, exp } - end - error("invalid") -end - - -terra moo(a : A) - return a.a + a.b -end - -terra bar() - return moo(1) + moo(1.f) -end - -local test = require("test") - -test.eq(bar(), 4) \ No newline at end of file diff --git a/samples/Terra/varargcstring.t b/samples/Terra/varargcstring.t deleted file mode 100644 index a9406390..00000000 --- a/samples/Terra/varargcstring.t +++ /dev/null @@ -1,2 +0,0 @@ -C = terralib.includec("stdio.h") -C.printf("hello, %d\n",3) \ No newline at end of file diff --git a/samples/Terra/vars.t b/samples/Terra/vars.t deleted file mode 100644 index a8f38d3b..00000000 --- a/samples/Terra/vars.t +++ /dev/null @@ -1,23 +0,0 @@ - - -a = {} -a.b, a.c = global(3),global(double,4) -d = global(5) ---print(a.b) - ---a.b:gettype(nil) - -terra bar() - a.b = a.b + 1 - a.c = a.c + 1 - d = d + 1 -end -terra foo() - return a.b,a.c,d -end - - -local test = require("test") - -bar() -test.meq({4,5,6},foo()) \ No newline at end of file diff --git a/samples/Terra/vars2.t b/samples/Terra/vars2.t deleted file mode 100644 index e3556663..00000000 --- a/samples/Terra/vars2.t +++ /dev/null @@ -1,17 +0,0 @@ - -a = global(int) --testing variable with no initializer - - -terra foo() - a = 3 -end - -terra bar() - return a -end - - -local test = require("test") - -foo() -test.eq(bar(),3) \ No newline at end of file diff --git a/samples/Terra/vec.t b/samples/Terra/vec.t deleted file mode 100644 index b3d6790c..00000000 --- a/samples/Terra/vec.t +++ /dev/null @@ -1,27 +0,0 @@ - -terra foo(a : double) - var v0 : vector(double,3) = a - var v1 : vector(int,3) = 4 - var v2 = v0 / v1 - var v3 = (v0 <= v1) or (v1 >= v0) - var ptr = [&double](&v2) - return v3[0] or v3[1] or v3[2] - --return ptr[0] + ptr[1] + ptr[2] -end - - -N = 64 -terra addsomevecs(a : vector(double,N), b : vector(double,N), c : vector(double,N) ) - return (a + b) / c -end - - -terra foo2(a : double, b : double) - var c = addsomevecs(a,b,b) - return c[0] + c[1] -end - -local test = require("test") - -test.eq(foo(3), true) -test.eq(foo2(3,4), 3.5) \ No newline at end of file diff --git a/samples/Terra/vecarith.t b/samples/Terra/vecarith.t deleted file mode 100644 index 6a21b9ba..00000000 --- a/samples/Terra/vecarith.t +++ /dev/null @@ -1,138 +0,0 @@ ---[[ - -- -+ - -* -/ -% - -^ -and -or -~= == < > >= <= -<< >> - -]] - - -N = 2 - -types = {int,int64,uint64,float,double} -names = {"i","l","u","f","d"} -max = 16 - -for i = 1,#types do - local fenv = getfenv() - for j = 0,max do - local x = global(vector(types[i],N)); - (terra() x = j end)() - fenv[names[i]..j] = x - end -end - - -d375 = global(vector(double,N)) -d175 = global(vector(double,N)) -terra init() - d375 = 3.75 - d175 = 1.75 -end -init() - -terra test0() - var a = i1 + i3 - var b = l1 + l2 - var c = u1 + u2 - var d = f1 + f2 - var e = d1 + d2 - return (a + b + c + d + e)[1] -end - -terra test1() - var a = i1 - i3 - var b = l1 - l2 - var c = u1 - u2 - var d = f1 - f2 - var e = d1 - d2 - return (a - b - c - d - e)[1] -end - -terra test2() - var a = i2 * i3 - var b = l3 * l2 - var c = u3 * u2 - var d = f1 * f2 - var e = d3 * d2 - return (a * b * c * d * e)[1] -end - -terra test3() - var a = i2 / i3 + i1 - var b = l3 / l2 + i1 - var c = u3 / u2 - var d = f1 / f2 - var e = d3 / d2 - return (a * b * c * d * e)[1] -end - -terra test4() - var a = i2 % i3 - var b = l3 % l4 - var c = u3 % u2 - var d = f1 % f2 - var e = d375 % d2 - return ((a == i2) and (b == l3) and (d == f1) and (e == d175))[1] -end - -terra test5() - var a = i2 ^ i3 - var b = l3 ^ l4 - var c = u3 ^ u2 - return ((a == 1) and (b == l7) and (c == u1))[1] -end - -terra test6() - var a = i2 and i3 - var b = l3 and l4 - var c = u3 and u2 - return ((a == 2) and (b == l0) and (c == u2))[1] -end - -terra test7() - var a = i2 or i3 - var b = l3 or l4 - var c = u3 or u2 - return ((a == 3) and (b == l7) and (c == u3))[1] -end - - -terra test8() - var a0,a1 = i2 ~= i3, i2 == i3 - var b0,b1 = i2 < i3, i2 >= i3 - var c0,c1 = i2 > i3, i2 <= i3 - - return (a0 and not a1 and b0 and not b1 and not c0 and c1)[1] -end - -terra test9() - var a0, a1 = i8 >> i1, i8 << i1 - var b0, b1 = -i8 >> i1, -i8 << i1 - return (a0 == i4 and a1 == i16 and b0 == -i4 and b1 == -i16)[1] -end - - -local test = require("test") - -test.eq(test0(),16) -test.eq(test1(),2) -test.eq(test2(),2592) -test.eq(test3(),1.5) - -test.eq(test4(),true) - -test.eq(test5(),true) -test.eq(test6(),true) -test.eq(test7(),true) -test.eq(test8(),true) -test.eq(test9(),true) \ No newline at end of file diff --git a/samples/Terra/veclit.t b/samples/Terra/veclit.t deleted file mode 100644 index 20e9aee8..00000000 --- a/samples/Terra/veclit.t +++ /dev/null @@ -1,29 +0,0 @@ - -terra foo() - var a = 2* vector(1,2,3) - return a[0] + a[1] + a[2] -end - -terra foo2() - var a = vector(1,2.5,3) - return a[1] -end -terra what() - return 3,4.5 -end -expwhat = macro(function(a) return {`a._0, `a._1} end) -terra foo3() - var a = vector(1,2.5,expwhat(what())) - return a[3] -end - -terra foo4() - var a = vectorof(int,1,2.5,3) - return a[1] -end - -local test = require("test") -test.eq(foo(),12) -test.eq(foo2(),2.5) -test.eq(foo3(),4.5) -test.eq(foo4(),2) \ No newline at end of file diff --git a/samples/Terra/vecobj.t b/samples/Terra/vecobj.t deleted file mode 100644 index 59eab9fa..00000000 --- a/samples/Terra/vecobj.t +++ /dev/null @@ -1,54 +0,0 @@ -local Vec = terralib.memoize(function(typ,N) - N = assert(tonumber(N),"expected a number") - local ops = { "__sub","__add","__mul","__div" } - local struct VecType { - data : typ[N] - } - VecType.metamethods.type, VecType.metamethods.N = typ,N - VecType.metamethods.__typename = function(self) return ("%s_%d"):format(tostring(self.metamethods.type),self.metamethods.N) end - for i, op in ipairs(ops) do - local i = symbol("i") - local function template(ae,be) - return quote - var c : VecType - for [i] = 0,N do - c.data[i] = operator(op,ae,be) - end - return c - end - end - local terra doop(a : VecType, b : VecType) [template(`a.data[i],`b.data[i])] end - terra doop(a : typ, b : VecType) [template(`a,`b.data[i])] end - terra doop(a : VecType, b : typ) [template(`a.data[i],`b)] end - VecType.metamethods[op] = doop - end - terra VecType.methods.FromConstant(x : typ) - var c : VecType - for i = 0,N do - c.data[i] = x - end - return c - end - VecType.metamethods.__apply = macro(function(self,idx) return `self.data[idx] end) - VecType.metamethods.__cast = function(from,to,exp) - if from:isarithmetic() and to == VecType then - return `VecType.FromConstant(exp) - end - error(("unknown conversion %s to %s"):format(tostring(from),tostring(to))) - end - return VecType -end) - -terra foo(v : Vec(float,4), w : Vec(float,4)) - var z : Vec(float,4) = 1 - var x = (v*4)+w+1 - for i = 0,4 do - print(x(i)) - end - return x(2) -end - -foo:printpretty(true,false) -foo:disas() - -assert(20 == foo({{1,2,3,4}},{{5,6,7,8}})) \ No newline at end of file diff --git a/samples/Terra/vecptr.t b/samples/Terra/vecptr.t deleted file mode 100644 index c853065f..00000000 --- a/samples/Terra/vecptr.t +++ /dev/null @@ -1,4 +0,0 @@ -terra foo(a : &float) - var b = [&vector(float,4)](a) -end -foo:compile() \ No newline at end of file diff --git a/samples/Terra/vecsize.t b/samples/Terra/vecsize.t deleted file mode 100644 index 08043aee..00000000 --- a/samples/Terra/vecsize.t +++ /dev/null @@ -1,5 +0,0 @@ - -assert(terralib.sizeof(int)*3 <= terralib.sizeof(vector(int,3))) -assert(terralib.sizeof(vector(int,1)) == 4) -assert(terralib.sizeof(vector(int,4)) == 16) -assert(terralib.sizeof(vector(int,5)) == 32) \ No newline at end of file diff --git a/samples/Terra/vtablerec.t b/samples/Terra/vtablerec.t deleted file mode 100644 index 75e9ea56..00000000 --- a/samples/Terra/vtablerec.t +++ /dev/null @@ -1,30 +0,0 @@ - -struct V { - entry : {&A} -> {} -} and -struct A { - vtable : &V -} - -terra what(a : &A) : {} -end - -what:compile() - -terra bar() - var v : V - v.entry = what -end - -bar:compile() - ---[[ -{&A}->{} -&A -A -&V -V -&{&A}->{} -{&A}->{} - -]] \ No newline at end of file diff --git a/samples/Terra/zeroargs.t b/samples/Terra/zeroargs.t deleted file mode 100644 index 59b4356d..00000000 --- a/samples/Terra/zeroargs.t +++ /dev/null @@ -1,5 +0,0 @@ -local b = {} -terra foo() - return 1,b -end -foo() \ No newline at end of file diff --git a/samples/Terra/zeroreturn.t b/samples/Terra/zeroreturn.t deleted file mode 100644 index 406a3245..00000000 --- a/samples/Terra/zeroreturn.t +++ /dev/null @@ -1,18 +0,0 @@ - - -local b = global(0) - -terra foo(a : int) - if a > 3 then - return - end - b = a -end - -terra getb() return b end - -local test = require("test") -foo(4) -test.eq(getb(),0) -foo(2) -test.eq(getb(),2) \ No newline at end of file diff --git a/samples/Terra/zeroreturn2.t b/samples/Terra/zeroreturn2.t deleted file mode 100644 index 82f8e6df..00000000 --- a/samples/Terra/zeroreturn2.t +++ /dev/null @@ -1,17 +0,0 @@ - -a = global(0) - -terra doit() - a = a + 1 -end -terra geta() - return a -end - -terra bar() - return doit() -end - -bar() -local test = require("test") -test.eq(geta(),1) \ No newline at end of file