Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8152538

UL doesn't inline the LogTagSet::is_level check

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 9
    • 9
    • hotspot
    • None
    • svc
    • b115

      The following code:
        void logLine() {
          log_debug(gc)("logLine");
        }

      expands into:
      (!log_is_enabled(Debug, __VA_ARGS__)) ? ... : ... )

      The log_is_enabled macro further expands and inlines functions, but then end up calling LogTagSet::is_level.

      Currently, the generated code looks like this:
      (gdb) disass logLine
      Dump of assembler code for function logLine():
         0x0000000000ae3bc0 <+0>: push %rbp
         0x0000000000ae3bc1 <+1>: lea 0x755fb8(%rip),%rdi # 0x1239b80 <_ZN16LogTagSetMappingILN6LogTag4typeE22ELS1_0ELS1_0ELS1_0ELS1_0EE7_tagsetE>
         0x0000000000ae3bc8 <+8>: mov $0x2,%esi
         0x0000000000ae3bcd <+13>: mov %rsp,%rbp
         0x0000000000ae3bd0 <+16>: callq 0x969c30 <LogTagSet::is_level(LogLevel::type) const>
         0x0000000000ae3bd5 <+21>: test %al,%al
         0x0000000000ae3bd7 <+23>: jne 0xae3be0 <logLine()+32>
         0x0000000000ae3bd9 <+25>: pop %rbp
         0x0000000000ae3bda <+26>: retq
         0x0000000000ae3bdb <+27>: nopl 0x0(%rax,%rax,1)
         0x0000000000ae3be0 <+32>: pop %rbp
         0x0000000000ae3be1 <+33>: lea 0x265133(%rip),%rdi # 0xd48d1b
         0x0000000000ae3be8 <+40>: xor %eax,%eax
         0x0000000000ae3bea <+42>:
          jmpq 0x5d9e00 <LogImpl<(LogTag::type)22, (LogTag::type)0, (LogTag::type)0, (LogTag::type)0, (LogTag::type)0, (LogTag::type)0>::write<(LogLevel::type)2>(char const*, ...)>

      By making LogTagSet::is_level inlinable, we get:
      (gdb) disass logLine
      Dump of assembler code for function logLine():
         0x0000000000ae1690 <+0>: cmpq $0x0,0x756520(%rip) # 0x1237bb8 <_ZN16LogTagSetMappingILN6LogTag4typeE22ELS1_0ELS1_0ELS1_0ELS1_0EE7_tagsetE+56>
         0x0000000000ae1698 <+8>: push %rbp
         0x0000000000ae1699 <+9>: mov %rsp,%rbp
         0x0000000000ae169c <+12>: je 0xae16b0 <logLine()+32>
         0x0000000000ae169e <+14>: pop %rbp
         0x0000000000ae169f <+15>: lea 0x264d75(%rip),%rdi # 0xd4641b
         0x0000000000ae16a6 <+22>: xor %eax,%eax
         0x0000000000ae16a8 <+24>:
          jmpq 0x5d8f60 <LogImpl<(LogTag::type)22, (LogTag::type)0, (LogTag::type)0, (LogTag::type)0, (LogTag::type)0, (LogTag::type)0>::write<(LogLevel::type)2>(char const*, ...)>
         0x0000000000ae16ad <+29>: nopl (%rax)
         0x0000000000ae16b0 <+32>: pop %rbp
         0x0000000000ae16b1 <+33>: retq
      End of assembler dump.

            stefank Stefan Karlsson
            stefank Stefan Karlsson
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: