diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2015-01-31 19:27:28 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2015-01-31 19:27:28 +0000 | 
| commit | ec304151b74f9254d7029ee4d197ce1f7cbe501a (patch) | |
| tree | 63e4ed55e4fbb581fd4731d44a327a7b3278e0a1 /test/Transforms/GVN/edge.ll | |
| parent | 67c32a98315f785a9ec9d531c1f571a0196c7463 (diff) | |
Diffstat (limited to 'test/Transforms/GVN/edge.ll')
| -rw-r--r-- | test/Transforms/GVN/edge.ll | 48 | 
1 files changed, 42 insertions, 6 deletions
diff --git a/test/Transforms/GVN/edge.ll b/test/Transforms/GVN/edge.ll index 1dc285ec3d7cc..f28a76bb42d6c 100644 --- a/test/Transforms/GVN/edge.ll +++ b/test/Transforms/GVN/edge.ll @@ -69,11 +69,11 @@ if:    br label %return  return: -  %retval.0 = phi double [ %div, %if ], [ %x, %entry ] -  ret double %retval.0 +  %retval = phi double [ %div, %if ], [ %x, %entry ] +  ret double %retval  ; CHECK-LABEL: define double @fcmp_oeq( -; CHECK: %div = fdiv double %x, 2.000000e+00 +; CHECK: %div = fdiv double %x, 2.0  }  define double @fcmp_une(double %x, double %y) { @@ -86,10 +86,46 @@ else:    br label %return  return: -  %retval.0 = phi double [ %div, %else ], [ %x, %entry ] -  ret double %retval.0 +  %retval = phi double [ %div, %else ], [ %x, %entry ] +  ret double %retval  ; CHECK-LABEL: define double @fcmp_une( -; CHECK: %div = fdiv double %x, 2.000000e+00 +; CHECK: %div = fdiv double %x, 2.0  } +; PR22376 - We can't propagate zero constants because -0.0  +; compares equal to 0.0. If %y is -0.0 in this test case, +; we would produce the wrong sign on the infinity return value. +define double @fcmp_oeq_zero(double %x, double %y) { +entry: +  %cmp = fcmp oeq double %y, 0.0 +  br i1 %cmp, label %if, label %return + +if: +  %div = fdiv double %x, %y +  br label %return + +return: +  %retval = phi double [ %div, %if ], [ %x, %entry ] +  ret double %retval + +; CHECK-LABEL: define double @fcmp_oeq_zero( +; CHECK: %div = fdiv double %x, %y +} + +define double @fcmp_une_zero(double %x, double %y) { +entry: +  %cmp = fcmp une double %y, -0.0 +  br i1 %cmp, label %return, label %else + +else: +  %div = fdiv double %x, %y +  br label %return + +return: +  %retval = phi double [ %div, %else ], [ %x, %entry ] +  ret double %retval + +; CHECK-LABEL: define double @fcmp_une_zero( +; CHECK: %div = fdiv double %x, %y +}  | 
