2897 Commits

Author SHA1 Message Date
Eduard-Mihai Burtescu
864928297d rustc: separate TraitItem from their parent Item, just like ImplItem. 2016-12-28 11:21:45 +02:00
Niko Matsakis
ad747c5869 propagate TIME_DEPTH to the helper threads for -Z time-passes 2016-12-27 21:35:34 -05:00
bors
d849b13267 Auto merge of #38574 - Mark-Simulacrum:box-free-unspecialize, r=eddyb
Remove special case for Box<ZST> in trans

Remove extra lang item, `exchange_free`; use `box_free` instead.

Trans used to insert code equivalent to `box_free` in a wrapper around
`exchange_free`, and that code is now removed from trans.

Fixes #37710.
2016-12-27 11:32:39 +00:00
Jorge Aparicio
18d49288d5 PTX support
- `--emit=asm --target=nvptx64-nvidia-cuda` can be used to turn a crate
  into a PTX module (a `.s` file).

- intrinsics like `__syncthreads` and `blockIdx.x` are exposed as
  `"platform-intrinsics"`.

- "cabi" has been implemented for the nvptx and nvptx64 architectures.
  i.e. `extern "C"` works.

- a new ABI, `"ptx-kernel"`. That can be used to generate "global"
  functions. Example: `extern "ptx-kernel" fn kernel() { .. }`. All
  other functions are "device" functions.
2016-12-26 21:06:23 -05:00
Mark Simulacrum
ca115dd083 Remove extra lang item, exchange_free; use box_free instead.
Trans used to insert code equivalent to box_free in a wrapper around
exchange_free, and that code is now removed from trans.
2016-12-26 17:13:51 -07:00
bors
b7e5148bbd Auto merge of #38314 - japaric:do-not-delete-enable-llvm-backend, r=alexcrichton
initial SPARC support

### UPDATE

Can now compile `no_std` executables with:

```
$ cargo new --bin app && cd $_

$ edit Cargo.toml && tail -n2 $_
[dependencies]
core = { path = "/path/to/rust/src/libcore" }

$ edit src/main.rs && cat $_
#![feature(lang_items)]
#![no_std]
#![no_main]

#[no_mangle]
pub fn _start() -> ! {
    loop {}
}

#[lang = "panic_fmt"]
fn panic_fmt() -> ! {
    loop {}
}

$ edit sparc-none-elf.json && cat $_
{
  "arch": "sparc",
  "data-layout": "E-m:e-p:32:32-i64:64-f128:64-n32-S64",
  "executables": true,
  "llvm-target": "sparc",
  "os": "none",
  "panic-strategy": "abort",
  "target-endian": "big",
  "target-pointer-width": "32"
}

$ cargo rustc --target sparc-none-elf -- -C linker=sparc-unknown-elf-gcc -C link-args=-nostartfiles

$ file target/sparc-none-elf/debug/app
app: ELF 32-bit MSB executable, SPARC, version 1 (SYSV), statically linked, not stripped

$ sparc-unknown-elf-readelf -h target/sparc-none-elf/debug/app
ELF Header:
  Magic:   7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF32
  Data:                              2's complement, big endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           Sparc
  Version:                           0x1
  Entry point address:               0x10074
  Start of program headers:          52 (bytes into file)
  Start of section headers:          1188 (bytes into file)
  Flags:                             0x0
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         2
  Size of section headers:           40 (bytes)
  Number of section headers:         14
  Section header string table index: 11

$ sparc-unknown-elf-objdump -Cd target/sparc-none-elf/debug/app

target/sparc-none-elf/debug/app:     file format elf32-sparc

Disassembly of section .text:

00010074 <_start>:
   10074:       9d e3 bf 98     save  %sp, -104, %sp
   10078:       10 80 00 02     b  10080 <_start+0xc>
   1007c:       01 00 00 00     nop
   10080:       10 80 00 02     b  10088 <_start+0x14>
   10084:       01 00 00 00     nop
   10088:       10 80 00 00     b  10088 <_start+0x14>
   1008c:       01 00 00 00     nop
```

