diff options
| author | Piotr Padlewski <piotr.padlewski@gmail.com> | 2018-07-12 23:55:20 +0000 | 
|---|---|---|
| committer | Piotr Padlewski <piotr.padlewski@gmail.com> | 2018-07-12 23:55:20 +0000 | 
| commit | c63b492bcdf2dd73b836e357cc7bc9fa02a69c00 (patch) | |
| tree | 39cbb920c4bf881f713344a3d183b9dd84281598 /lldb/source/Plugins/ScriptInterpreter/Python/PythonExceptionState.h | |
| parent | c379d1a424badc74906db37c6c826e5b4a155b25 (diff) | |
| download | llvm-c63b492bcdf2dd73b836e357cc7bc9fa02a69c00.zip llvm-c63b492bcdf2dd73b836e357cc7bc9fa02a69c00.tar.gz llvm-c63b492bcdf2dd73b836e357cc7bc9fa02a69c00.tar.bz2 | |
Simplify recursive launder.invariant.group and strip
Summary:
This patch is crucial for proving equality laundered/stripped
pointers. eg:
  bool foo(A *a) {
    return a == std::launder(a);
  }
Clang with -fstrict-vtable-pointers will emit something like:
    define dso_local zeroext i1 @_Z3fooP1A(%struct.A* %a) {
    entry:
      %c = bitcast %struct.A* %a to i8*
      %call = tail call i8* @llvm.launder.invariant.group.p0i8(i8* %c)
      %0 = bitcast %struct.A* %a to i8*
      %1 = tail call i8* @llvm.strip.invariant.group.p0i8(i8* %0)
      %2 = tail call i8* @llvm.strip.invariant.group.p0i8(i8* %call)
      %cmp = icmp eq i8* %1, %2
      ret i1 %cmp
    }
and because %2 can be replaced with @llvm.strip.invariant.group(%0)
and that %2 and %1 will produce the same value (because strip is readnone)
we can replace compare with true.
Reviewers: rsmith, hfinkel, majnemer, amharc, kuhar
Subscribers: llvm-commits, hiraditya
Differential Revision: https://reviews.llvm.org/D47423
llvm-svn: 336963
Diffstat (limited to 'lldb/source/Plugins/ScriptInterpreter/Python/PythonExceptionState.h')
0 files changed, 0 insertions, 0 deletions
