Commit Graph

60 Commits

Author SHA1 Message Date
Andrew Wilkins
bfb1679603 [llgo] llgoi: separate evaluation from printing
Summary:
Separate the evaluation of expressions from printing
of results. This is in preparation for splitting the
core of the interpreter out for use in alternative
interpreter frontends.

At the same time, the output is made less noisy in
response to comments on the golang-nuts announcement.
We would ideally print out values using Go syntax,
but this is impractical until we have libgo based on
Go 1.5. When that happens, fmt's %#v will handle
reflect.Value better, and so we can fix/filter type
names to remove automatically generated package names.

Reviewers: pcc

Subscribers: llvm-commits, axw

Differential Revision: http://reviews.llvm.org/D13761

llvm-svn: 267374
2016-04-25 01:18:20 +00:00
Peter Collingbourne
b24f4fb617 benchcomp: Add a mode for analyzing rule execution time in ninja log files.
llvm-svn: 265860
2016-04-08 22:42:22 +00:00
Peter Collingbourne
86e8cc8a9b benchcomp: Look at all sections whose names begin with .text, not just the .text section.
llvm-svn: 265859
2016-04-08 22:42:14 +00:00
Andrew Wilkins
b94480376a [llgo] add USES_TERMINAL option to check-libgo
Summary:
The check-libgo target runs "make check" in the
libgo package, which can take a long time on
slower machines. To prevent buildbot failures
due to timeout, we can use Ninja's console pool
for this target.

Reviewers: pcc

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D9495

llvm-svn: 264815
2016-03-30 00:29:33 +00:00
Andrew Wilkins
0f432aa05a [llgo] Increment "Debug Info Version"
Patch by Michal Cierniak!

This patch increments the "Debug Info Version" from 2 to 3.
This is a nop if you just want to generate binaries. I verified
that with and without this patch, when I run llgo -g on a Go
source file, I get exactly the same binary. The purpose of the
patch is to make it possible to run the llvm-dis tool. Without
the patch, it is impossible to disassemble files generated with
llgo:

  $ llgo -c -g -emit-llvm src/hello.go
  $ llvm-dis hello.o
  llvm-dis: warning: ignoring debug info with an invalid version (2) in hello.o

Differential Revision: http://reviews.llvm.org/D18355

llvm-svn: 264212
2016-03-23 23:09:00 +00:00
Andrew Wilkins
4ff0382453 [cmake] fix libgo-llgo paths in install target
llvm-svn: 264153
2016-03-23 12:39:21 +00:00
Andrew Wilkins
6436a4abd7 [llgo] Roll gofrontend forward
Switch gofrontend to using go.googlesource.com, and
update to 81eb6a3f425b2158c67ee32c0cc973a72ce9d6be.

There are various changes required to update to the
go 1.5 runtime:

typemap.go is changed to accommodate the change in representation for equal/hash algorithms, and the removal of the zero value/type.
CMakeLists.txt is updated to add the build tree to the package search path, so internal packages, which are not installed, are found.
various files changes due to removal of __go_new_nopointers; the same change as in D11863, but with NoUnwindAttribute added to the added runtime functions which are called with "callOnly".
minor cleanups in ssa.go while investigating issues with unwinding/panic handling.

Differential Revisision: http://reviews.llvm.org/D15188

llvm-svn: 263536
2016-03-15 05:36:43 +00:00
Andrew Wilkins
b7394b22fd [llgo] Force exporting __morestack from llgoi
Summary:
Force exporting __morestack from llgoi, so that
the symbol is available to the execution engine
when linking with libLLVM.so. The engine does
not reference __morestack explicitly, so must
be provided by the host program.

Reviewers: pcc

Subscribers: axw, llvm-commits

Differential Revision: http://reviews.llvm.org/D12625

llvm-svn: 254188
2015-11-27 04:46:46 +00:00
Peter Collingbourne
8324851a4e debug: Update for debug info API change.
llvm-svn: 252221
2015-11-05 22:04:20 +00:00
Andrew Wilkins
f69d45efc3 [llgo] irgen: always use TargetMachine's data layout
Summary:
Another attempt at resolving the runtime assertion
in llgoi due to data layout mismatch between module
and execution engine.

The X86 data layout constant appears to be unnecessary,
and does not match what the execution engine picks.
Using the registered Target, we pick the same data
layout as the execution engine.

While I was in the vicinity, I deleted the last
remnants of PNaCl support.

Reviewers: pcc

Subscribers: jfb, llvm-commits, dschuff

Differential Revision: http://reviews.llvm.org/D12630

llvm-svn: 248565
2015-09-25 06:28:14 +00:00
Andrew Wilkins
3b138079c9 [llgo] drop debug/DIBuilder.Declare
Summary:
Companion to D11864, which updates the
DIBuilder bindings to match a recent
change in the underlying API.

We drop the debug/DIBuilder.Declare method
for now, which is unused, as otherwise it will
be broken with the new DIBuilder API in the
Go bindings.

Reviewers: pcc

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D11891

llvm-svn: 246545
2015-09-01 11:52:37 +00:00
Tanya Lattner
449fa2f3cb Update to new lists.llvm.org
llvm-svn: 244007
2015-08-05 04:03:05 +00:00
Andrew Wilkins
4a628bb9e1 [llgo] build llgoi by default
Summary:
As llgoi is installed, it must be built or the install
target will fail; there is no implicit dependency.
Adding llgoi to "ALL" makes building llgo as part of an
entire LLVM distribution a bit friendlier: you can then
just do the typical "make && make install".

Reviewers: pcc

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D11291

llvm-svn: 242750
2015-07-21 00:47:18 +00:00
Andrew Wilkins
7a94f98bea [llgo] cmd/gllgo: handle/ignore more flags
Summary:
This diff is to support Debian packaging,
which sets various hardening-rleated flags
in CFLAGS. They don't make sense for Go,
so we just ignore them.

Reviewers: pcc

Subscribers: llvm-commits, axw

Differential Revision: http://reviews.llvm.org/D11288

llvm-svn: 242513
2015-07-17 08:15:01 +00:00
Andrew Wilkins
e5a7b93e1b [llgo] update libgo-llgo.so version to match libtool_VERSION
Summary:
libtool_VERSION was changed in gofrontend a while ago,
but CMakeLists.txt in llgo wasn't updated, and so the
install target fails. Not sure how this went unnoticed
for so long.

Reviewers: pcc

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D11118

llvm-svn: 242291
2015-07-15 13:17:04 +00:00
Andrew Wilkins
fec95af706 [llgo] set function personality with SetPersonality
Summary:
If a function requires a landing pad, set the personality function.

Requires D11116.

Reviewers: pcc

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D11117

llvm-svn: 242290
2015-07-15 13:05:35 +00:00
Andrew Wilkins
4ffbbd7da7 [llgo] cmd/llgoi: use line editor
Summary:
This diff adds line-editing to llgoi, by
vendoring and using github.com/peterh/liner.
I have only implemented the basics here;
follow-ups will come later to add persisted
history, and completion,

Reviewers: pcc

Reviewed By: pcc

Subscribers: axw, llvm-commits

Differential Revision: http://reviews.llvm.org/D9811

llvm-svn: 238100
2015-05-23 15:16:09 +00:00
Peter Collingbourne
dd90dc8aa9 benchcomp: Add macho_symsizes mode for comparing Mach-O object symbol sizes.
llvm-svn: 237199
2015-05-12 22:14:26 +00:00
Andrew Wilkins
11e66bb7df [llgo] add buildbot-slave config
Summary:
This patch adds the configuration used to deploy
the llgo-builder buildbot slave. The builder is
deployed to Google Compute Engine using Juju.

Reviewers: pcc

Reviewed By: pcc

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D8854

llvm-svn: 234383
2015-04-08 01:41:46 +00:00
Peter Collingbourne
76beae321a Add documentation for llgoi, update README
llvm-svn: 234137
2015-04-05 23:32:13 +00:00
Peter Collingbourne
d35a6aff92 Roll gofrontend to 15a24202fa42.
Takes us to Go 1.4.2 plus a number of bug fixes.

Differential Revision: http://reviews.llvm.org/D8830

llvm-svn: 234136
2015-04-05 23:32:10 +00:00
Peter Collingbourne
cac325993a Roll gofrontend to 07baa07598ea; roll libffi to r219477.
Incorporates https://codereview.appspot.com/198770044, which causes us to start
using the static chain register for closures instead of __go_{get,set}_closure.

Differential Revision: http://reviews.llvm.org/D8829

llvm-svn: 234135
2015-04-05 23:31:49 +00:00
Peter Collingbourne
93c73ebcbd Roll gofrontend to a6e10414311a
This takes us to Go 1.4. Also includes a couple of changes to the test
suite, both in the runtime package:

- Disable TestSetPanicOnFault. We cannot support this scenario at all,
  due to LLVM's lack of non-call exceptions.

- Tweak TestFinalizerType. This test only passes with two GC runs.

Differential Revision: http://reviews.llvm.org/D8828

llvm-svn: 234134
2015-04-05 23:30:42 +00:00
Peter Collingbourne
7d39641c80 Roll gotools to d4e70101.
Most importantly, this gives us https://go-review.googlesource.com/7533 which
fixes a bug in go/ssa that caused test failures in the Go 1.4 standard library.

Also remove the go1.4 tag workaround. We no longer need it now that we
ship llgo-go.

Differential Revision: http://reviews.llvm.org/D8827

llvm-svn: 234133
2015-04-05 23:28:18 +00:00
Peter Collingbourne
38a7dde1c5 llgoi: Fix type identity for imported binary packages.
go/loader creates a fresh package map for each source package it imports. In
llgoi this caused binary imported packages to be imported anew for every input
line, resulting in spurious type errors and panics in go/ssa when encountering
previously imported types. Fix this by setting types.Config.Packages to our
internal package map.

Differential Revision: http://reviews.llvm.org/D8409

llvm-svn: 232617
2015-03-18 08:34:40 +00:00
Peter Collingbourne
4b1ba6f09f Add llgo-go to installation.
llvm-svn: 232614
2015-03-18 07:35:17 +00:00
Peter Collingbourne
6092d2c065 llgoi: Fix importing source packages together with dependent binary packages.
Note that this means that llgoi does not support the case
where a package's pkgpath is different from its import path,
but I don't think this should actually happen with llgoi.

Differential Revision: http://reviews.llvm.org/D8403

llvm-svn: 232612
2015-03-18 06:04:22 +00:00
Peter Collingbourne
3a6ee8f25c Add cgo dependency to llgo-stage2 and llgoi.
llvm-svn: 232564
2015-03-17 23:17:38 +00:00
Andrew Wilkins
984bc5298b [llgo] update year in LICENSE.txt
llvm-svn: 232133
2015-03-13 01:36:02 +00:00
Andrew Wilkins
d07b2b4228 [llgo] Disable known failing packages in check-libgo
Summary:
There are two packages in libgo which have
known failures when running the "make check" rule.
This change disables those packages in the tests so
that we can run libgo tests without them until the
root causes are identified and resolved.

Test Plan: ran check-libgo rule

Reviewers: pcc

Reviewed By: pcc

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D8003

llvm-svn: 231448
2015-03-06 02:49:07 +00:00
Peter Collingbourne
68a640c080 Fix test to use explicit load type.
llvm-svn: 231417
2015-03-05 22:55:42 +00:00
Andrew Wilkins
ac15169034 [llgo] debug: create replaceable type through DIBuilder
Summary:
llgo was asserting in DebugInfo, which was interpreting
the temporary MDNodes we were creating as DIScopes instead
of DITypes (in DIScope::getRef).

This proposal changes llgo to use DIBuilder's
createReplaceableCompositeType method to create a DIType
that can be RAUW'd.

Reviewers: pcc

Reviewed By: pcc

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D7852

llvm-svn: 230953
2015-03-02 12:42:45 +00:00
Peter Collingbourne
7ddf832e0e Build cgo and llgo-go
Differential Revision: http://reviews.llvm.org/D7629

llvm-svn: 229211
2015-02-14 01:46:01 +00:00
Peter Collingbourne
6393bae4f9 Roll gofrontend to 0fde0b6a7eb2
This gives us the sources for cgo, go and gofmt.

llvm-svn: 229174
2015-02-13 22:59:07 +00:00
Peter Collingbourne
c969b1b063 Update for API change
llvm-svn: 229173
2015-02-13 22:58:36 +00:00
Andrew Wilkins
72b5e5f5b4 irgen: don't emit debug metadata for locals
Summary:
The debug metadata we generate is wrong, and is
now causing build failures. This revision disables
the only llvm.dbg.declare calls we make.

(There is also a drive-by fix to CMakeLists.txt,
adding in a missing .go dependency.)

Fixes http://llvm.org/bugs/show_bug.cgi?id=22330

Reviewers: pcc

Reviewed By: pcc

Subscribers: dblaikie, llvm-commits

Differential Revision: http://reviews.llvm.org/D7222

llvm-svn: 227403
2015-01-29 00:34:30 +00:00
Peter Collingbourne
6725a83e84 Introduce llgoi, a REPL for Go
llgoi is a Go REPL based on llgo irgen and the LLVM JIT. It supports
expressions, statements, most declarations and imports, including binary
imports from the standard library and source imports from $GOPATH.

Differential Revision: http://reviews.llvm.org/D6957

llvm-svn: 226097
2015-01-15 04:13:29 +00:00
Peter Collingbourne
5ab8061293 irgen: expose DisableUnusedImportCheck flag
Differential Revision: http://reviews.llvm.org/D6956