---

Someone wants to attempt launching some Rust [into space](https://www.reddit.com/r/rust/comments/5h76oa/c_interop/) but their platform is based on the SPARCv8 architecture. Let's not block them by enabling LLVM's SPARC backend.

Something very important that they'll also need is the "cabi" stuff as they'll be embedding some Rust code into a bigger C application (i.e. heavy use of `extern "C"`). The question there is what name(s) should we use for "target_arch" as the "cabi" implementation [varies according to that parameter](https://github.com/rust-lang/rust/blob/1.13.0/src/librustc_trans/abi.rs#L498-L523).

AFAICT, SPARCv8 is a 32-bit architecture and SPARCv9 is a 64-bit architecture. And, LLVM uses `sparc`, `sparcv9` and `sparcel` for [the architecture triple](ac1c94226e/include/llvm/ADT/Triple.h (L67-L69)) so perhaps we should use `target_arch = "sparc"` (32-bit) and `target_arch = "sparcv9"` (64-bit) as well.

r? @alexcrichton This PR only enables this LLVM backend when rustbuild is used. Do I also need to implement this for the old Makefile-based build system? Or are all our nightlies now being generated using rustbuild?

cc @brson
2016-12-26 20:48:43 +00:00
bors
f536d90c78 Auto merge of #38542 - YaLTeR:fastcall-fix, r=pnkfelix
Fix fastcall not applying inreg attributes to arguments

Fixes https://github.com/rust-lang/rust/issues/18086
2016-12-26 17:23:42 +00:00
Steve Klabnik
abf478455d Rollup merge of #38554 - DirkyJerky:master, r=frewsxcv
Create hyperlink to correct documentation

In librustc_trans's readme
2016-12-24 14:29:31 -05:00
Geoff Yoerger
fc9719c4ca Rename README.txt to README.md 2016-12-22 12:52:22 -06:00
Geoff Yoerger
531ac797a8 Add relative hyperlink 2016-12-22 12:51:31 -06:00
Ivan Molodetskikh
5e2cea9a4e
Cleaned up the code and added tests. 2016-12-22 14:54:42 +03:00
Philip Craig
af34f91c27 Fix debuginfo for unsized struct members
The member was given the size of a fat pointer, which caused
llvm to emit DWARF attributes for a 128-bit bitfield.
2016-12-22 21:16:41 +10:00
Mark Simulacrum
afc2dcd0ca Make drop glue for unsized value pass two arguments instead of *(data, meta) 2016-12-21 12:02:09 -07:00
Ivan Molodetskikh
c461cdfdf6
Fixed fastcall not applying inreg attributes to arguments like the C/C++ fastcall. 2016-12-21 21:44:40 +03:00
Mark Simulacrum
0013d4cdf6 Fix rebase errors. 2016-12-20 20:37:19 -07:00
Mark Simulacrum
079abd0b1e Reuse cleanup pad declared at start of block. 2016-12-20 20:04:46 -07:00
Mark Simulacrum
c1bc5e51d6 Improve cache quality for eh_personality. 2016-12-20 20:04:46 -07:00
Mark Simulacrum
a9b5c63d43 Move eh_unwind_resume into CrateContext
Also improves cache quality.
2016-12-20 20:04:46 -07:00
Mark Simulacrum
a811f60834 Simplify get_landing_pad by inlining UnwindKind. 2016-12-20 20:04:45 -07:00
Mark Simulacrum
654131cb53 Add unreachable() after calls to eh_unwind_resume. 2016-12-20 20:04:45 -07:00
Mark Simulacrum
07cf2a9005 Simplify callee by removing is_indirect branch. 2016-12-20 20:04:45 -07:00
Mark Simulacrum
57914f626b Move eh_personality() onto CrateContext 2016-12-20 20:04:45 -07:00
Mark Simulacrum
3198797050 Remove outdated comment 2016-12-20 20:04:45 -07:00
Mark Simulacrum
bd009dc444 Remove fn_ty from FunctionContext 2016-12-20 20:04:44 -07:00
Mark Simulacrum
15b9b27bb0 slice_for_each gives a reference already 2016-12-20 20:04:44 -07:00
Mark Simulacrum
295ea0d6c3 Reduce coerce_unsized_into to one call
We cannot inline due to it being recursive.
2016-12-20 20:04:44 -07:00
Mark Simulacrum
98a13ffe44 Remove outdated comment 2016-12-20 20:04:44 -07:00
Mark Simulacrum
b9f1064760 Inline make_drop_glue 2016-12-20 20:04:44 -07:00
Mark Simulacrum
6a1ec55c47 Remove needless check 2016-12-20 20:04:43 -07:00
Mark Simulacrum
0d5a8ad110 Move get_landing_pad onto DropVal. 2016-12-20 20:04:43 -07:00
Mark Simulacrum
6f368e6da0 Use fn_ty directly 2016-12-20 20:04:43 -07:00
Mark Simulacrum
d55e73954a Do not use BAB after calling unreachable.
This does not make unreachable and other terminators take self by-value
because it is deemed too difficult. We would need to create by-value
methods on BAB that call into Builder, due to the Deref to builder.
2016-12-20 20:04:43 -07:00
Mark Simulacrum
6fac0a1a84 Change *.fcx.ccx to *.ccx 2016-12-20 20:04:43 -07:00
Mark Simulacrum
15c9e5e35b Mutate llargs instead of reconstructing it. 2016-12-20 20:04:42 -07:00
Mark Simulacrum
88202c5b83 Replace bcx.ccx() with bcx.ccx 2016-12-20 20:04:41 -07:00
Mark Simulacrum
f103ea4f89 Remove unecessary logic. 2016-12-20 20:03:36 -07:00
Mark Simulacrum
f11721a13e Add helper function to set debug locations 2016-12-20 20:03:35 -07:00
Mark Simulacrum
22bf541e27 Clean up uses of set_personality_fn.
Remove gnu/msvc constructors for Funclet; these are worse for
readability than explicit Some/None.
2016-12-20 20:03:35 -07:00
Mark Simulacrum
5ef85dd57e Change param_env to empty_param_env 2016-12-20 20:03:35 -07:00
Mark Simulacrum
7f87163071 Simplify funclets creation. 2016-12-20 20:03:35 -07:00
Mark Simulacrum
5301d380b6 Remove unused bcx from LocalAnalyzer. 2016-12-20 20:03:35 -07:00
Mark Simulacrum
0256f60461 Move debug info check into create_function_debug_context 2016-12-20 20:03:34 -07:00
Mark Simulacrum
a445199afb Remove public ccx function on MirContext 2016-12-20 20:03:34 -07:00
Mark Simulacrum
7f5dffbb19 Make debuginfo take debug_context instead of MirContext 2016-12-20 20:03:34 -07:00
Mark Simulacrum
dd1890f7f4 Remove unreachable call to unreachable 2016-12-20 20:03:34 -07:00
Mark Simulacrum
6e3d8cda2c Fix and cleanup callee shims 2016-12-20 20:03:34 -07:00
Mark Simulacrum
f9f1406eef Rebase fixes 2016-12-20 20:03:33 -07:00
Mark Simulacrum
63a0d85457 Make add_incoming_to_phi call slightly less confusing. 2016-12-20 20:03:33 -07:00
Mark Simulacrum
2bda3b7acb Inline and simplify init_cpad 2016-12-20 20:03:33 -07:00
Mark Simulacrum
4c7041ea7d Don't special case abort/unreachable intrinsics 2016-12-20 20:03:33 -07:00