[llvm-commits] [test-suite] r133276 - in /test-suite/trunk: FindMissingLineNo.py PrintLineNo.sh TEST.lineinfo.Makefile lineinfo.xfail

Devang Patel dpatel at apple.com
Fri Jun 17 11:32:01 PDT 2011


Author: dpatel
Date: Fri Jun 17 13:32:01 2011
New Revision: 133276

URL: http://llvm.org/viewvc/llvm-project?rev=133276&view=rev
Log:
Add little test harness to measure and compare quality of linenumber information preserved by clang. It produces .lineinfo file, for example

.|int main() {
 |  int Array[100][200], i, j;
+|  double sum = 0.0;
 |  
.|  for (i=0; i < 100; i+=2)
.|    for (j=0; j < 200; j++)
.|      Array[i][j] = 0;
-|  test_indvars(Array[0], Array);
 |
x|  for (i=0; i < 100; i+=2)
x|    for (j=0; j < 200; j++)
.|      sum += Array[i][j];
 |  
.|  printf("Checksum = %.0lf\n", sum);
 |  
-|  return 0;
.|}


Here, 

. in first column indicates both clang and base compiler preserves line number information for this line.
+ in first column indicates only clang preserves line number information for this line.
- in first column indicates neigther clang nor base compiler preserves line number information for this line.
x in first column indicates clang does not preserve line number information for this line.

CC is base compiler and LCC is clang. OPTFLAGS controls the optimization level.


Added:
    test-suite/trunk/FindMissingLineNo.py   (with props)
    test-suite/trunk/PrintLineNo.sh   (with props)
    test-suite/trunk/TEST.lineinfo.Makefile
    test-suite/trunk/lineinfo.xfail

Added: test-suite/trunk/FindMissingLineNo.py
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/FindMissingLineNo.py?rev=133276&view=auto
==============================================================================
--- test-suite/trunk/FindMissingLineNo.py (added)
+++ test-suite/trunk/FindMissingLineNo.py Fri Jun 17 13:32:01 2011
@@ -0,0 +1,74 @@
+#!/usr/bin/python
+
+import os
+import sys
+
+DBG_OUTPUT_FILE="Output/" + sys.argv[1] + ".dbg.ml"
+OPT_DBG_OUTPUT_FILE="Output/" + sys.argv[1] + ".dbg.opt.ml"
+NATIVE_DBG_OUTPUT_FILE="Output/" + sys.argv[1] + ".native.dbg.ml"
+NATIVE_OPT_DBG_OUTPUT_FILE="Output/" + sys.argv[1] + ".native.dbg.opt.ml"
+XFAIL_FILE=sys.argv[2] + "/lineinfo.xfail"
+
+REPORT_FILE="Output/" + sys.argv[1] + ".dbg.missing_lines.report.txt"
+
+def read_inputfile(filename, dict):
+    f = open(filename, "r")
+    lines = f.readlines()
+    for l in range(len(lines)):
+        columns = lines[l].split()
+        s = dict.get(columns[0])
+        if s is None:
+            s = set()
+        s.add(columns[1])
+        dict[columns[0]] = s
+    f.close()
+    return
+
+dbg_lines = {}
+read_inputfile(DBG_OUTPUT_FILE, dbg_lines)
+
+dbg_opt_lines = {}
+read_inputfile(OPT_DBG_OUTPUT_FILE, dbg_opt_lines)
+
+native_dbg_lines = {}
+read_inputfile(NATIVE_DBG_OUTPUT_FILE, native_dbg_lines)
+
+native_dbg_opt_lines = {}
+read_inputfile(NATIVE_OPT_DBG_OUTPUT_FILE, native_dbg_opt_lines)
+
+xfailed_lines = {}
+read_inputfile(XFAIL_FILE, xfailed_lines)
+
+dbg_line_items = dbg_lines.items()
+for f in range(len(dbg_line_items)):
+    fname = dbg_line_items[f][0]
+    fset = dbg_line_items[f][1]
+    optset = dbg_opt_lines.get(fname)
+    nativeoptset = native_dbg_opt_lines.get(fname)
+    xfailedset = xfailed_lines.get(os.path.basename(fname))
+    if optset is not None:
+        src = open(fname, "r")
+        srclines = src.readlines()
+        src_output = open("Output/" + sys.argv[1] + ".lineinfo", "w")
+        for l in range(len(srclines)):
+            l1 = l + 1
+            l1s = str(l1)
+            if l1s in fset:
+                if l1s in optset:
+                    if nativeoptset is not None and l1s in nativeoptset:
+                        src_output.write(".|")
+                    else:
+                        src_output.write("+|")
+                else:
+                    if nativeoptset is not None and l1s in nativeoptset:
+                        if xfailedset is not None and l1s in xfailedset:
+                            src_output.write(" |")
+                        else:
+                            src_output.write("x|")
+                    else:
+                        src_output.write("-|")
+            else:
+                src_output.write(" |")
+            src_output.write(srclines[l])
+        src.close()
+        src_output.close()

Propchange: test-suite/trunk/FindMissingLineNo.py
------------------------------------------------------------------------------
    svn:executable = *

