Skip to content

Commit fc60cf4

Browse files
committed
---
yaml --- r: 60572 b: refs/heads/auto c: 6c0a469 h: refs/heads/master v: v3
1 parent 08a76b4 commit fc60cf4

File tree

4 files changed

+18
-12
lines changed

4 files changed

+18
-12
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ refs/heads/try3: 9387340aab40a73e8424c48fd42f0c521a4875c0
1414
refs/tags/release-0.3.1: 495bae036dfe5ec6ceafd3312b4dca48741e845b
1515
refs/tags/release-0.4: e828ea2080499553b97dfe33b3f4d472b4562ad7
1616
refs/tags/release-0.5: 7e3bcfbf21278251ee936ad53e92e9b719702d73
17-
refs/heads/auto: 32e30aaa00d098d81fd269d48845cbfd95d20710
17+
refs/heads/auto: 6c0a4693c94ffbb5601b59d0c82c7785d347107d
1818
refs/heads/servo: af82457af293e2a842ba6b7759b70288da276167
1919
refs/tags/release-0.6: b4ebcfa1812664df5e142f0134a5faea3918544c

branches/auto/src/librustc/lib/llvm.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1571,13 +1571,15 @@ pub mod llvm {
15711571
pub unsafe fn LLVMBuildAtomicLoad(B: BuilderRef,
15721572
PointerVal: ValueRef,
15731573
Name: *c_char,
1574-
Order: AtomicOrdering)
1574+
Order: AtomicOrdering,
1575+
Alignment: c_uint)
15751576
-> ValueRef;
15761577

15771578
pub unsafe fn LLVMBuildAtomicStore(B: BuilderRef,
15781579
Val: ValueRef,
15791580
Ptr: ValueRef,
1580-
Order: AtomicOrdering)
1581+
Order: AtomicOrdering,
1582+
Alignment: c_uint)
15811583
-> ValueRef;
15821584

15831585
pub unsafe fn LLVMBuildAtomicCmpXchg(B: BuilderRef,

branches/auto/src/librustc/middle/trans/build.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use lib::llvm::{Opcode, IntPredicate, RealPredicate, False};
1414
use lib::llvm::{ValueRef, TypeRef, BasicBlockRef, BuilderRef, ModuleRef};
1515
use lib;
1616
use middle::trans::common::*;
17+
use middle::trans::machine::llalign_of_min;
1718
use syntax::codemap::span;
1819

1920
use core::hashmap::HashMap;
@@ -544,7 +545,8 @@ pub fn AtomicLoad(cx: block, PointerVal: ValueRef, order: AtomicOrdering) -> Val
544545
return llvm::LLVMGetUndef(ccx.int_type);
545546
}
546547
count_insn(cx, "load.atomic");
547-
return llvm::LLVMBuildAtomicLoad(B(cx), PointerVal, noname(), order);
548+
let align = llalign_of_min(*ccx, ccx.int_type);
549+
return llvm::LLVMBuildAtomicLoad(B(cx), PointerVal, noname(), order, align as c_uint);
548550
}
549551
}
550552
@@ -558,7 +560,6 @@ pub fn LoadRangeAssert(cx: block, PointerVal: ValueRef, lo: c_ulonglong,
558560
let min = llvm::LLVMConstInt(t, lo, signed);
559561
let max = llvm::LLVMConstInt(t, hi, signed);
560562
561-
562563
do vec::as_imm_buf([min, max]) |ptr, len| {
563564
llvm::LLVMSetMetadata(value, lib::llvm::MD_range as c_uint,
564565
llvm::LLVMMDNode(ptr, len as c_uint));
@@ -586,7 +587,8 @@ pub fn AtomicStore(cx: block, Val: ValueRef, Ptr: ValueRef, order: AtomicOrderin
586587
val_str(cx.ccx().tn, Val),
587588
val_str(cx.ccx().tn, Ptr));
588589
count_insn(cx, "store.atomic");
589-
llvm::LLVMBuildAtomicStore(B(cx), Val, Ptr, order);
590+
let align = llalign_of_min(cx.ccx(), cx.ccx().int_type);
591+
llvm::LLVMBuildAtomicStore(B(cx), Val, Ptr, order, align as c_uint);
590592
}
591593
}
592594

branches/auto/src/rustllvm/RustWrapper.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -548,22 +548,24 @@ extern "C" LLVMTypeRef LLVMMetadataType(void) {
548548
extern "C" LLVMValueRef LLVMBuildAtomicLoad(LLVMBuilderRef B,
549549
LLVMValueRef source,
550550
const char* Name,
551-
AtomicOrdering order) {
551+
AtomicOrdering order,
552+
unsigned alignment) {
552553
LoadInst* li = new LoadInst(unwrap(source),0);
553554
li->setVolatile(true);
554555
li->setAtomic(order);
555-
li->setAlignment(sizeof(intptr_t));
556+
li->setAlignment(alignment);
556557
return wrap(unwrap(B)->Insert(li, Name));
557558
}
558559

559560
extern "C" LLVMValueRef LLVMBuildAtomicStore(LLVMBuilderRef B,
560-
LLVMValueRef val,
561-
LLVMValueRef target,
562-
AtomicOrdering order) {
561+
LLVMValueRef val,
562+
LLVMValueRef target,
563+
AtomicOrdering order,
564+
unsigned alignment) {
563565
StoreInst* si = new StoreInst(unwrap(val),unwrap(target));
564566
si->setVolatile(true);
565567
si->setAtomic(order);
566-
si->setAlignment(sizeof(intptr_t));
568+
si->setAlignment(alignment);
567569
return wrap(unwrap(B)->Insert(si));
568570
}
569571

0 commit comments

Comments
 (0)