<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, "EmojiFont", "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p style="margin-top:0;margin-bottom:0">Hi JF,</p>
<p style="margin-top:0;margin-bottom:0"><br>
</p>
<p style="margin-top:0;margin-bottom:0"></p>
<div>> Do you foresee user code ever changing meaningfully based on address space?</div>
<div>
<div>> Or is this just a trick to get different codegen around `this`?</div>
<br>
</div>
<div>I can imagine that code can be written differently for different memory segments. For example if caches are used you might want to explore data locality or if memory banks are used you might want to exploit memory coalescing.</div>
<div><br>
</div>
<div>But my biggest problem at the moment is that Clang can't even preserve the address spaces of 'this' to make C++ for architectures with memory segments usable. We can't always rely on the optimizers to put objects in the right memory or perhaps we don't
 even always have such strong optimizer support.</div>
<div><br>
</div>
<div><span>> Address spaces on variables seem totally sane, and I agree that you want encapsulation, and somehow tracking address space on `this` makes sense. So I’m not saying I disagree with your goal. I’m saying method qualifiers seem like a terrible fit.</span></div>
<div><span><br>
</span></div>
<div><span>I have been looking at several options and we had some discussions with John too. Therefore I am suggesting to work on a second option as well that will target the situation where no manual tuning of the method definition for a specific memory segment
 is required. But I imagine this will take quite a while and I would like to offer some workable solution to the Clang users in the meantime (hopefully soon!). </span><br>
</div>
<div><br>
</div>
<div><span>> I think we need a completely different language solution which allows the same C++ code to codegen differently based on variable address space.</span></div>
<div><span><br>
</span></div>
<div><span>Do you have any specific idea in mind? I am happy to explore the options further.</span><br>
</div>
<p></p>
<p style="margin-top:0;margin-bottom:0"><br>
</p>
<p style="margin-top:0;margin-bottom:0">Thanks,</p>
<p style="margin-top:0;margin-bottom:0">Anastasia<br>
</p>
<br>
<br>
<div style="color: rgb(0, 0, 0);">
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" face="Calibri, sans-serif" color="#000000"><b>From:</b> jfbastien@apple.com <jfbastien@apple.com> on behalf of JF Bastien <jfbastien@apple.com><br>
<b>Sent:</b> 06 December 2018 17:41<br>
<b>To:</b> Anastasia Stulova<br>
<b>Cc:</b> cfe-dev; nd<br>
<b>Subject:</b> Re: [cfe-dev] [RFC] Solution for preserving the address space of ‘this’ in C++ methods</font>
<div> </div>
</div>
<div class="" style="word-wrap:break-word; line-break:after-white-space">Hi Anastasia,
<div class=""><br class="">
</div>
<div class="">I find this terrifying. Using const method qualifiers correctly already leads to silly code repetition. I’d like to entirely remove volatile qualified methods from C++ (see <a href="http://wg21.link/p1152" class="">wg21.link/p1152</a>). Your proposal
 adds an unbounded number of qualifiers, and the code duplication this entails seems nonsensical.</div>
<div class=""><br class="">
</div>
<div class="">Do you foresee user code ever changing meaningfully based on address space?</div>
<div class="">Or is this just a trick to get different codegen around `this`?</div>
<div class=""><br class="">
</div>
<div class="">I suspect you’re trying to achieve the later. If so, qualifiers on methods just don’t seem like the right language-level solution.</div>
<div class=""><br class="">
</div>
<div class="">Address spaces on variables seem totally sane, and I agree that you want encapsulation, and somehow tracking address space on `this` makes sense. So I’m not saying I disagree with your goal. I’m saying method qualifiers seem like a terrible fit.</div>
<div class=""><br class="">
</div>
<div class="">I think we need a completely different language solution which allows the same C++ code to codegen differently based on variable address space.</div>
<div class=""><br class="">
</div>
<div class="">JF</div>
<div class=""><br class="">
<div><br class="">
<blockquote type="cite" class="">
<div class="">On Dec 6, 2018, at 3:41 AM, Anastasia Stulova via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org" class="">cfe-dev@lists.llvm.org</a>> wrote:</div>
<br class="x_Apple-interchange-newline">
<div class="">
<div id="x_divtagdefaultwrapper" dir="ltr" class="" style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; font-size: 12pt; font-family: Calibri, Helvetica, sans-serif, "EmojiFont", "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;">
<p class="" style="margin-top:0px; margin-bottom:0px"></p>
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">Hello,</span></div>
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap"><br class="">
</span></div>
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">I
 am trying to sort out the use of address spaces in C++ classes in Clang, and I would like to get your feedback about the following problem.</span></div>
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap"><br class="">
</span></div>
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">Every
 C++ method implicitly contains a pointer to an object that invokes the method (aka ‘this’). It is implicitly added by Clang during parsing of a class. On architectures that use address spaces, objects might be instantiated in different address spaces. For
 example, in OpenCL we may wish to construct objects in a specific address space, e.g. __local, that is shared between a group of threads; there is no syntax in core C++ that allows specifying the address space of ‘this’ and, therefore, the compiler can’t provide
 an implementation that preserves the address space of an object.</span></div>
<br class="">
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">I
 would like to implement an extension that would allow specifying address space qualifier on methods to signal that the method is to be used with objects constructed in that address space.</span></div>
<br class="">
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">Here
 is an example:</span></div>
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap"><br class="">
</span></div>
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">1
 struct C {</span></div>
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">2
   void foo() __attribute__((address_space(1)));</span></div>
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">3
   void foo();</span></div>
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">4
 };</span></div>
