blob: aeb76e42d295116a97de277bf8e870822b581b68 [file] [log] [blame]
Bill Wendling75920ad2012-04-24 10:45:44 +00001; RUN: opt < %s -basicaa -globalsmodref-aa -gvn -S | FileCheck %s
Chris Lattnere04d51f2005-03-23 23:48:56 +00002
Duncan Sandse4dc7172007-11-23 19:30:27 +00003; This test requires the use of previous analyses to determine that
Chris Lattnere04d51f2005-03-23 23:48:56 +00004; doesnotmodX does not modify X (because 'sin' doesn't).
5
Duncan Sandse4dc7172007-11-23 19:30:27 +00006@X = internal global i32 4 ; <i32*> [#uses=2]
Chris Lattnere04d51f2005-03-23 23:48:56 +00007
Duncan Sandse4dc7172007-11-23 19:30:27 +00008declare double @sin(double) readnone
Chris Lattnere04d51f2005-03-23 23:48:56 +00009
Duncan Sandse4dc7172007-11-23 19:30:27 +000010define i32 @test(i32* %P) {
Bill Wendling75920ad2012-04-24 10:45:44 +000011; CHECK: @test
12; CHECK-NEXT: store i32 12, i32* @X
13; CHECK-NEXT: call double @doesnotmodX(double 1.000000e+00)
14; CHECK-NEXT: ret i32 12
Duncan Sandse4dc7172007-11-23 19:30:27 +000015 store i32 12, i32* @X
16 call double @doesnotmodX( double 1.000000e+00 ) ; <double>:1 [#uses=0]
17 %V = load i32* @X ; <i32> [#uses=1]
18 ret i32 %V
Chris Lattnere04d51f2005-03-23 23:48:56 +000019}
20
Duncan Sandse4dc7172007-11-23 19:30:27 +000021define double @doesnotmodX(double %V) {
22 %V2 = call double @sin( double %V ) readnone ; <double> [#uses=1]
23 ret double %V2
Chris Lattnere04d51f2005-03-23 23:48:56 +000024}