; RUN: llvm-upgrade < %s | llvm-as | opt -globalsmodref-aa -load-vn -gcse | llvm-dis | not grep load

; This test requires the use of previous analyses to determine that 
; doesnotmodX does not modify X (because 'sin' doesn't).

%X = internal global int 4

declare double %sin(double)

int %test(int *%P) {
  store int 12,  int* %X
  call double %doesnotmodX(double 1.0)
  %V = load int* %X
  ret int %V
}

double %doesnotmodX(double %V) {
  %V2 = call double %sin(double %V)
  ret double %V2
}