Added: test-suite/trunk/PrintLineNo.sh
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/PrintLineNo.sh?rev=133276&view=auto
==============================================================================
--- test-suite/trunk/PrintLineNo.sh (added)
+++ test-suite/trunk/PrintLineNo.sh Fri Jun 17 13:32:01 2011
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+dwarfdump Output/$1.dbg.dSYM/ -e --debug-line | grep "^0x" | awk '{if ($3) prev=$3; print basename prev," ",$2}' |sort |uniq > Output/$1.dbg.ml; 
+dwarfdump Output/$1.dbg.opt.dSYM/ -e --debug-line | grep "^0x" | awk '{if ($3) prev=$3; print basename prev," ",$2}' |sort |uniq > Output/$1.dbg.opt.ml; 
+dwarfdump Output/$1.native.dbg.dSYM/ -e --debug-line | grep "^0x" | awk '{if ($3) prev=$3; print basename prev," ",$2}' |sort |uniq > Output/$1.native.dbg.ml; 
+dwarfdump Output/$1.native.dbg.opt.dSYM/ -e --debug-line | grep "^0x" | awk '{if ($3) prev=$3; print basename prev," ",$2}' |sort |uniq > Output/$1.native.dbg.opt.ml;

Propchange: test-suite/trunk/PrintLineNo.sh
------------------------------------------------------------------------------
    svn:executable = *

Added: test-suite/trunk/TEST.lineinfo.Makefile
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/TEST.lineinfo.Makefile?rev=133276&view=auto
==============================================================================
--- test-suite/trunk/TEST.lineinfo.Makefile (added)
+++ test-suite/trunk/TEST.lineinfo.Makefile Fri Jun 17 13:32:01 2011
@@ -0,0 +1,65 @@
+##===- TEST.lineinfo.Makefile -----------------------------*- Makefile -*--===##
+#
+# This test is used to measure quality of debugging information.
+#
+##===----------------------------------------------------------------------===##
+
+CURDIR  := $(shell cd .; pwd)
+PROGDIR := $(PROJ_SRC_ROOT)
+RELDIR  := $(subst $(PROGDIR),,$(CURDIR))
+COLLECTOR := $(PROJ_SRC_ROOT)/CollectDebugInfoUsingLLDB.py 
+
+REPORTS_TO_GEN := dbg
+REPORTS_SUFFIX := $(addsuffix .report.txt, $(REPORTS_TO_GEN))
+
+Output/%.bp: %.c Output/.dir
+	$(LCC) $(CPPFLAGS) $(CFLAGS) -g -c -emit-llvm $< -o $@.bc
+	$(LOPT) -print-breakpoints-for-testing $@.bc -o $@
+
+Output/%.bp: %.cpp Output/.dir
+	$(LCXX) $(CPPFLAGS) $(CFLAGS) -g -c -emit-llvm $< -o $@.bc
+	$(LOPT) -print-breakpoints-for-testing $@.bc -o $@
+
+Output/%.bp: %.m Output/.dir
+	$(LCC) $(CPPFLAGS) $(CFLAGS) -g -c -emit-llvm $< -o $@.bc
+	$(LOPT) -print-breakpoints-for-testing $@.bc -o $@
+
+Output/%.bp: %.mm Output/.dir
+	$(LCXX) $(CPPFLAGS) $(CFLAGS) -g -c -emit-llvm $< -o $@.bc
+	$(LOPT) -print-breakpoints-for-testing $@.bc -o $@
+
+$(PROGRAMS_TO_TEST:%=test.$(TEST).%): \
+test.$(TEST).%: Output/%.bp Output/%.dbg Output/%.dbg.opt Output/%.native.dbg Output/%.native.dbg.opt
+	@-is_skip=0; \
+	if test "$*" == "reversefile"; then \
+	  is_skip=1; \
+	fi; \
+	if test "$*" == "spellcheck"; then \
+	  is_skip=1; \
+	fi; \
+	if test "$*" == "sumcol"; then \
+	  is_skip=1; \
+	fi; \
+	if test "$*" == "wc"; then \
+	  is_skip=1; \
+	fi; \
+	if test "$*" == "wordfreq"; then \
+	  is_skip=1; \
+	fi; \
+	if test "$*" == "exptree"; then \
+	  is_skip=1; \
+	fi; \
+	if test "$*" == "ray"; then \
+	  is_skip=1; \
+	fi; \
+	if test "$*" == "oscar"; then \
+	  is_skip=1; \
+	fi; \
+	if test "$*" == "spirit"; then \
+	  is_skip=1; \
+	fi; \
+	if test $$is_skip == 0; then \
+	  $(PROJ_SRC_ROOT)/PrintLineNo.sh $*; \
+	  $(PROJ_SRC_ROOT)/FindMissingLineNo.py $* $(PROJ_SRC_ROOT);\
+	fi
+

Added: test-suite/trunk/lineinfo.xfail
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/lineinfo.xfail?rev=133276&view=auto
==============================================================================
--- test-suite/trunk/lineinfo.xfail (added)
+++ test-suite/trunk/lineinfo.xfail Fri Jun 17 13:32:01 2011
@@ -0,0 +1 @@
+sse.shift.c 9
\ No newline at end of file





More information about the llvm-commits mailing list