hameeza ahmed via llvm-dev
2017-Jul-08 05:10 UTC
[llvm-dev] Error in v64i32 type in x86 backend
sorry to disturb again,, def VADD_256B : RI<0xFE, MRMDestReg, (outs VR2048:$dst), (ins VR2048:$src1, VR2048:$src2), "VADD_256B\t{$dst, $src1, $src2 }", [(set VR2048:$dst, (add VR2048:$src1, VR2048:$src2))], IIC_XADD_REG>, TB; Is it fine now?? On Sat, Jul 8, 2017 at 10:00 AM, Craig Topper <craig.topper at gmail.com> wrote:> Oops that should have said "REX prefix" in the first sentence. > > ~Craig > > On Fri, Jul 7, 2017 at 9:59 PM, Craig Topper <craig.topper at gmail.com> > wrote: > >> You don't want RI. That's used for instructions that need a reg prefix. >> You need to use $src1 and $src2 in the assembly string too. It also looks >> like you have two closing ] brackets. >> >> ~Craig >> >> On Fri, Jul 7, 2017 at 9:55 PM, hameeza ahmed <hahmed2305 at gmail.com> >> wrote: >> >>> Thank you; >>> i have changed as follows.is it fine now? >>> >>> def VADD_256B : I<0xFE, MRMDestReg, (outs VR2048:$dst), (ins VR2048:$src1, >>> VR2048:$src2), >>> "VADD_256B\t{$src, $dst|$dst, $src}", [(set VR2048:$dst, >>> (add VR2048:$src1, VR2048:$src2))]]>; >>> >>> Also here i have changed class RI to I. Does it make any difference? >>> >>> >>> >>> On Sat, Jul 8, 2017 at 9:38 AM, Craig Topper <craig.topper at gmail.com> >>> wrote: >>> >>>> IIC_XADD_REG is used to associate latency and other information for use >>>> by the instruction scheduling pass. >>>> >>>> You're missing a pattern in the square bracket to match an add node. >>>> You also need two VR2048 registers in the 'ins' >>>> >>>> ~Craig >>>> >>>> On Fri, Jul 7, 2017 at 9:29 PM, hameeza ahmed <hahmed2305 at gmail.com> >>>> wrote: >>>> >>>>> Can you please tell whether following add is correct to add 2 64xi32 >>>>> numbers. >>>>> >>>>> def VADD_256B : RI<0xFE, MRMDestReg, (outs VR2048:$dst), (ins VR2048 >>>>> :$src), >>>>> "VADD_256B\t{$src, $dst|$dst, $src}", [], >>>>> IIC_XADD_REG>, TB; >>>>> >>>>> what is llc_xadd_reg here? >>>>> >>>>> >>>>> >>>>> On Sat, Jul 8, 2017 at 8:48 AM, Craig Topper <craig.topper at gmail.com> >>>>> wrote: >>>>> >>>>>> Change the i32 in the store pattern to v64i32. >>>>>> >>>>>> On Fri, Jul 7, 2017 at 8:41 PM hameeza ahmed <hahmed2305 at gmail.com> >>>>>> wrote: >>>>>> >>>>>>> Thank you. i understood how avx512 vector instructions are written >>>>>>> in x86instravx512. i need to define my vector instructions so i wrote; >>>>>>> >>>>>>> def VMOV_256B_RM : I<0x6F, MRMSrcMem, (outs VR2048:$dst), (ins >>>>>>> i32mem:$src), >>>>>>> "vmov_256B_rm\t{$src, $dst|$dst, $src}", >>>>>>> [(set VR2048:$dst, (v64i32 (scalar_to_vector >>>>>>> (loadi32 addr:$src))))], >>>>>>> IIC_MOV_MEM>, EVEX; >>>>>>> >>>>>>> def VMOV_256B_MR : I<0x7F, MRMDestMem, (outs), (ins i32mem:$dst, >>>>>>> VR2048:$src), >>>>>>> "vmov_256B_mr\t{$src, $dst|$dst, $src}", >>>>>>> [(store (i32 (bitconvert VR2048:$src)), >>>>>>> addr:$dst)], IIC_MOV_MEM>, EVEX; >>>>>>> >>>>>>> in x86instrinfo.td; >>>>>>> >>>>>>> when i build i got these instructions in X86GenInstrInfo. >>>>>>> but still my instruction is not selected when i run input file in >>>>>>> debug mode; getting following errors; >>>>>>> >>>>>>> >>>>>>> ===== Instruction selection begins: BB#1 'vector.body' >>>>>>> Selecting: t9: ch = store<ST256[bitcast ([65 x i32]* @c to <64 x >>>>>>> i32>*)](align=16)(tbaa=<0x3817578>)> t8, t7, t11, undef:i64 >>>>>>> >>>>>>> ISEL: Starting pattern match on root node: t9: ch >>>>>>> store<ST256[bitcast ([65 x i32]* @c to <64 x i32>*)](align=16)(tbaa=<0x3817578>)> >>>>>>> t8, t7, t11, undef:i64 >>>>>>> >>>>>>> Skipped scope entry (due to false predicate) at index 14, >>>>>>> continuing at 81 >>>>>>> Skipped scope entry (due to false predicate) at index 82, >>>>>>> continuing at 149 >>>>>>> Skipped scope entry (due to false predicate) at index 150, >>>>>>> continuing at 217 >>>>>>> Skipped scope entry (due to false predicate) at index 218, >>>>>>> continuing at 267 >>>>>>> Skipped scope entry (due to false predicate) at index 268, >>>>>>> continuing at 317 >>>>>>> Skipped scope entry (due to false predicate) at index 318, >>>>>>> continuing at 367 >>>>>>> Skipped scope entry (due to false predicate) at index 368, >>>>>>> continuing at 394 >>>>>>> Skipped scope entry (due to false predicate) at index 395, >>>>>>> continuing at 421 >>>>>>> Skipped scope entry (due to false predicate) at index 422, >>>>>>> continuing at 471 >>>>>>> Skipped scope entry (due to false predicate) at index 472, >>>>>>> continuing at 521 >>>>>>> Skipped scope entry (due to false predicate) at index 522, >>>>>>> continuing at 571 >>>>>>> Skipped scope entry (due to false predicate) at index 572, >>>>>>> continuing at 639 >>>>>>> Skipped scope entry (due to false predicate) at index 640, >>>>>>> continuing at 707 >>>>>>> Skipped scope entry (due to false predicate) at index 708, >>>>>>> continuing at 775 >>>>>>> Skipped scope entry (due to false predicate) at index 776, >>>>>>> continuing at 804 >>>>>>> Skipped scope entry (due to false predicate) at index 805, >>>>>>> continuing at 833 >>>>>>> Skipped scope entry (due to false predicate) at index 834, >>>>>>> continuing at 862 >>>>>>> Skipped scope entry (due to false predicate) at index 863, >>>>>>> continuing at 891 >>>>>>> Skipped scope entry (due to false predicate) at index 892, >>>>>>> continuing at 920 >>>>>>> Skipped scope entry (due to false predicate) at index 921, >>>>>>> continuing at 949 >>>>>>> Skipped scope entry (due to false predicate) at index 950, >>>>>>> continuing at 987 >>>>>>> Skipped scope entry (due to false predicate) at index 988, >>>>>>> continuing at 1025 >>>>>>> Match failed at index 12 >>>>>>> Continuing at 1026 >>>>>>> OpcodeSwitch from 1029 to 5725 >>>>>>> Match failed at index 5743 >>>>>>> Continuing at 5772 >>>>>>> Match failed at index 5776 >>>>>>> Continuing at 5805 >>>>>>> Match failed at index 5809 >>>>>>> Continuing at 5838 >>>>>>> Match failed at index 5842 >>>>>>> Continuing at 5911 >>>>>>> Match failed at index 5915 >>>>>>> Continuing at 5953 >>>>>>> Match failed at index 5957 >>>>>>> Continuing at 5995 >>>>>>> Match failed at index 5999 >>>>>>> Continuing at 6037 >>>>>>> Match failed at index 6041 >>>>>>> Continuing at 6084 >>>>>>> Match failed at index 6088 >>>>>>> Continuing at 6131 >>>>>>> Skipped scope entry (due to false predicate) at index 6138, >>>>>>> continuing at 6181 >>>>>>> Skipped scope entry (due to false predicate) at index 6182, >>>>>>> continuing at 6228 >>>>>>> Skipped scope entry (due to false predicate) at index 6235, >>>>>>> continuing at 6384 >>>>>>> Match failed at index 6388 >>>>>>> Continuing at 6419 >>>>>>> Match failed at index 6423 >>>>>>> Continuing at 6454 >>>>>>> Match failed at index 6458 >>>>>>> Continuing at 6489 >>>>>>> Continuing at 6490 >>>>>>> Continuing at 6491 >>>>>>> Continuing at 6492 >>>>>>> Match failed at index 6514 >>>>>>> Continuing at 6545 >>>>>>> Match failed at index 6562 >>>>>>> Continuing at 6593 >>>>>>> Match failed at index 6610 >>>>>>> Continuing at 6641 >>>>>>> Continuing at 6642 >>>>>>> Match failed at index 6658 >>>>>>> Continuing at 6772 >>>>>>> Match failed at index 6788 >>>>>>> Continuing at 6902 >>>>>>> Continuing at 13636 >>>>>>> Match failed at index 13640 >>>>>>> Continuing at 14940 >>>>>>> Match failed at index 14943 >>>>>>> Continuing at 15415 >>>>>>> Match failed at index 15417 >>>>>>> Continuing at 15570 >>>>>>> Match failed at index 15571 >>>>>>> Continuing at 15598 >>>>>>> Match failed at index 15599 >>>>>>> Continuing at 15716 >>>>>>> Match failed at index 15719 >>>>>>> Continuing at 15837 >>>>>>> Match failed at index 15840 >>>>>>> Continuing at 16198 >>>>>>> Skipped scope entry (due to false predicate) at index 16203, >>>>>>> continuing at 16285 >>>>>>> Skipped scope entry (due to false predicate) at index 16286, >>>>>>> continuing at 16394 >>>>>>> Skipped scope entry (due to false predicate) at index 16395, >>>>>>> continuing at 16464 >>>>>>> Skipped scope entry (due to false predicate) at index 16465, >>>>>>> continuing at 16487 >>>>>>> Skipped scope entry (due to false predicate) at index 16488, >>>>>>> continuing at 16510 >>>>>>> Skipped scope entry (due to false predicate) at index 16511, >>>>>>> continuing at 16533 >>>>>>> Skipped scope entry (due to false predicate) at index 16534, >>>>>>> continuing at 16556 >>>>>>> Skipped scope entry (due to false predicate) at index 16557, >>>>>>> continuing at 16680 >>>>>>> Skipped scope entry (due to false predicate) at index 16681, >>>>>>> continuing at 16804 >>>>>>> Skipped scope entry (due to false predicate) at index 16805, >>>>>>> continuing at 16890 >>>>>>> Skipped scope entry (due to false predicate) at index 16891, >>>>>>> continuing at 16976 >>>>>>> Skipped scope entry (due to false predicate) at index 16978, >>>>>>> continuing at 17169 >>>>>>> Skipped scope entry (due to false predicate) at index 17171, >>>>>>> continuing at 17342 >>>>>>> Skipped scope entry (due to false predicate) at index 17344, >>>>>>> continuing at 17497 >>>>>>> Skipped scope entry (due to false predicate) at index 17499, >>>>>>> continuing at 17632 >>>>>>> Skipped scope entry (due to false predicate) at index 17634, >>>>>>> continuing at 17801 >>>>>>> Skipped scope entry (due to false predicate) at index 17803, >>>>>>> continuing at 17944 >>>>>>> Skipped scope entry (due to false predicate) at index 17946, >>>>>>> continuing at 18074 >>>>>>> Skipped scope entry (due to false predicate) at index 18075, >>>>>>> continuing at 18178 >>>>>>> Skipped scope entry (due to false predicate) at index 18179, >>>>>>> continuing at 18253 >>>>>>> Skipped scope entry (due to false predicate) at index 18254, >>>>>>> continuing at 18278 >>>>>>> Skipped scope entry (due to false predicate) at index 18279, >>>>>>> continuing at 18303 >>>>>>> Skipped scope entry (due to false predicate) at index 18304, >>>>>>> continuing at 18328 >>>>>>> Skipped scope entry (due to false predicate) at index 18329, >>>>>>> continuing at 18376 >>>>>>> Skipped scope entry (due to false predicate) at index 18377, >>>>>>> continuing at 18424 >>>>>>> Skipped scope entry (due to false predicate) at index 18425, >>>>>>> continuing at 18520 >>>>>>> Skipped scope entry (due to false predicate) at index 18521, >>>>>>> continuing at 18636 >>>>>>> Skipped scope entry (due to false predicate) at index 18637, >>>>>>> continuing at 18661 >>>>>>> Skipped scope entry (due to false predicate) at index 18662, >>>>>>> continuing at 18711 >>>>>>> Skipped scope entry (due to false predicate) at index 18712, >>>>>>> continuing at 18736 >>>>>>> Skipped scope entry (due to false predicate) at index 18737, >>>>>>> continuing at 18770 >>>>>>> Skipped scope entry (due to false predicate) at index 18771, >>>>>>> continuing at 18856 >>>>>>> Skipped scope entry (due to false predicate) at index 18857, >>>>>>> continuing at 18942 >>>>>>> Skipped scope entry (due to false predicate) at index 18943, >>>>>>> continuing at 19028 >>>>>>> Match failed at index 16201 >>>>>>> Continuing at 19029 >>>>>>> LLVM ERROR: Cannot select: t9: ch = store<ST256[bitcast ([65 x i32]* >>>>>>> @c to <64 x i32>*)](align=16)(tbaa=<0x3817578>)> t8, t7, t11, >>>>>>> undef:i64 >>>>>>> t7: v64i32 = add t6, t4 >>>>>>> t6: v64i32,ch = load<LD256[bitcast ([65 x i32]* @c to <64 x >>>>>>> i32>*)](align=16)(tbaa=<0x3817578>)(dereferenceable)> t0, t11, >>>>>>> undef:i64 >>>>>>> t11: i64 = X86ISD::Wrapper TargetGlobalAddress:i64<[65 x i32]* >>>>>>> @c> 0 >>>>>>> t10: i64 = TargetGlobalAddress<[65 x i32]* @c> 0 >>>>>>> t3: i64 = undef >>>>>>> t4: v64i32,ch = load<LD256[bitcast ([65 x i32]* @b to <64 x >>>>>>> i32>*)](align=16)(tbaa=<0x3817578>)(dereferenceable)> t0, t13, >>>>>>> undef:i64 >>>>>>> t13: i64 = X86ISD::Wrapper TargetGlobalAddress:i64<[65 x i32]* >>>>>>> @b> 0 >>>>>>> t12: i64 = TargetGlobalAddress<[65 x i32]* @b> 0 >>>>>>> t3: i64 = undef >>>>>>> t11: i64 = X86ISD::Wrapper TargetGlobalAddress:i64<[65 x i32]* @c> >>>>>>> 0 >>>>>>> t10: i64 = TargetGlobalAddress<[65 x i32]* @c> 0 >>>>>>> t3: i64 = undef >>>>>>> In function: foo >>>>>>> >>>>>>> >>>>>>> >>>>>>> What could be the reason of this?? Please correct me. >>>>>>> I am stuck at this point.... >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Fri, Jul 7, 2017 at 10:59 PM, Friedman, Eli < >>>>>>> efriedma at codeaurora.org> wrote: >>>>>>> >>>>>>>> The word "fold" is used all over LLVM. It generally refers to >>>>>>>> transformations which delete an instruction. >>>>>>>> >>>>>>>> If you're asking about http://llvm.org/docs/CodeGener >>>>>>>> ator.html#instruction-folding , it just means an instruction which >>>>>>>> was produced by the "instruction folding" transform; there isn't anything >>>>>>>> special about the instruction itself. >>>>>>>> >>>>>>>> -Eli >>>>>>>> >>>>>>>> >>>>>>>> On 7/6/2017 10:51 PM, hameeza ahmed wrote: >>>>>>>> >>>>>>>> What is meant by folded instructions in LLVM? >>>>>>>> How they work? >>>>>>>> >>>>>>>> On Fri, Jul 7, 2017 at 10:19 AM, hameeza ahmed < >>>>>>>> hahmed2305 at gmail.com> wrote: >>>>>>>> >>>>>>>>> Thank You. >>>>>>>>> >>>>>>>>> On Fri, Jul 7, 2017 at 10:03 AM, Craig Topper < >>>>>>>>> craig.topper at gmail.com> wrote: >>>>>>>>> >>>>>>>>>> Yes, that error is from instruction selection. I think your >>>>>>>>>> legalization changes worked fine. >>>>>>>>>> >>>>>>>>>> ~Craig >>>>>>>>>> >>>>>>>>>> On Thu, Jul 6, 2017 at 8:21 PM, hameeza ahmed via llvm-dev < >>>>>>>>>> llvm-dev at lists.llvm.org> wrote: >>>>>>>>>> >>>>>>>>>>> also i further run the following command; >>>>>>>>>>> llc -debug filer-knl_o3.ll >>>>>>>>>>> >>>>>>>>>>> and its output is attached here. by looking at the output can we >>>>>>>>>>> say that legalization runs fine and the error is due to instruction >>>>>>>>>>> selection/ pattern matching which is not yet implemented? >>>>>>>>>>> >>>>>>>>>>> so do i need to worry and try to correct it at this stage or >>>>>>>>>>> should i move forward to implement instruction selection/ pattern matching? >>>>>>>>>>> >>>>>>>>>>> Please guide me. >>>>>>>>>>> >>>>>>>>>>> Thank You >>>>>>>>>>> >>>>>>>>>>> On Fri, Jul 7, 2017 at 8:00 AM, hameeza ahmed < >>>>>>>>>>> hahmed2305 at gmail.com> wrote: >>>>>>>>>>> >>>>>>>>>>>> Thank You. well i have seen these links. but they dont cover >>>>>>>>>>>> the problem that i have mentioned. actually i am doing all the things step >>>>>>>>>>>> by step. >>>>>>>>>>>> >>>>>>>>>>>> so i havent yet worked with instruction selection phase/ files. >>>>>>>>>>>> rather before that i am trying to do legalization by allowing vector >>>>>>>>>>>> elements>16 i.e 64xi32. here i have mainly worked with 2 files uptil now, >>>>>>>>>>>> i.e registerinfo.td to define register class to be called in >>>>>>>>>>>> legalization. and most importantly i am dealing with file >>>>>>>>>>>> X86ISelLowering.cpp. >>>>>>>>>>>> >>>>>>>>>>>> Now is there any relation in this and instruction selection. >>>>>>>>>>>> since instruction selection comes after combine and legalize so i havent >>>>>>>>>>>> yet worked on it. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Please correct me, I am stuck here. >>>>>>>>>>>> >>>>>>>>>>>> Thank You again >>>>>>>>>>>> >>>>>>>>>>>> On Fri, Jul 7, 2017 at 7:11 AM, Friedman, Eli < >>>>>>>>>>>> efriedma at codeaurora.org> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Have you read http://llvm.org/docs/WritingAnLLVMBackend.html >>>>>>>>>>>>> and http://llvm.org/docs/CodeGenerator.html ? >>>>>>>>>>>>> http://llvm.org/docs/WritingAnLLVMBackend.html#instruction-s >>>>>>>>>>>>> elector describes how to define a store instruction. >>>>>>>>>>>>> >>>>>>>>>>>>> -Eli >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On 7/6/2017 6:51 PM, hameeza ahmed via llvm-dev wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> Please correct me i m stuck at this point. >>>>>>>>>>>>> >>>>>>>>>>>>> On Jul 6, 2017 5:18 PM, "hameeza ahmed" <hahmed2305 at gmail.com> >>>>>>>>>>>>> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> Hello, >>>>>>>>>>>>> i am experimenting with the increase in register/ vector width >>>>>>>>>>>>> to 64 elements of 32 bits instead of 16 in x86 backend. >>>>>>>>>>>>> for eg. >>>>>>>>>>>>> i have a loop with 65 iterations; >>>>>>>>>>>>> if my IR generates v64i32 and 1 scalar, still the backend >>>>>>>>>>>>> breaks the v64i32 into 4 v16i32. i want it to retain v64i32. like if there >>>>>>>>>>>>> are 128 elements in loop then it should break it into 2 v64i32 instructions. >>>>>>>>>>>>> >>>>>>>>>>>>> in order to do this i have made necessary changes in >>>>>>>>>>>>> X86ISelLowering.cpp. and rebuild llvm. then when i use the >>>>>>>>>>>>> command -view-dag-combine2-dags i get the required output in >>>>>>>>>>>>> graph but the following error on console: >>>>>>>>>>>>> >>>>>>>>>>>>> LLVM ERROR: Cannot select: t10: ch = store<ST256[bitcast ([65 >>>>>>>>>>>>> x i32]* @a to <64 x i32>*)](align=16)(tbaa=<0x30c5438>)> t9, >>>>>>>>>>>>> t7, t12, undef:i64 >>>>>>>>>>>>> t7: v64i32 = add t6, t4 >>>>>>>>>>>>> t6: v64i32,ch = load<LD256[bitcast ([65 x i32]* @c to <64 >>>>>>>>>>>>> x i32>*)](align=16)(tbaa=<0x30c5438>)(dereferenceable)> t0, >>>>>>>>>>>>> t14, undef:i64 >>>>>>>>>>>>> t14: i64 = X86ISD::Wrapper TargetGlobalAddress:i64<[65 x >>>>>>>>>>>>> i32]* @c> 0 >>>>>>>>>>>>> t13: i64 = TargetGlobalAddress<[65 x i32]* @c> 0 >>>>>>>>>>>>> t3: i64 = undef >>>>>>>>>>>>> t4: v64i32,ch = load<LD256[bitcast ([65 x i32]* @b to <64 >>>>>>>>>>>>> x i32>*)](align=16)(tbaa=<0x30c5438>)(dereferenceable)> t0, >>>>>>>>>>>>> t16, undef:i64 >>>>>>>>>>>>> t16: i64 = X86ISD::Wrapper TargetGlobalAddress:i64<[65 x >>>>>>>>>>>>> i32]* @b> 0 >>>>>>>>>>>>> t15: i64 = TargetGlobalAddress<[65 x i32]* @b> 0 >>>>>>>>>>>>> t3: i64 = undef >>>>>>>>>>>>> t12: i64 = X86ISD::Wrapper TargetGlobalAddress:i64<[65 x >>>>>>>>>>>>> i32]* @a> 0 >>>>>>>>>>>>> t11: i64 = TargetGlobalAddress<[65 x i32]* @a> 0 >>>>>>>>>>>>> t3: i64 = undef >>>>>>>>>>>>> In function: foo >>>>>>>>>>>>> >>>>>>>>>>>>> The dag after legalization is also attached here. >>>>>>>>>>>>> >>>>>>>>>>>>> the source is vector sum of 65 elements. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Kindly correct me. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>> LLVM Developers mailing listllvm-dev at lists.llvm.orghttp://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> Employee of Qualcomm Innovation Center, Inc. >>>>>>>>>>>>> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> _______________________________________________ >>>>>>>>>>> LLVM Developers mailing list >>>>>>>>>>> llvm-dev at lists.llvm.org >>>>>>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Employee of Qualcomm Innovation Center, Inc. >>>>>>>> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project >>>>>>>> >>>>>>>> >>>>>>> -- >>>>>> ~Craig >>>>>> >>>>> >>>>> >>>> >>> >> >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170708/6363608c/attachment.html>