[compiler-rt] r259272 - [profile] Support hostname expansion in LLVM_PROFILE_FILE
Xinliang David Li via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 23 22:20:23 PDT 2016
Another choice is to explicitly call gethostname or equivalent in main --
but looks like this is not available for PS4 either?
David
On Thu, Jun 23, 2016 at 10:00 PM, Sean Silva <chisophugis at gmail.com> wrote:
>
>
> On Thu, Jun 23, 2016 at 9:15 PM, Xinliang David Li <xinliangli at gmail.com>
> wrote:
>
>> Does the patch look fine?
>>
>> David
>>
>> Index: instrprof-hostname.c
>> ===================================================================
>> --- instrprof-hostname.c (revision 273505)
>> +++ instrprof-hostname.c (working copy)
>> @@ -1,6 +1,7 @@
>> // RUN: %clang_profgen -o %t -O3 %s
>> // RUN: env LLVM_PROFILE_FILE=%h.%t-%h.profraw_%h %run %t
>> -// RUN: llvm-profdata merge -o %t.profdata `uname -n`.%t-`uname
>> -n`.profraw_`uname -n`
>> +// RUN: %run uname -n > %t.n
>> +// RUN: llvm-profdata merge -o %t.profdata `cat %t.n`.%t-`cat
>> %t.n`.profraw_`cat %t.n`
>> // RUN: %clang_profuse=%t.profdata -o - -S -emit-llvm %s | FileCheck %s
>> // REQUIRES: shell
>>
>
> This LGTM for general UNIX-y target devices (nice solution!).
> Unfortunately PS4 does not have any of the standard UNIX utilities
> available for running on the target. In fact, there is no shell on the PS4
> target, no /bin, no /usr/bin, etc. :(
>
> -- Sean Silva
>
>
>>
>>
>> On Thu, Jun 23, 2016 at 8:51 PM, Sean Silva <chisophugis at gmail.com>
>> wrote:
>>
>>>
>>>
>>> On Thu, Jun 23, 2016 at 8:30 PM, Xinliang David Li <xinliangli at gmail.com
>>> > wrote:
>>>
>>>> The test case can be modified to dump hostname to a file. At the host
>>>> side, re-create the file name and make sure it exists. Does that work?
>>>>
>>>
>>> That would work I think; I don't have an environment where I can
>>> effectively fix/test it though. On PS4 we don't support %h expansion (it
>>> would bring in a heavyweight dependency) so I have this XFAIL'd locally (it
>>> is not urgent to fix for us).
>>>
>>> The `REQUIRES: shell` had been masking the issue for us until recently
>>> and so I'm just now commenting on this patch.
>>>
>>> -- Sean Silva
>>>
>>>
>>>>
>>>> David
>>>>
>>>> On Thu, Jun 23, 2016 at 7:48 PM, Sean Silva via llvm-commits <
>>>> llvm-commits at lists.llvm.org> wrote:
>>>>
>>>>> Hi Vedant, Daniel,
>>>>>
>>>>> The test case in this patch is fundamentally flawed: it runs `uname
>>>>> -n` on the host, while `%h` expands on the target. No relation between them
>>>>> can be assumed.
>>>>>
>>>>> Unfortunately, I don't really have a concrete suggestion for improving
>>>>> the test case: we would have to have some sort of special knowledge of what
>>>>> %run is actually configured to do in order to "verify" anything about the
>>>>> filename.
>>>>>
>>>>> -- Sean Silva
>>>>>
>>>>> On Fri, Jan 29, 2016 at 3:52 PM, Vedant Kumar via llvm-commits <
>>>>> llvm-commits at lists.llvm.org> wrote:
>>>>>
>>>>>> Author: vedantk
>>>>>> Date: Fri Jan 29 17:52:11 2016
>>>>>> New Revision: 259272
>>>>>>
>>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=259272&view=rev
>>>>>> Log:
>>>>>> [profile] Support hostname expansion in LLVM_PROFILE_FILE
>>>>>>
>>>>>> This patch adds support for expanding "%h" out to the machine hostname
>>>>>> in the LLVM_PROFILE_FILE environment variable.
>>>>>>
>>>>>> Patch by Daniel Waters!
>>>>>>
>>>>>> Differential Revision: http://reviews.llvm.org/D16371
>>>>>>
>>>>>> Added:
>>>>>> compiler-rt/trunk/test/profile/instrprof-hostname.c
>>>>>> Modified:
>>>>>> compiler-rt/trunk/lib/profile/InstrProfilingFile.c
>>>>>> compiler-rt/trunk/lib/profile/InstrProfilingPort.h
>>>>>>
>>>>>> Modified: compiler-rt/trunk/lib/profile/InstrProfilingFile.c
>>>>>> URL:
>>>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/profile/InstrProfilingFile.c?rev=259272&r1=259271&r2=259272&view=diff
>>>>>>
>>>>>> ==============================================================================
>>>>>> --- compiler-rt/trunk/lib/profile/InstrProfilingFile.c (original)
>>>>>> +++ compiler-rt/trunk/lib/profile/InstrProfilingFile.c Fri Jan 29
>>>>>> 17:52:11 2016
>>>>>> @@ -14,9 +14,22 @@
>>>>>> #include <stdio.h>
>>>>>> #include <stdlib.h>
>>>>>> #include <string.h>
>>>>>> +#ifdef COMPILER_RT_HAS_UNAME
>>>>>> +#include <sys/utsname.h>
>>>>>> +#endif
>>>>>>
>>>>>> #define UNCONST(ptr) ((void *)(uintptr_t)(ptr))
>>>>>>
>>>>>> +#ifdef COMPILER_RT_HAS_UNAME
>>>>>> +int GetHostName(char *Name, int Len) {
>>>>>> + struct utsname N;
>>>>>> + int R;
>>>>>> + if (!(R = uname(&N)))
>>>>>> + strncpy(Name, N.nodename, Len);
>>>>>> + return R;
>>>>>> +}
>>>>>> +#endif
>>>>>> +
>>>>>> /* Return 1 if there is an error, otherwise return 0. */
>>>>>> static uint32_t fileWriter(ProfDataIOVec *IOVecs, uint32_t NumIOVecs,
>>>>>> void **WriterCtx) {
>>>>>> @@ -114,9 +127,10 @@ int getpid(void);
>>>>>> static int setFilenamePossiblyWithPid(const char *Filename) {
>>>>>> #define MAX_PID_SIZE 16
>>>>>> char PidChars[MAX_PID_SIZE] = {0};
>>>>>> - int NumPids = 0, PidLength = 0;
>>>>>> + int NumPids = 0, PidLength = 0, NumHosts = 0, HostNameLength = 0;
>>>>>> char *Allocated;
>>>>>> int I, J;
>>>>>> + char Hostname[COMPILER_RT_MAX_HOSTLEN];
>>>>>>
>>>>>> /* Reset filename on NULL, except with env var which is checked by
>>>>>> caller. */
>>>>>> if (!Filename) {
>>>>>> @@ -126,19 +140,29 @@ static int setFilenamePossiblyWithPid(co
>>>>>>
>>>>>> /* Check the filename for "%p", which indicates a
>>>>>> pid-substitution. */
>>>>>> for (I = 0; Filename[I]; ++I)
>>>>>> - if (Filename[I] == '%' && Filename[++I] == 'p')
>>>>>> - if (!NumPids++) {
>>>>>> - PidLength = snprintf(PidChars, MAX_PID_SIZE, "%d", getpid());
>>>>>> - if (PidLength <= 0)
>>>>>> - return -1;
>>>>>> + if (Filename[I] == '%') {
>>>>>> + if (Filename[++I] == 'p') {
>>>>>> + if (!NumPids++) {
>>>>>> + PidLength = snprintf(PidChars, MAX_PID_SIZE, "%d",
>>>>>> getpid());
>>>>>> + if (PidLength <= 0)
>>>>>> + return -1;
>>>>>> + }
>>>>>> + } else if (Filename[I] == 'h') {
>>>>>> + if (!NumHosts++)
>>>>>> + if (COMPILER_RT_GETHOSTNAME(Hostname,
>>>>>> COMPILER_RT_MAX_HOSTLEN))
>>>>>> + return -1;
>>>>>> + HostNameLength = strlen(Hostname);
>>>>>> }
>>>>>> - if (!NumPids) {
>>>>>> + }
>>>>>> +
>>>>>> + if (!(NumPids || NumHosts)) {
>>>>>> setFilename(Filename, 0);
>>>>>> return 0;
>>>>>> }
>>>>>>
>>>>>> /* Allocate enough space for the substituted filename. */
>>>>>> - Allocated = malloc(I + NumPids*(PidLength - 2) + 1);
>>>>>> + Allocated = malloc(I + NumPids*(PidLength - 2) +
>>>>>> + NumHosts*(HostNameLength - 2) + 1);
>>>>>> if (!Allocated)
>>>>>> return -1;
>>>>>>
>>>>>> @@ -149,6 +173,10 @@ static int setFilenamePossiblyWithPid(co
>>>>>> memcpy(Allocated + J, PidChars, PidLength);
>>>>>> J += PidLength;
>>>>>> }
>>>>>> + else if (Filename[I] == 'h') {
>>>>>> + memcpy(Allocated + J, Hostname, HostNameLength);
>>>>>> + J += HostNameLength;
>>>>>> + }
>>>>>> /* Drop any unknown substitutions. */
>>>>>> } else
>>>>>> Allocated[J++] = Filename[I];
>>>>>>
>>>>>> Modified: compiler-rt/trunk/lib/profile/InstrProfilingPort.h
>>>>>> URL:
>>>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/profile/InstrProfilingPort.h?rev=259272&r1=259271&r2=259272&view=diff
>>>>>>
>>>>>> ==============================================================================
>>>>>> --- compiler-rt/trunk/lib/profile/InstrProfilingPort.h (original)
>>>>>> +++ compiler-rt/trunk/lib/profile/InstrProfilingPort.h Fri Jan 29
>>>>>> 17:52:11 2016
>>>>>> @@ -22,6 +22,14 @@
>>>>>>
>>>>>> #define COMPILER_RT_SECTION(Sect) __attribute__((section(Sect)))
>>>>>>
>>>>>> +#define COMPILER_RT_MAX_HOSTLEN 128
>>>>>> +#ifdef _MSC_VER
>>>>>> +#define COMPILER_RT_GETHOSTNAME(Name, Len) gethostname(Name, Len)
>>>>>> +#else
>>>>>> +#define COMPILER_RT_GETHOSTNAME(Name, Len) GetHostName(Name, Len)
>>>>>> +#define COMPILER_RT_HAS_UNAME 1
>>>>>> +#endif
>>>>>> +
>>>>>> #if COMPILER_RT_HAS_ATOMICS == 1
>>>>>> #ifdef _MSC_VER
>>>>>> #include <windows.h>
>>>>>>
>>>>>> Added: compiler-rt/trunk/test/profile/instrprof-hostname.c
>>>>>> URL:
>>>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/profile/instrprof-hostname.c?rev=259272&view=auto
>>>>>>
>>>>>> ==============================================================================
>>>>>> --- compiler-rt/trunk/test/profile/instrprof-hostname.c (added)
>>>>>> +++ compiler-rt/trunk/test/profile/instrprof-hostname.c Fri Jan 29
>>>>>> 17:52:11 2016
>>>>>> @@ -0,0 +1,13 @@
>>>>>> +// RUN: %clang_profgen -o %t -O3 %s
>>>>>> +// RUN: env LLVM_PROFILE_FILE=%h.%t-%h.profraw_%h %run %t
>>>>>> +// RUN: llvm-profdata merge -o %t.profdata `uname -n`.%t-`uname
>>>>>> -n`.profraw_`uname -n`
>>>>>> +// RUN: %clang_profuse=%t.profdata -o - -S -emit-llvm %s | FileCheck
>>>>>> %s
>>>>>> +// REQUIRES: shell
>>>>>> +
>>>>>> +int main(int argc, const char *argv[]) {
>>>>>> + // CHECK: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}, !prof
>>>>>> ![[PD1:[0-9]+]]
>>>>>> + if (argc > 2)
>>>>>> + return 1;
>>>>>> + return 0;
>>>>>> +}
>>>>>> +// CHECK: ![[PD1]] = !{!"branch_weights", i32 1, i32 2}
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> llvm-commits mailing list
>>>>>> llvm-commits at lists.llvm.org
>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> llvm-commits mailing list
>>>>> llvm-commits at lists.llvm.org
>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>>>>
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160623/6139dfbe/attachment.html>
More information about the llvm-commits
mailing list