<br class="">
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">If
 an instance ‘obj’ of struct ‘C’ is allocated in address space ‘1’ a call to ‘obj.foo()’ will resolve to the method on line 2; if ‘obj’ is not allocated in a specific address space then the implementation on line 3 will be used. In essence this is overloading
 based on the address space qualifiers of a method.</span></div>
<br class="">
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">For
 languages with explicit address space semantics, like OpenCL, it would look like:</span></div>
<p dir="ltr" class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38">
<span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap"></span></p>
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">struct
 C {</span></div>
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">   void
 foo() __local;</span></div>
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">   void
 foo();</span></div>
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap"> };</span></div>
<br class="">
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">This
 approach has one problem, however, if the implementation of a method does not differ for different address spaces, i.e. the qualification is only done to preserve the address space of ‘this’, multiple copies of the same method will have to be defined. Example:</span></div>
<br class="">
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap"> struct
 C {</span></div>
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">   int
 a;</span></div>
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">   int
 geta() __attribute__((address_space(1))) {return a;}</span></div>
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">   int
 geta() {return a;}</span></div>
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap"> };</span></div>
<br class="">
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">A
 better solution, suggested by John McCall [2], that can extend the template syntax for methods with an address space of ‘this’ would require a larger language change and would require longer time before it would become available to users of Clang.</span></div>
<br class="">
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">The
 current plan is as follows:</span></div>
<br class="">
<ol class="" style="margin-top:0pt; margin-bottom:0pt">
<li dir="ltr" class="" style="list-style-type:decimal; font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre">
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">Implement
 the aforementioned language extension to allow the overloading of methods qualified with an address space. A prototype implementation of this is available in [1]. If there are no objections here I am happy to work on the patch for this. I am quite confident
 it can be progressed quickly considering that the general overloading mechanism with method qualifiers is already in place. Let me know if I might have missed something though.</span></div>
</li></ol>
<br class="">
<ol start="2" class="" style="margin-top:0pt; margin-bottom:0pt">
<li dir="ltr" class="" style="list-style-type:decimal; font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre">
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">Work
 towards a longer term solution, potentially utilizing templates to reduce code repetition and make address spaces in C++ a more usable feature. I would appreciate some assistance either with ideas on language design or with prototyping/drafting the language
 spec proposal.</span></div>
</li></ol>
<br class="">
<br class="">
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">Feedback
 request:</span></div>
<br class="">
<ul class="" style="margin-top:0pt; margin-bottom:0pt">
<li dir="ltr" class="" style="list-style-type:disc; font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre">
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">Please
 let me know if there are any objections to implementing option 1 and if you have any details to be considered.</span></div>
</li></ul>
<br class="">
<ul class="" style="margin-top:0pt; margin-bottom:0pt">
<li dir="ltr" class="" style="list-style-type:disc; font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre">
<div class="" style="margin-top:0pt; margin-bottom:0pt; line-height:1.38"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">Please
 let me know if you are interested in being involved with the language design for option 2. I would particularly be interested to get some people from the general C++ community that use address spaces, or not!, as currently my main background is mainly in GPU/OpenCL
 area.</span></div>
</li></ul>
<span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap"></span><br class="">
<div class=""><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap"></span><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">[1]
</span><a href="https://github.com/KhronosGroup/SPIR/commit/0cfb6f7533d42ae3398a8574efd8abbdac88ac44" title="Ctrl+Click or tap to follow the link" class="" style="text-decoration:none"><span class="" style="font-size:11pt; font-family:Arial; color:rgb(17,85,204); background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:underline; vertical-align:baseline; white-space:pre-wrap">https://github.com/KhronosGroup/SPIR/commit/0cfb6f7533d42ae3398a8574efd8abbdac88ac44</span></a><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap"><br class="">
</span></div>
<div class=""><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">[2]
</span><a href="https://reviews.llvm.org/D54862#1308125" title="Ctrl+Click or tap to follow the link" class="" style="text-decoration:none"><span class="" style="font-size:11pt; font-family:Arial; color:rgb(17,85,204); background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:underline; vertical-align:baseline; white-space:pre-wrap">https://reviews.llvm.org/D54862#1308125</span></a></div>
<div class=""><br class="">
</div>
<div class="">
<div class="" style="margin-top:0px; margin-bottom:0px"><span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">Thanks
 in advance,</span></div>
<span class="" style="font-size:11pt; font-family:Arial; background-color:transparent; font-weight:400; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-variant-east-asian:normal; text-decoration:none; vertical-align:baseline; white-space:pre-wrap">Anastasia</span><br class="">
</div>
<br class="">
<p class="" style="margin-top:0px; margin-bottom:0px"></p>
</div>
<span class="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none; float:none; display:inline!important">_______________________________________________</span><br class="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<span class="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none; float:none; display:inline!important">cfe-dev
 mailing list</span><br class="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<a href="mailto:cfe-dev@lists.llvm.org" class="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; orphans:auto; text-align:start; text-indent:0px; text-transform:none; white-space:normal; widows:auto; word-spacing:0px">cfe-dev@lists.llvm.org</a><br class="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" class="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; orphans:auto; text-align:start; text-indent:0px; text-transform:none; white-space:normal; widows:auto; word-spacing:0px">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a></div>
</blockquote>
</div>
<br class="">
</div>
</div>
</div>
</div>
</body>
</html>