Commit Graph

53 Commits

Author SHA1 Message Date
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
Peter Collingbourne b6edff93ae irgen: do not emit an extra terminator for panic thunks
Found with GoSmith.

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

llvm-svn: 224904
2014-12-28 22:39:01 +00:00
Andrew Wilkins c17d0bbfb3 Test commit
Just changing whitespace to test commit access...

llvm-svn: 224565
2014-12-19 02:45:48 +00:00
Peter Collingbourne 1f89ffdf4d irgen: fix canAvoid*
Patch by Andrew Wilkins!

canAvoidElementLoad and canAvoidLoad were incorrectly
eliding loads when an index expression is used as an
another array index expression. This led to a panic.

See comments on https://github.com/go-llvm/llgo/issues/175

Test Plan: lit test added

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

llvm-svn: 224420
2014-12-17 09:45:05 +00:00
Peter Collingbourne 545e7276a8 Use the object's package to mangle method names, rather than the receiver's package
If we use the receiver's package, we can end up with identical manglings
for different functions. Consider:

package p
type U struct{}
func (U) f()

package q
import "p"
type T struct { p.U }
func (T) f()

The method set of *T has two synthetic methods named (*T).f(); one forwards to
(T).f(), and the other to (U).f(). Previously, we were distinguishing them
by the receiver's package, and in this case because both methods have the
same receiver, they received the same name.

The methods are correctly distinguished by the package owning the identifier
"f", which is available via f.Object().Pkg().

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

llvm-svn: 224357
2014-12-16 20:04:55 +00:00
Peter Collingbourne 8bcc05d5f4 Update to new bindings.
llvm-svn: 224180
2014-12-13 02:26:00 +00:00
Peter Collingbourne c5b84a53f7 Optimize comparisons to empty string.
Geo-mean performance improvement of 0.2% (-0.3% - 0.9% @ 95% CI).

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

llvm-svn: 223728
2014-12-09 01:02:12 +00:00
Peter Collingbourne ac4744ec86 Add .arcconfig file.
llvm-svn: 223689
2014-12-08 20:12:22 +00:00