Thanks. 2016-12-06 16:28 GMT-08:00 Reid Kleckner <r...@google.com>:
> Comments in r288868. It implements GCC's %= inline asm feature, and we're > just using it from MS-style inline asm to avoid duplicate labels clashing. > > 2016-12-01 0:37 GMT-08:00 Sean Silva <chisophu...@gmail.com>: > >> what is this ${:uid} thing? Could the comment >> in Sema::GetOrCreateMSAsmLabel explain it? >> >> -- Sean Silva >> >> On Mon, Nov 28, 2016 at 4:39 PM, Reid Kleckner via cfe-commits < >> cfe-commits@lists.llvm.org> wrote: >> >>> Author: rnk >>> Date: Mon Nov 28 18:39:37 2016 >>> New Revision: 288093 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=288093&view=rev >>> Log: >>> Use ${:uid} to generate unique MS asm labels, not {:uid} >>> >>> Modified: >>> cfe/trunk/lib/Sema/SemaStmtAsm.cpp >>> cfe/trunk/test/CodeGen/mozilla-ms-inline-asm.c >>> cfe/trunk/test/CodeGen/ms-inline-asm.c >>> cfe/trunk/test/CodeGen/ms-inline-asm.cpp >>> >>> Modified: cfe/trunk/lib/Sema/SemaStmtAsm.cpp >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaS >>> tmtAsm.cpp?rev=288093&r1=288092&r2=288093&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/lib/Sema/SemaStmtAsm.cpp (original) >>> +++ cfe/trunk/lib/Sema/SemaStmtAsm.cpp Mon Nov 28 18:39:37 2016 >>> @@ -753,7 +753,7 @@ LabelDecl *Sema::GetOrCreateMSAsmLabel(S >>> // Create an internal name for the label. The name should not be a >>> valid mangled >>> // name, and should be unique. We use a dot to make the name an >>> invalid mangled >>> // name. >>> - OS << "__MSASMLABEL_.{:uid}__"; >>> + OS << "__MSASMLABEL_.${:uid}__"; >>> for (char C : ExternalLabelName) { >>> OS << C; >>> // We escape '$' in asm strings by replacing it with "$$" >>> >>> Modified: cfe/trunk/test/CodeGen/mozilla-ms-inline-asm.c >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/m >>> ozilla-ms-inline-asm.c?rev=288093&r1=288092&r2=288093&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/test/CodeGen/mozilla-ms-inline-asm.c (original) >>> +++ cfe/trunk/test/CodeGen/mozilla-ms-inline-asm.c Mon Nov 28 18:39:37 >>> 2016 >>> @@ -20,7 +20,7 @@ void invoke(void* that, unsigned methodI >>> // CHECK: call void asm sideeffect inteldialect >>> // CHECK: mov edx,dword ptr $1 >>> // CHECK: test edx,edx >>> -// CHECK: jz {{[^_]*}}__MSASMLABEL_.{:uid}__noparams >>> +// CHECK: jz {{[^_]*}}__MSASMLABEL_.${:uid}__noparams >>> // ^ Can't use {{.*}} here because the matching is greedy. >>> // CHECK: mov eax,edx >>> // CHECK: shl eax,$$3 >>> @@ -28,7 +28,7 @@ void invoke(void* that, unsigned methodI >>> // CHECK: mov ecx,esp >>> // CHECK: push dword ptr $0 >>> // CHECK: call dword ptr $2 >>> -// CHECK: {{.*}}__MSASMLABEL_.{:uid}__noparams: >>> +// CHECK: {{.*}}__MSASMLABEL_.${:uid}__noparams: >>> // CHECK: mov ecx,dword ptr $3 >>> // CHECK: push ecx >>> // CHECK: mov edx,[ecx] >>> >>> Modified: cfe/trunk/test/CodeGen/ms-inline-asm.c >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/m >>> s-inline-asm.c?rev=288093&r1=288092&r2=288093&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/test/CodeGen/ms-inline-asm.c (original) >>> +++ cfe/trunk/test/CodeGen/ms-inline-asm.c Mon Nov 28 18:39:37 2016 >>> @@ -249,7 +249,7 @@ void t23() { >>> the_label: >>> } >>> // CHECK: t23 >>> -// CHECK: call void asm sideeffect inteldialect >>> "{{.*}}__MSASMLABEL_.{:uid}__the_label:", "~{dirflag},~{fpsr},~{flags}"( >>> ) >>> +// CHECK: call void asm sideeffect inteldialect >>> "{{.*}}__MSASMLABEL_.${:uid}__the_label:", >>> "~{dirflag},~{fpsr},~{flags}"() >>> } >>> >>> void t24_helper(void) {} >>> @@ -595,7 +595,7 @@ void label1() { >>> jmp label >>> } >>> // CHECK-LABEL: define void @label1() >>> - // CHECK: call void asm sideeffect inteldialect >>> "{{.*}}__MSASMLABEL_.{:uid}__label:\0A\09jmp >>> {{.*}}__MSASMLABEL_.{:uid}__label", "~{dirflag},~{fpsr},~{flags}"() >>> [[ATTR1:#[0-9]+]] >>> + // CHECK: call void asm sideeffect inteldialect >>> "{{.*}}__MSASMLABEL_.${:uid}__label:\0A\09jmp >>> {{.*}}__MSASMLABEL_.${:uid}__label", "~{dirflag},~{fpsr},~{flags}"() >>> [[ATTR1:#[0-9]+]] >>> } >>> >>> void label2() { >>> @@ -604,7 +604,7 @@ void label2() { >>> label: >>> } >>> // CHECK-LABEL: define void @label2 >>> - // CHECK: call void asm sideeffect inteldialect "jmp >>> {{.*}}__MSASMLABEL_.{:uid}__label\0A\09{{.*}}__MSASMLABEL_.{:uid}__label:", >>> "~{dirflag},~{fpsr},~{flags}"() >>> + // CHECK: call void asm sideeffect inteldialect "jmp >>> {{.*}}__MSASMLABEL_.${:uid}__label\0A\09{{.*}}__MSASMLABEL_.${:uid}__label:", >>> "~{dirflag},~{fpsr},~{flags}"() >>> } >>> >>> void label3() { >>> @@ -613,7 +613,7 @@ void label3() { >>> mov eax, label >>> } >>> // CHECK-LABEL: define void @label3 >>> - // CHECK: call void asm sideeffect inteldialect >>> "{{.*}}__MSASMLABEL_.{:uid}__label:\0A\09mov eax, >>> {{.*}}__MSASMLABEL_.{:uid}__label", "~{eax},~{dirflag},~{fpsr},~{f >>> lags}"() >>> + // CHECK: call void asm sideeffect inteldialect >>> "{{.*}}__MSASMLABEL_.${:uid}__label:\0A\09mov eax, >>> {{.*}}__MSASMLABEL_.${:uid}__label", "~{eax},~{dirflag},~{fpsr},~{f >>> lags}"() >>> } >>> >>> void label4() { >>> @@ -622,7 +622,7 @@ void label4() { >>> mov eax, [label] >>> } >>> // CHECK-LABEL: define void @label4 >>> - // CHECK: call void asm sideeffect inteldialect >>> "{{.*}}__MSASMLABEL_.{:uid}__label:\0A\09mov eax, >>> {{.*}}__MSASMLABEL_.{:uid}__label", "~{eax},~{dirflag},~{fpsr},~{f >>> lags}"() >>> + // CHECK: call void asm sideeffect inteldialect >>> "{{.*}}__MSASMLABEL_.${:uid}__label:\0A\09mov eax, >>> {{.*}}__MSASMLABEL_.${:uid}__label", "~{eax},~{dirflag},~{fpsr},~{f >>> lags}"() >>> } >>> >>> void label5() { >>> @@ -631,7 +631,7 @@ void label5() { >>> dollar_label$: >>> } >>> // CHECK-LABEL: define void @label5 >>> - // CHECK: call void asm sideeffect inteldialect "jmp >>> {{.*}}__MSASMLABEL_.{:uid}__dollar_label$$\0A\09{{.*}}__MSAS >>> MLABEL_.{:uid}__dollar_label$$:", "~{dirflag},~{fpsr},~{flags}"() >>> + // CHECK: call void asm sideeffect inteldialect "jmp >>> {{.*}}__MSASMLABEL_.${:uid}__dollar_label$$\0A\09{{.*}}__MSA >>> SMLABEL_.${:uid}__dollar_label$$:", "~{dirflag},~{fpsr},~{flags}"() >>> } >>> >>> void label6(){ >>> @@ -640,7 +640,7 @@ void label6(){ >>> label: >>> } >>> // CHECK-LABEL: define void @label6 >>> - // CHECK: call void asm sideeffect inteldialect "jmp >>> {{.*}}__MSASMLABEL_.{:uid}__label\0A\09{{.*}}__MSASMLABEL_.{:uid}__label:", >>> "~{dirflag},~{fpsr},~{flags}"() >>> + // CHECK: call void asm sideeffect inteldialect "jmp >>> {{.*}}__MSASMLABEL_.${:uid}__label\0A\09{{.*}}__MSASMLABEL_.${:uid}__label:", >>> "~{dirflag},~{fpsr},~{flags}"() >>> } >>> >>> typedef union _LARGE_INTEGER { >>> >>> Modified: cfe/trunk/test/CodeGen/ms-inline-asm.cpp >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/m >>> s-inline-asm.cpp?rev=288093&r1=288092&r2=288093&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/test/CodeGen/ms-inline-asm.cpp (original) >>> +++ cfe/trunk/test/CodeGen/ms-inline-asm.cpp Mon Nov 28 18:39:37 2016 >>> @@ -126,14 +126,14 @@ void t7_using() { >>> void t8() { >>> __asm some_label: >>> // CHECK-LABEL: define void @_Z2t8v() >>> - // CHECK: call void asm sideeffect inteldialect >>> "L__MSASMLABEL_.{:uid}__some_label:", "~{dirflag},~{fpsr},~{flags}"() >>> + // CHECK: call void asm sideeffect inteldialect >>> "L__MSASMLABEL_.${:uid}__some_label:", "~{dirflag},~{fpsr},~{flags}"() >>> struct A { >>> static void g() { >>> __asm jmp some_label ; This should jump forwards >>> __asm some_label: >>> __asm nop >>> // CHECK-LABEL: define internal void @_ZZ2t8vEN1A1gEv() >>> - // CHECK: call void asm sideeffect inteldialect "jmp >>> L__MSASMLABEL_.{:uid}__some_label\0A\09L__MSASMLABEL_.{:uid}__some_label:\0A\09nop", >>> "~{dirflag},~{fpsr},~{flags}"() >>> + // CHECK: call void asm sideeffect inteldialect "jmp >>> L__MSASMLABEL_.${:uid}__some_label\0A\09L__MSASMLABEL_.${:uid}__some_label:\0A\09nop", >>> "~{dirflag},~{fpsr},~{flags}"() >>> } >>> }; >>> A::g(); >>> >>> >>> _______________________________________________ >>> cfe-commits mailing list >>> cfe-commits@lists.llvm.org >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >>> >> >> >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits