Update the "combineModules" script to handel more LLVM metadata.
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 13 Nov 2014 21:55:28 +0000 (21:55 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 13 Nov 2014 21:55:28 +0000 (21:55 +0000)
https://bugs.webkit.org/show_bug.cgi?id=138514

Patch by Juergen Ributzka <juergen@apple.com> on 2014-11-13
Reviewed by Filip Pizlo.

* ReducedFTL/combineModules.rb:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@176088 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Tools/ChangeLog
Tools/ReducedFTL/combineModules.rb

index e80ecf5..3bfea61 100644 (file)
@@ -1,3 +1,12 @@
+2014-11-13  Juergen Ributzka  <juergen@apple.com>
+
+        Update the "combineModules" script to handel more LLVM metadata.
+        https://bugs.webkit.org/show_bug.cgi?id=138514
+
+        Reviewed by Filip Pizlo.
+
+        * ReducedFTL/combineModules.rb:
+
 2014-11-13  Myles C. Maxfield  <mmaxfield@apple.com>
 
         Allow constructing a base PassRef with a derived Ref
index c3f2efe..5e121e9 100755 (executable)
@@ -60,12 +60,13 @@ def parse(string)
 end
 
 class MetaData
-    attr_reader :index, :name, :parent
-    
-    def initialize(index, name, parent)
+    attr_reader :index, :name, :parent, :val
+
+    def initialize(index, name, parent, val)
         @index = index
         @name = name
         @parent = parent
+        @val = val
     end
 end
 
@@ -120,12 +121,34 @@ while shouldContinue
             index = $1.to_i
             name = $2
             unless $metaData[name]
-                $metaData[name] = MetaData.new($metaData.size, name, nil)
+                $metaData[name] = MetaData.new($metaData.size, name, nil, nil)
             end
             metaDataMap[index] = $metaData[$2].index
         elsif line =~ /!([0-9]+) = metadata !{metadata !\"([a-zA-Z0-9_]+)\", metadata !([0-9]+)/
-            metaData = MetaData.new($1.to_i, $2, $3.to_i)
+            metaData = MetaData.new($1.to_i, $2, $3.to_i, nil)
             unresolvedMetaData << metaData
+        elsif line =~ /!([0-9]+) = metadata !{metadata !\"branch_weights\"/
+            index = $1.to_i
+            arr1 = line.split(',');
+            arr1.shift
+            arr2 = Array.new
+            name = "branch_weights"
+            arr1.each { |a|
+              a =~ /i32 ([0-9]+)/
+              name.concat($1)
+              arr2.push($1)
+            }
+            unless $metaData[name]
+                $metaData[name] = MetaData.new($metaData.size, "branch_weights", nil, arr2)
+            end
+            metaDataMap[index] = $metaData[name].index
+        elsif line =~ /!([0-9]+) = metadata !{i32 ([-+0-9]+), i32 ([-+0-9]+)}/
+            index = $1.to_i
+            name = "#$2#$3"
+            unless $metaData[name]
+                $metaData[name] = MetaData.new($metaData.size, nil, nil, [$2, $3])
+            end
+            metaDataMap[index] = $metaData[name].index
         elsif line =~ /attributes #([0-9]+) = /
             attributeNumber = $1.to_i
             attributeBody = $~.post_match
@@ -150,7 +173,7 @@ while shouldContinue
                 unresolvedMetaData.pop
             elsif metaDataMap[metaData.parent]
                 metaDataMap[metaData.index] = $metaData.size
-                $metaData[metaData.name] = MetaData.new($metaData.size, metaData.name, metaDataMap[metaData.parent])
+                $metaData[metaData.name] = MetaData.new($metaData.size, metaData.name, metaDataMap[metaData.parent], nil)
                 unresolvedMetaData[index] = unresolvedMetaData[-1]
                 unresolvedMetaData.pop
             else
@@ -160,7 +183,7 @@ while shouldContinue
     end
     
     # Output the body with all of the things remapped.
-    puts "define i64 @jsBody_#{$count += 1}(i64) {"
+    puts "define i64 @jsBody_#{$count += 1}() {"
     body.each {
         | thing |
         if thing.is_a? Reference
@@ -202,10 +225,27 @@ $attributes.each_with_index {
 
 $metaData.each_value {
     | metaData |
-    print "!#{metaData.index} = metadata !{metadata !\"#{metaData.name}\""
+    print "!#{metaData.index} = metadata !{"
+    if metaData.name
+        print "metadata !\"#{metaData.name}\""
+    end
     if metaData.parent
         print ", metadata !#{metaData.parent}"
     end
+    if (metaData.val)
+        index = 0
+        if metaData.name
+          index = 1
+        end
+        metaData.val.each { |a|
+            if (index == 0)
+                print "i32 #{a}"
+            else
+                print ", i32 #{a}"
+            end
+            index += 1
+        }
+    end
     puts "}"
 }