Subzero: Shorten and normalize strings in non-DUMP builds.

Jump table labels change from ".Lxxxxx_yy" to "$Jxxxxx_yy".

Pooled float labels change from ".L$float$xxxxyyyy" to "$Fxxxxyyyy".

Pooled double labels change from ".L$double$xxxxxxxxyyyyyyyy" to "$Dxxxxxxxxyyyyyyyy".

All these should in theory not conflict with C/C++ user symbols.

Float labels now likely fit into short strings and don't require extra memory allocation.

Double labels may exceed the limit - encoding in base64 instead of hex would fix that.  Or, directly use the binary bytes as the string value.

BUG= none
R=jpp@chromium.org

Review URL: https://codereview.chromium.org/1868113002 .
diff --git a/src/IceInst.cpp b/src/IceInst.cpp
index 8412b05..1265d58 100644
--- a/src/IceInst.cpp
+++ b/src/IceInst.cpp
@@ -579,7 +579,7 @@
     return GlobalString::createWithString(
         Ctx, ".L" + FuncName.toString() + "$jumptable$__" + std::to_string(Id));
   return GlobalString::createWithString(
-      Ctx, ".L" + std::to_string(FuncName.getID()) + "_" + std::to_string(Id));
+      Ctx, "$J" + std::to_string(FuncName.getID()) + "_" + std::to_string(Id));
 }
 } // end of anonymous namespace
 