llvm-svn: 225946
2015-01-14 05:18:16 +00:00
Peter Collingbourne
c253ebc4af irgen: expose PackageCreated hook
Differential Revision: http://reviews.llvm.org/D6955

llvm-svn: 225945
2015-01-14 05:17:41 +00:00
Peter Collingbourne
56109b78c7 Roll gotools to 47f2109c.
At the same time, perform a number of simplifications:

- Rename go.tools directory to gotools.

- Import only the go directory; all required Go analysis code and
  its dependencies have now been moved to this directory.

llvm-svn: 225825
2015-01-13 20:45:08 +00:00
Andrew Wilkins
f3718a9bf1 [llgo] irgen: generate switch instructions
Summary:
    With this patch, llgo uses ssautil.Switches
    to reconstitute (and synthesise) switches,
    which can then be lowered to lookup tables,
    trees, etc.

    We currently only handle integer const case
    switches. We erase the comparison blocks (other
    than the initial block), and generate a switch
    instruction at the end of the block starting
    the if-else-if chain. ssautil.Switches does
    not remove duplicate const cases (e.g. same
    operands for "||"), so we do this in llgo for
    now.

Test Plan: lit test added

Reviewers: pcc

Reviewed By: pcc

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D6831

llvm-svn: 225433
2015-01-08 07:49:28 +00:00
Chandler Carruth
ce7d87651b Test commit to check the new git mirror.
llvm-svn: 225394
2015-01-07 21:28:10 +00:00
Andrew Wilkins
75f34af99c [llgo] Elide alloca for unused received values in select
Summary: If a receive case in a select statement is not assigned to a named variable, then we can eliminate the alloca and copy at runtime.

Test Plan: lit test added

Reviewers: pcc

Reviewed By: pcc

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D6785

llvm-svn: 225033
2014-12-31 03:46:49 +00:00
Peter Collingbourne
d34d92fb9c irgen: modify the ABI to use init guards instead of priority
The new ABI is simpler for use cases such as dynamically loaded packages.

The calling convention for import functions is similar to what go/ssa would
produce if BareInits were cleared. However, simply clearing this flag causes
two additional issues:

 1) We would need to special case the 'init$guard' variable (see
    discussion in https://codereview.appspot.com/78780043/).

 2) The call to __go_register_gc_roots needs to appear in the right
    place, i.e. after the guard check. Making this check appear
    in the right place with non-bare inits seems unreliable at best.

So we keep BareInits set and generate the necessary code manually.

It is still possible to get the old ABI by specifying a path to a gccgo
installation.

Differential Revision: http://reviews.llvm.org/D6804

llvm-svn: 225030
2014-12-31 00:25:39 +00:00
Peter Collingbourne
a0a53085e1 irgen: make it possible to use a custom importer
Differential Revision: http://reviews.llvm.org/D6803

llvm-svn: 225029
2014-12-31 00:25:36 +00:00
Peter Collingbourne
76c1d4e4dd irgen: return a types.Package to the compiler client
Differential Revision: http://reviews.llvm.org/D6802

llvm-svn: 225028
2014-12-31 00:25:35 +00:00
Peter Collingbourne
82a260eaaf irgen: introduce ManglePackagePath function
This is useful for clients that need to use llgo's mangling of the package
path to look up a specific function within a given package.

Differential Revision: http://reviews.llvm.org/D6801

llvm-svn: 225027
2014-12-31 00:25:34 +00:00
Peter Collingbourne
9350942b20 irgen, driver: modify Compiler.Compile to take a FileSet and Files
This change allows clients to generate IR using "files" received from locations
other than the file system. The regular file parser is moved to a new library,
"driver", which is intended to eventually contain much of the logic from
the existing driver.

Differential Revision: http://reviews.llvm.org/D6794

llvm-svn: 225026
2014-12-31 00:25:32 +00:00
Chandler Carruth
a5ecd8a9f7 [cmake/multilib] Teach llgo to respect the LLVM_LIBDIR_SUFFIX variable for
multilib build and installs.

Summary:
This requires introducing a generated header to encapsulate the
LLVM_LIBDIR_SUFFIX value from the build system and push it into the go
code. From there, I've adjusted the gllgo code to systematically use
this rather than a raw "lib". This requires some awkwardness as one of
the flags *must* be "lib"-relative for compatibility with how gccgo
works. For that flag, we use ".." to back up a directory and then go
into the proper lib directory.

Differential Revision: http://reviews.llvm.org/D6795

llvm-svn: 224964
2014-12-29 22:57:21 +00:00
Peter Collingbourne
b113d0206e irgen: remove unused compiler.runtimetypespkg field.
llvm-svn: 224931
2014-12-29 13:01:28 +00:00