summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorEwan Crawford <ewan@codeplay.com>2018-10-08 08:40:45 +0000
committerEwan Crawford <ewan@codeplay.com>2018-10-08 08:40:45 +0000
commitfa120cbdbc66935dbe41e4fcc76030d50a2692d4 (patch)
tree5bbd37832c13ff4aaca324a2b8424d3adfec1174 /llvm/lib/Target
parentf27c67af12143fe914ef96f0fb4c6790c7c033c4 (diff)
downloadbcm5719-llvm-fa120cbdbc66935dbe41e4fcc76030d50a2692d4.tar.gz
bcm5719-llvm-fa120cbdbc66935dbe41e4fcc76030d50a2692d4.zip
[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 llvm-svn: 343956
Diffstat (limited to 'llvm/lib/Target')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud