[LLVMdev] Regular Expressions

David Greene dag at cray.com
Thu Jun 11 14:01:56 PDT 2009


On Thursday 11 June 2009 12:28, Chris Lattner wrote:
> On Jun 9, 2009, at 12:39 PM, David Greene wrote:
> > On Tuesday 09 June 2009 14:34, Dan Gohman wrote:
> >> Can you describe what problem you're trying to solve here?  Does it
> >> really need Regular Expressions?
> >
> > Yes.  I want TableGen to be able to infer lots of stuff
> > programmatically.
> > This helps tremendously when specifying things like, oh, AVX.  :)
>
> I don't see how this relates to regex's, and really don't want to suck
> in an external regex library.  Can you give an example of how this
> would help?

Sure:

[Top-level specification]
defm CVTSI2SS : sse1_avx_fp_cvt_scalar_xs_scalar64_xs_node_sintrinsic_rm<
  0x2D, "cvtsi2ss", sint_to_fp, "cvtsi2ss", "f32", "i32">;

[Meanwhile, down in the guts...]

class fp_cvt_scalar_VXSnrr<  
// Parent: avx_fp_cvt_scalar_xs_node_rm_DEF_V#NAME#_128rr
  bits<8> opc,
  string OpcodeStr,
  SDNode OpNode,
  string DstType,
  string SrcType,
  int CustomPatterns = 0,
  list<dag> patterns = [],
  string asm = ""
>: fp_unary_vxs_n_rm_rr<
    opc,
    !cast<RegisterClass>(!patsubst("^f([0-9]+)","FR$1",!patsubst("^i([0-9]+)","GR$1",DstType))),
[...]

Basically, the code keys off type strings to deduce register classes and 
other such things.  This makes specifying things like converts much easier 
because one doesn't need to pass a bunch of additional parameters around to 
specify register classes, etc. when it is entirely obvious what they should be 
given other parameters.

I'm trying to reduce the number of classes/parameters to deal with so I
can eventually get rid of the Perl script that's generating most of this
stuff right now.  This kind of pattern matching and substitution really
helps simplify things to a point where I can imagine manually maintaining
a smaller amount of information.

The BSD regex library is very tiny, almost ideal for what we want to do, which
is fill a functionality hole on Windows only.

                                     -Dave



More information about the llvm-dev mailing list