[ELF] - Implemented comparsion operators for linkerscript.

Patch adds support of <,>,!=,==,>=,<= operators.

Differential revision: http://reviews.llvm.org/D19419

llvm-svn: 267382
diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp
index cabd82f..4156f08 100644
--- a/lld/ELF/LinkerScript.cpp
+++ b/lld/ELF/LinkerScript.cpp
@@ -63,9 +63,15 @@
 static int precedence(StringRef Op) {
   return StringSwitch<int>(Op)
       .Case("*", 4)
-      .Case("/", 3)
-      .Case("+", 2)
-      .Case("-", 2)
+      .Case("/", 4)
+      .Case("+", 3)
+      .Case("-", 3)
+      .Case("<", 2)
+      .Case(">", 2)
+      .Case(">=", 2)
+      .Case("<=", 2)
+      .Case("==", 2)
+      .Case("!=", 2)
       .Case("&", 1)
       .Default(-1);
 }
@@ -115,10 +121,6 @@
 }
 
 uint64_t ExprParser::apply(StringRef Op, uint64_t L, uint64_t R) {
-  if (Op == "+")
-    return L + R;
-  if (Op == "-")
-    return L - R;
   if (Op == "*")
     return L * R;
   if (Op == "/") {
@@ -128,6 +130,22 @@
     }
     return L / R;
   }
+  if (Op == "+")
+    return L + R;
+  if (Op == "-")
+    return L - R;
+  if (Op == "<")
+    return L < R;
+  if (Op == ">")
+    return L > R;
+  if (Op == ">=")
+    return L >= R;
+  if (Op == "<=")
+    return L <= R;
+  if (Op == "==")
+    return L == R;
+  if (Op == "!=")
+    return L != R;
   if (Op == "&")
     return L & R;
   llvm_unreachable("invalid operator");