atomic.ll 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. ; RUN: opt -basicaa -memcpyopt -S < %s | FileCheck %s
  2. target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
  3. target triple = "x86_64-apple-macosx10.7.0"
  4. @x = global i32 0
  5. declare void @otherf(i32*)
  6. declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind
  7. ; memcpyopt should not touch atomic ops
  8. define void @test1() nounwind uwtable ssp {
  9. ; CHECK: test1
  10. ; CHECK: store atomic
  11. %x = alloca [101 x i32], align 16
  12. %bc = bitcast [101 x i32]* %x to i8*
  13. call void @llvm.memset.p0i8.i64(i8* %bc, i8 0, i64 400, i32 16, i1 false)
  14. %gep1 = getelementptr inbounds [101 x i32], [101 x i32]* %x, i32 0, i32 100
  15. store atomic i32 0, i32* %gep1 unordered, align 4
  16. %gep2 = getelementptr inbounds [101 x i32], [101 x i32]* %x, i32 0, i32 0
  17. call void @otherf(i32* %gep2)
  18. ret void
  19. }
  20. ; memcpyopt across unordered store
  21. define void @test2() nounwind uwtable ssp {
  22. ; CHECK: test2
  23. ; CHECK: call
  24. ; CHECK-NEXT: store atomic
  25. ; CHECK-NEXT: call
  26. %old = alloca i32
  27. %new = alloca i32
  28. call void @otherf(i32* nocapture %old)
  29. store atomic i32 0, i32* @x unordered, align 4
  30. %v = load i32, i32* %old
  31. store i32 %v, i32* %new
  32. call void @otherf(i32* nocapture %new)
  33. ret void
  34. }