perf_session__delete(session);
        return ret;
 }
+static char *get_sort_order(struct perf_mem *mem)
+{
+       bool has_extra_options = mem->phys_addr ? true : false;
+       char sort[128];
+
+       /*
+        * there is no weight (cost) associated with stores, so don't print
+        * the column
+        */
+       if (!(mem->operation & MEM_OPERATION_LOAD)) {
+               strcpy(sort, "--sort=mem,sym,dso,symbol_daddr,"
+                            "dso_daddr,tlb,locked");
+       } else if (has_extra_options) {
+               strcpy(sort, "--sort=local_weight,mem,sym,dso,symbol_daddr,"
+                            "dso_daddr,snoop,tlb,locked");
+       } else
+               return NULL;
+
+       if (mem->phys_addr)
+               strcat(sort, ",phys_daddr");
+
+       return strdup(sort);
+}
 
 static int report_events(int argc, const char **argv, struct perf_mem *mem)
 {
        const char **rep_argv;
        int ret, i = 0, j, rep_argc;
+       char *new_sort_order;
 
        if (mem->dump_raw)
                return report_raw_events(mem);
        rep_argv[i++] = "--mem-mode";
        rep_argv[i++] = "-n"; /* display number of samples */
 
-       /*
-        * there is no weight (cost) associated with stores, so don't print
-        * the column
-        */
-       if (!(mem->operation & MEM_OPERATION_LOAD)) {
-               if (mem->phys_addr)
-                       rep_argv[i++] = "--sort=mem,sym,dso,symbol_daddr,"
-                                       "dso_daddr,tlb,locked,phys_daddr";
-               else
-                       rep_argv[i++] = "--sort=mem,sym,dso,symbol_daddr,"
-                                       "dso_daddr,tlb,locked";
-       } else if (mem->phys_addr)
-               rep_argv[i++] = "--sort=local_weight,mem,sym,dso,symbol_daddr,"
-                               "dso_daddr,snoop,tlb,locked,phys_daddr";
+       new_sort_order = get_sort_order(mem);
+       if (new_sort_order)
+               rep_argv[i++] = new_sort_order;
 
        for (j = 1; j < argc; j++, i++)
                rep_argv[i] = argv[j];