blob: 164252de3c15fae5a6fc610470068a54532076cc [file] [log] [blame]
Eric Christopher5d8aa342011-06-30 00:48:30 +00001; RUN: llc < %s -march=x86-64 | FileCheck %s
2
3; rdar://9692967
4
Eric Christophere3997d42011-07-01 23:04:38 +00005define void @t1(i64* %p, i32 %b) nounwind {
Eric Christopher5d8aa342011-06-30 00:48:30 +00006entry:
7 %p.addr = alloca i64*, align 8
8 store i64* %p, i64** %p.addr, align 8
9 %tmp = load i64** %p.addr, align 8
10 call void @llvm.memory.barrier(i1 true, i1 true, i1 true, i1 true, i1 true)
Eric Christophere3997d42011-07-01 23:04:38 +000011; CHECK: t1:
12; CHECK: movl $2147483648, %eax
Eric Christopher5d8aa342011-06-30 00:48:30 +000013; CHECK: lock
Eric Christopher83965612011-07-02 04:06:41 +000014; CHECK-NEXT: orq %r{{.*}}, (%r{{.*}})
Eric Christopher5d8aa342011-06-30 00:48:30 +000015 %0 = call i64 @llvm.atomic.load.or.i64.p0i64(i64* %tmp, i64 2147483648)
16 call void @llvm.memory.barrier(i1 true, i1 true, i1 true, i1 true, i1 true)
17 ret void
18}
Eric Christophere3997d42011-07-01 23:04:38 +000019
20define void @t2(i64* %p, i32 %b) nounwind {
21entry:
22 %p.addr = alloca i64*, align 8
23 store i64* %p, i64** %p.addr, align 8
24 %tmp = load i64** %p.addr, align 8
25 call void @llvm.memory.barrier(i1 true, i1 true, i1 true, i1 true, i1 true)
26; CHECK: t2:
27; CHECK-NOT: movl
28; CHECK: lock
Eric Christopher83965612011-07-02 04:06:41 +000029; CHECK-NEXT: orq $2147483644, (%r{{.*}})
Eric Christophere3997d42011-07-01 23:04:38 +000030 %0 = call i64 @llvm.atomic.load.or.i64.p0i64(i64* %tmp, i64 2147483644)
31 call void @llvm.memory.barrier(i1 true, i1 true, i1 true, i1 true, i1 true)
32 ret void
33}
34
Eric Christopher5d8aa342011-06-30 00:48:30 +000035declare i64 @llvm.atomic.load.or.i64.p0i64(i64* nocapture, i64) nounwind
36declare void @llvm.memory.barrier(i1, i1, i1, i1, i1) nounwind