Sameer Sahasrabuddhe 2de7653fd5 [AMDGPU] lower-switch in preISel as a workaround for legacy DA
Summary:
The default target of the switch instruction may sometimes be an
"unreachable" block, when it is guaranteed that one of the cases is
always taken. The dominator tree concludes that such a switch
instruction does not have an immediate post dominator. This confuses
divergence analysis, which is unable to propagate sync dependence to
the targets of the switch instruction.

As a workaround, the AMDGPU target now invokes lower-switch as a
preISel pass. LowerSwitch is designed to handle the unreachable
default target correctly, allowing the divergence analysis to locate
the correct immediate dominator of the now-lowered switch.

Reviewers: arsenm, nhaehnle

Reviewed By: nhaehnle

Subscribers: kzhuravl, jvesely, wdng, nhaehnle, yaxunl, dstuttard, tpr, t-tye, llvm-commits, simoll

Differential Revision: https://reviews.llvm.org/D52221

llvm-svn: 342722
2018-09-21 11:26:55 +00:00
..
2017-08-07 18:30:35 +00:00
2018-06-12 18:02:46 +00:00
2017-08-07 18:30:35 +00:00
2018-07-31 13:25:23 +00:00
2018-07-31 13:25:23 +00:00
2017-08-07 18:30:35 +00:00
2018-04-30 19:08:16 +00:00
2017-08-07 18:30:35 +00:00
2017-07-14 00:11:13 +00:00
2018-08-29 16:31:18 +00:00
2018-09-18 16:59:48 +00:00
2017-08-07 18:30:35 +00:00
2017-11-28 23:40:12 +00:00
2017-08-07 18:30:35 +00:00
2017-08-07 18:30:35 +00:00
2018-08-31 22:43:36 +00:00
2018-08-31 22:43:36 +00:00
2017-08-07 18:30:35 +00:00
2018-06-27 15:33:33 +00:00
2018-06-27 15:33:33 +00:00
2017-08-07 18:30:35 +00:00
2017-08-07 18:30:35 +00:00
2017-06-28 21:38:50 +00:00
2018-05-07 13:21:26 +00:00
2017-08-07 18:30:35 +00:00
2018-06-27 15:33:33 +00:00

+==============================================================================+
| How to organize the lit tests                                                |
+==============================================================================+

- If you write a test for matching a single DAG opcode or intrinsic, it should
  go in a file called {opcode_name,intrinsic_name}.ll (e.g. fadd.ll)

- If you write a test that matches several DAG opcodes and checks for a single
  ISA instruction, then that test should go in a file called {ISA_name}.ll (e.g.
  bfi_int.ll

- For all other tests, use your best judgement for organizing tests and naming
  the files.

+==============================================================================+
| Naming conventions                                                           |
+==============================================================================+

- Use dash '-' and not underscore '_' to separate words in file names, unless
  the file is named after a DAG opcode or ISA instruction that has an
  underscore '_' in its name.