diff --git a/llvm/projects/hpvm-tensor-rt/tensor_runtime/include/configuration.h b/llvm/projects/hpvm-tensor-rt/tensor_runtime/include/configuration.h
index ae1f46ef2b6cff8731cf66fe1461a1d89c57f534..b482cef5377e0f879b43f06a7ebbfbe01b39be09 100644
--- a/llvm/projects/hpvm-tensor-rt/tensor_runtime/include/configuration.h
+++ b/llvm/projects/hpvm-tensor-rt/tensor_runtime/include/configuration.h
@@ -188,7 +188,7 @@ struct ConfigurationLessThan_SP {
 // (for std lower bound, used in pareto optimal frontier search)
 struct ConfigurationLessThan_E {
   bool operator()(const struct Configuration *a, const float &b) const {
-    return (a->energy > b) ;
+    return (a->energy < b) ;
   }
 };
 
diff --git a/llvm/projects/hpvm-tensor-rt/tensor_runtime/include/hpvm-rt-controller.h b/llvm/projects/hpvm-tensor-rt/tensor_runtime/include/hpvm-rt-controller.h
index 65a34661aaacc8886a79d0e9ab2ee1d272b5a112..b510e3849e62d4cdb316875346b87bb1d3715215 100644
--- a/llvm/projects/hpvm-tensor-rt/tensor_runtime/include/hpvm-rt-controller.h
+++ b/llvm/projects/hpvm-tensor-rt/tensor_runtime/include/hpvm-rt-controller.h
@@ -650,7 +650,7 @@ void RuntimeController::computeParetoConfigurationPoints() {
     float sp = -1.0; //FLT_MIN
     unsigned sp_idx = 0;
 
-    float en = 100000.0; //FLT_MAX
+    float en = -1.0; //FLT_MIN
     unsigned en_idx = 0;
 
     for (unsigned i = start_idx; i < end_idx; i++) {
@@ -658,7 +658,7 @@ void RuntimeController::computeParetoConfigurationPoints() {
         sp = InitialConfigurations[i].speedup;
         sp_idx = i;
       }
-      if (InitialConfigurations[i].energy < en) {
+      if (InitialConfigurations[i].energy > en) {
         en = InitialConfigurations[i].energy;
         en_idx = i;
       }
@@ -690,7 +690,7 @@ void RuntimeController::computeParetoConfigurationPoints() {
 
     bool en_notDominated = true;
     if (!EnergyConfigurations.empty()) {
-      if (EnergyConfigurations.back()->energy <= en)
+      if (EnergyConfigurations.back()->energy >= en)
         en_notDominated = false;
     }
 
@@ -764,7 +764,7 @@ void RuntimeController::compute3DParetoConfigurationPoints() {
       bool dominated = false;
       for (unsigned j = i+1; (j < end_idx) && !dominated; j++) {
         if ((InitialConfigurations[i].speedup < InitialConfigurations[j].speedup) &&
-            (InitialConfigurations[i].energy > InitialConfigurations[j].energy)) {
+            (InitialConfigurations[i].energy < InitialConfigurations[j].energy)) {
           dominated = true;
         }
       }
@@ -786,7 +786,7 @@ void RuntimeController::compute3DParetoConfigurationPoints() {
         bool notDominated = true;
         for (unsigned i = 0; (i < ThreeDCurveConfigurations.size()) && notDominated; i++) {
           if ((CandidateConfiguration.speedup <= ThreeDCurveConfigurations[i]->speedup) &&
-              (CandidateConfiguration.energy >= ThreeDCurveConfigurations[i]->energy)) {
+              (CandidateConfiguration.energy <= ThreeDCurveConfigurations[i]->energy)) {
             // This configuration is not better, in at least one characteristic,
             // compared to the existing ones in the curve.
             notDominated = false;