ispc/ispc — pull request #802 by ifilippov (2014-06-11 07:01:05+00:00)
Title: Changing +/-feature regulation to CPU regulation

LLVM has the following way of representation target information:

1. Architecture. Flag -march in llc. We have x86.
2. CPU based on chosen architecture. Flag -mcpu in llc. Each CPU has it's own
features. For example: to use or not to use SSE4, to use or not to use conditional mov, etc.
The set of features is property of architecture, but the division of enabled and
disabled features is property of current CPU.
3. Features. Flag -mattr in llc. After we chose CPU we can manually change some of
it's features by using "+feature1,+feature2,-feature3" string.

ISPC has following behavior before this commit:
1. If user didn't choose CPU:
ISPC sets CPU to host (auto detected) CPU and then manually changes it's features. It is bad,
because we have possibility of many mistakes. (bug #796)
2. If user chose CPU:
ISPC sets this CPU, but also changes it's features somehow. Is is bad, because it is unpredictable. (discussion of bug #796)

After this commit ISPC doesn't change any features manually. Every feature is a feature from
standard set from the CPU (file lib/Target/X86/X86.td). Also when user doesn't choose CPU ISPC
will take it from ISA.

This commit was checked on LLVM 3.2 3.3 3.4.