Files
archived-llvm/test/Transforms/InstCombine
Ewan Crawford 3948aa1d82 [InstCombine] Fix incongruous GEP type addrspace
Currently running the @insertelem_after_gep function below through the InstCombine pass with opt produces invalid IR.

Input:
```
define void @insertelem_after_gep(<16 x i32>* %t0) {
   %t1 = bitcast <16 x i32>* %t0 to [16 x i32]*
   %t2 = addrspacecast [16 x i32]* %t1 to [16 x i32] addrspace(3)*
   %t3 = getelementptr inbounds [16 x i32], [16 x i32] addrspace(3)* %t2, i64 0, i64 0
   %t4 = insertelement <16 x i32 addrspace(3)*> undef, i32 addrspace(3)* %t3, i32 0
   call void @extern_vec_pointers_func(<16 x i32 addrspace(3)*> %t4)
   ret void
}
```

Output:

```
define void @insertelem_after_gep(<16 x i32>* %t0) {
  %t3 = getelementptr inbounds <16 x i32>, <16 x i32>* %t0, i64 0, i64 0
  %t4 = insertelement <16 x i32 addrspace(3)*> undef, i32 addrspace(3)* %t3, i32 0
  call void @my_extern_func(<16 x i32 addrspace(3)*> %t4)
  ret void
}
```

Which although causes no complaints when produced, isn't valid IR as the insertelement use of the %t3 GEP expects an address space.

```
opt: /tmp/bad.ll:52:73: error: '%t3' defined with type 'i32*' but expected 'i32 addrspace(3)*'
  %t4 = insertelement <16 x i32 addrspace(3)*> undef, i32 addrspace(3)* %t3, i32 0
```

I've fixed this by adding an addrspacecast after the GEP in the InstCombine pass, and including a check for this type mismatch to the verifier.

Reviewers: spatel, lebedev.ri
Subscribers: llvm-commits

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@343956 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-08 08:40:45 +00:00
..
2013-08-28 23:04:41 +00:00
2018-02-01 13:05:25 +00:00
2016-07-16 16:24:06 +00:00
2014-03-06 05:32:52 +00:00
2014-11-04 05:17:58 +00:00
2017-10-10 05:07:54 +00:00
2017-10-10 05:07:54 +00:00
2017-10-10 05:07:54 +00:00
2017-10-10 05:07:54 +00:00
2017-10-10 05:07:54 +00:00
2017-10-10 05:07:54 +00:00
2017-10-10 05:07:54 +00:00
2016-04-17 04:30:43 +00:00
2017-05-19 22:37:09 +00:00
2016-04-05 17:24:54 +00:00
2018-08-14 15:21:13 +00:00
2018-08-16 17:03:22 +00:00
2015-06-05 18:04:42 +00:00
2015-08-11 21:33:55 +00:00
2015-08-28 19:09:31 +00:00
2017-04-19 12:06:40 +00:00
2016-01-07 19:27:16 +00:00
2018-06-04 02:52:36 +00:00
2018-02-01 13:05:25 +00:00
2017-04-14 17:47:07 +00:00
2013-08-28 23:04:41 +00:00
2016-04-05 17:24:54 +00:00

This directory contains test cases for the instcombine transformation.  The
dated tests are actual bug tests, whereas the named tests are used to test
for features that the this pass should be capable of performing.