diff --git a/src/IceOperand.h b/src/IceOperand.h
index 06b11e6..26630df 100644
--- a/src/IceOperand.h
+++ b/src/IceOperand.h
@@ -209,7 +209,23 @@
   void initName(GlobalContext *Ctx) {
     std::string Buffer;
     llvm::raw_string_ostream Str(Buffer);
-    Str << ".L$" << getType() << "$";
+    constexpr bool IsCompact = !BuildDefs::dump();
+    if (IsCompact) {
+      switch (getType()) {
+      case IceType_f32:
+        Str << "$F";
+        break;
+      case IceType_f64:
+        Str << "$D";
+        break;
+      default:
+        // For constant pooling diversification
+        Str << ".L$" << getType() << "$";
+        break;
+      }
+    } else {
+      Str << ".L$" << getType() << "$";
+    }
     // Print hex characters byte by byte, starting from the most significant
     // byte.  NOTE: This ordering assumes Subzero runs on a little-endian
     // platform.  That means the possibility of different label names depending
@@ -223,7 +239,7 @@
     // For a floating-point value in DecorateAsm mode, also append the value in
     // human-readable sprintf form, changing '+' to 'p' and '-' to 'm' to
     // maintain valid asm labels.
-    if (std::is_floating_point<PrimType>::value && !BuildDefs::minimal() &&
+    if (BuildDefs::dump() && std::is_floating_point<PrimType>::value &&
         getFlags().getDecorateAsm()) {
       char Buf[30];
       snprintf(Buf, llvm::array_lengthof(Buf), "$%g", (double)Value);
diff --git a/tests_lit/llvm2ice_tests/bitcast.ll b/tests_lit/llvm2ice_tests/bitcast.ll
index e61a165..b5e9066 100644
--- a/tests_lit/llvm2ice_tests/bitcast.ll
+++ b/tests_lit/llvm2ice_tests/bitcast.ll
@@ -49,8 +49,8 @@
   ret i64 %v0
 }
 ; CHECK-LABEL: cast_d2ll_const
-; CHECK: mov e{{..}},{{(DWORD PTR )?}}ds:0x0 {{.*}} .L$double$0012345678901234
-; CHECK: mov e{{..}},{{(DWORD PTR )?}}ds:0x4 {{.*}} .L$double$0012345678901234
+; CHECK: mov e{{..}},{{(DWORD PTR )?}}ds:0x0 {{.*}} {{.*}}0012345678901234
+; CHECK: mov e{{..}},{{(DWORD PTR )?}}ds:0x4 {{.*}} {{.*}}0012345678901234
 ; ARM32-LABEL: cast_d2ll_const
 ; ARM32-DAG: movw [[ADDR:r[0-9]+]], #:lower16:.L$
 ; ARM32-DAG: movt [[ADDR]], #:upper16:.L$
diff --git a/tests_lit/llvm2ice_tests/elf_container.ll b/tests_lit/llvm2ice_tests/elf_container.ll
index 6ab0f4d..bee9002 100644
--- a/tests_lit/llvm2ice_tests/elf_container.ll
+++ b/tests_lit/llvm2ice_tests/elf_container.ll
@@ -57,8 +57,8 @@
   ret float %f
 }
 ; TEXT-RELOCS-LABEL: returnFloatConst
-; TEXT-RELOCS: movss {{.*}} R_386_32 .L$float$80000000
-; TEXT-RELOCS: addss {{.*}} R_386_32 .L$float$3f9d70a0
+; TEXT-RELOCS: movss {{.*}} R_386_32 {{.*}}80000000
+; TEXT-RELOCS: addss {{.*}} R_386_32 {{.*}}3f9d70a0
 
 define internal double @returnDoubleConst() {
 entry:
@@ -67,9 +67,9 @@
   ret double %d2
 }
 ; TEXT-RELOCS-LABEL: returnDoubleConst
-; TEXT-RELOCS: movsd {{.*}} R_386_32 .L$double$ffffffffffffffff
-; TEXT-RELOCS: addsd {{.*}} R_386_32 .L$double$fff7ffffffffffff
-; TEXT-RELOCS: addsd {{.*}} R_386_32 .L$double$fff8000000000003
+; TEXT-RELOCS: movsd {{.*}} R_386_32 {{.*}}ffffffffffffffff
+; TEXT-RELOCS: addsd {{.*}} R_386_32 {{.*}}fff7ffffffffffff
+; TEXT-RELOCS: addsd {{.*}} R_386_32 {{.*}}fff8000000000003
 
 ; Test intrinsics that call out to external functions.
 define internal void @test_memcpy(i32 %iptr_dst, i32 %len) {
@@ -385,11 +385,11 @@
 
 ; CHECK: Relocations [
 ; CHECK:   Section ({{[0-9]+}}) .rel.text {
-; CHECK:     0x7 R_386_32 .L$float$80000000 0x0
-; CHECK:     0xF R_386_32 .L$float$3f9d70a0 0x0
-; CHECK:     0x27 R_386_32 .L$double$ffffffffffffffff 0x0
-; CHECK:     0x2F R_386_32 .L$double$fff7ffffffffffff 0x0
-; CHECK:     0x37 R_386_32 .L$double$fff8000000000003 0x0
+; CHECK:     0x7 R_386_32 {{.*}}80000000 0x0
+; CHECK:     0xF R_386_32 {{.*}}3f9d70a0 0x0
+; CHECK:     0x27 R_386_32 {{.*}}ffffffffffffffff 0x0
+; CHECK:     0x2F R_386_32 {{.*}}fff7ffffffffffff 0x0
+; CHECK:     0x37 R_386_32 {{.*}}fff8000000000003 0x0
 ; CHECK:     0x{{.*}} R_386_PC32 memcpy
 ; CHECK:     0x{{.*}} R_386_PC32 memset
 ; CHECK:     0x{{.*}} R_386_PC32 external_foo
@@ -421,7 +421,7 @@
 ; CHECK-NEXT:     Section: Undefined (0x0)
 ; CHECK-NEXT:   }
 ; CHECK:        Symbol {
-; CHECK:          Name: .L$double$fff8000000000003
+; CHECK:          Name: {{.*}}fff8000000000003
 ; CHECK-NEXT:     Value: 0x8
 ; CHECK-NEXT:     Size: 0
 ; CHECK-NEXT:     Binding: Local (0x0)
@@ -430,7 +430,7 @@
 ; CHECK-NEXT:     Section: .rodata.cst8
 ; CHECK-NEXT:   }
 ; CHECK:        Symbol {
-; CHECK:          Name: .L$double$ffffffffffffffff
+; CHECK:          Name: {{.*}}ffffffffffffffff
 ; CHECK-NEXT:     Value: 0x10
 ; CHECK-NEXT:     Size: 0
 ; CHECK-NEXT:     Binding: Local (0x0)
@@ -439,7 +439,7 @@
 ; CHECK-NEXT:     Section: .rodata.cst8
 ; CHECK-NEXT:   }
 ; CHECK:        Symbol {
-; CHECK:          Name: .L$float$3f9d70a0
+; CHECK:          Name: {{.*}}3f9d70a0
 ; CHECK-NEXT:     Value: 0x0
 ; CHECK-NEXT:     Size: 0
 ; CHECK-NEXT:     Binding: Local (0x0)
@@ -448,7 +448,7 @@
 ; CHECK-NEXT:     Section: .rodata.cst4
 ; CHECK-NEXT:   }
 ; CHECK:        Symbol {
-; CHECK:          Name: .L$float$80000000
+; CHECK:          Name: {{.*}}80000000
 ; CHECK-NEXT:     Value: 0x4
 ; CHECK-NEXT:     Size: 0
 ; CHECK-NEXT:     Binding: Local (0x0)