Add a neat little two's complement hack for x86.
[oota-llvm.git] / test / CodeGen / X86 / negate-add-zero.ll
index 59a2bd09c18fd703a72cd28ff1848ed900a12b83..c3f412e09ae86a4c4749bafbad9ee24112cfcf29 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: llvm-as < %s | llc -enable-unsafe-fp-math -march=x86 | not grep xor
+; RUN: llc < %s -enable-unsafe-fp-math -march=x86 | not grep xor
 ; PR3374
 
 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
@@ -843,14 +843,14 @@ entry:
        %8 = getelementptr %struct.HNodeTranslateRotate3* %this, i32 0, i32 2, i32 0, i32 0, i32 0, i32 2               ; <double*> [#uses=0]
        %9 = getelementptr %struct.HNodeTranslateRotate3* %this, i32 0, i32 2, i32 0, i32 0, i32 0, i32 3               ; <double*> [#uses=0]
        %10 = load double* null, align 8                ; <double> [#uses=2]
-       %11 = sub double -0.000000e+00, %10             ; <double> [#uses=1]
+       %11 = fsub double -0.000000e+00, %10            ; <double> [#uses=1]
        %12 = load double* null, align 8                ; <double> [#uses=2]
        %13 = getelementptr %struct.HNodeTranslateRotate3* %this, i32 0, i32 1, i32 0, i32 0, i32 0, i32 3              ; <double*> [#uses=1]
        %14 = load double* %13, align 8         ; <double> [#uses=2]
-       %15 = sub double -0.000000e+00, %14             ; <double> [#uses=1]
+       %15 = fsub double -0.000000e+00, %14            ; <double> [#uses=1]
        %16 = getelementptr %struct.HNodeTranslateRotate3* %this, i32 0, i32 1, i32 0, i32 0, i32 0, i32 2              ; <double*> [#uses=1]
        %17 = load double* %16, align 8         ; <double> [#uses=2]
-       %18 = sub double -0.000000e+00, %17             ; <double> [#uses=1]
+       %18 = fsub double -0.000000e+00, %17            ; <double> [#uses=1]
        %19 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 0             ; <double*> [#uses=0]
        %20 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 3             ; <double*> [#uses=0]
        %21 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 6             ; <double*> [#uses=0]
@@ -866,28 +866,28 @@ entry:
        %31 = getelementptr %"struct.FixedMatrix<double,1,3,0,0>"* null, i32 0, i32 0, i32 0, i32 0             ; <double*> [#uses=0]
        %32 = getelementptr %"struct.FixedMatrix<double,1,3,0,0>"* null, i32 0, i32 0, i32 0, i32 1             ; <double*> [#uses=1]
        %33 = getelementptr %"struct.FixedMatrix<double,1,3,0,0>"* null, i32 0, i32 0, i32 0, i32 2             ; <double*> [#uses=1]
-       %34 = mul double %17, %5                ; <double> [#uses=1]
-       %35 = add double 0.000000e+00, %34              ; <double> [#uses=1]
-       %36 = add double 0.000000e+00, 0.000000e+00             ; <double> [#uses=1]
-       %37 = mul double %14, %3                ; <double> [#uses=1]
-       %38 = add double %36, %37               ; <double> [#uses=1]
-       %39 = mul double %12, %4                ; <double> [#uses=1]
-       %40 = add double %38, %39               ; <double> [#uses=1]
-       %41 = mul double %5, %11                ; <double> [#uses=1]
-       %42 = add double %40, %41               ; <double> [#uses=2]
+       %34 = fmul double %17, %5               ; <double> [#uses=1]
+       %35 = fadd double 0.000000e+00, %34             ; <double> [#uses=1]
+       %36 = fadd double 0.000000e+00, 0.000000e+00            ; <double> [#uses=1]
+       %37 = fmul double %14, %3               ; <double> [#uses=1]
+       %38 = fadd double %36, %37              ; <double> [#uses=1]
+       %39 = fmul double %12, %4               ; <double> [#uses=1]
+       %40 = fadd double %38, %39              ; <double> [#uses=1]
+       %41 = fmul double %5, %11               ; <double> [#uses=1]
+       %42 = fadd double %40, %41              ; <double> [#uses=2]
        store double %42, double* %32, align 8
-       %43 = mul double %2, %15                ; <double> [#uses=1]
-       %44 = add double %43, 0.000000e+00              ; <double> [#uses=1]
-       %45 = mul double %3, %18                ; <double> [#uses=1]
-       %46 = add double %44, %45               ; <double> [#uses=1]
-       %47 = mul double %10, %4                ; <double> [#uses=1]
-       %48 = add double %46, %47               ; <double> [#uses=1]
-       %49 = mul double %12, %5                ; <double> [#uses=1]
-       %50 = add double %48, %49               ; <double> [#uses=2]
+       %43 = fmul double %2, %15               ; <double> [#uses=1]
+       %44 = fadd double %43, 0.000000e+00             ; <double> [#uses=1]
+       %45 = fmul double %3, %18               ; <double> [#uses=1]
+       %46 = fadd double %44, %45              ; <double> [#uses=1]
+       %47 = fmul double %10, %4               ; <double> [#uses=1]
+       %48 = fadd double %46, %47              ; <double> [#uses=1]
+       %49 = fmul double %12, %5               ; <double> [#uses=1]
+       %50 = fadd double %48, %49              ; <double> [#uses=2]
        store double %50, double* %33, align 8
-       %51 = mul double %35, 2.000000e+00              ; <double> [#uses=1]
-       %52 = mul double %42, 2.000000e+00              ; <double> [#uses=1]
-       %53 = mul double %50, 2.000000e+00              ; <double> [#uses=1]
+       %51 = fmul double %35, 2.000000e+00             ; <double> [#uses=1]
+       %52 = fmul double %42, 2.000000e+00             ; <double> [#uses=1]
+       %53 = fmul double %50, 2.000000e+00             ; <double> [#uses=1]
        %54 = getelementptr %struct.HNodeTranslateRotate3* %this, i32 0, i32 0, i32 10, i32 0, i32 0, i32 0             ; <double*> [#uses=1]
        store double %51, double* %54, align 8
        %55 = getelementptr %struct.HNodeTranslateRotate3* %this, i32 0, i32 0, i32 10, i32 0, i32 0, i32 1             ; <double*> [#uses=1]