[IR] Use Min behavior for module flag "PIC Level"
authorFangrui Song <i@maskray.me>
Thu, 18 Aug 2022 23:28:55 +0000 (16:28 -0700)
committerFangrui Song <i@maskray.me>
Thu, 18 Aug 2022 23:28:55 +0000 (16:28 -0700)
commitc2a38887932e3a46aa3bee35f3f5568ac68282f4
tree903747d76dd1fb4d303c7d8891893975766c0e10
parent37c47b2cacae99d65b4b82eb41655f0820100677
[IR] Use Min behavior for module flag "PIC Level"

Using Max for both "PIC Level" and "PIE Level" is inconsistent. PIC imposes less
restriction while PIE imposes more restriction. The result generally
picks the more restrictive behavior: Min for PIC.

This choice matches `ld -r`: a non-pic object and a pic object merge into a
result which should be treated as non-pic.

To allow linking "PIC Level" using Error/Max from old bitcode files, upgrade
Error/Max to Min.

Reviewed By: tejohnson

Differential Revision: https://reviews.llvm.org/D130531
14 files changed:
clang/test/CodeGen/piclevels.c
llvm/lib/IR/AutoUpgrade.cpp
llvm/lib/IR/Module.cpp
llvm/test/Bitcode/upgrade-module-flag.ll
llvm/test/Bitcode/upgrade-pic-level.ll [new file with mode: 0644]
llvm/test/Linker/Inputs/module-flags-pic-2-b.ll
llvm/test/Linker/module-flags-pic-1-a.ll
llvm/test/Linker/module-flags-pic-2-a.ll
llvm/test/Transforms/Attributor/value-simplify-dbg.ll
llvm/test/Transforms/Attributor/value-simplify-local-remote.ll
llvm/test/Transforms/OpenMP/spmdization.ll
llvm/test/Transforms/OpenMP/spmdization_assumes.ll
llvm/test/Transforms/OpenMP/spmdization_guarding.ll
llvm/test/Transforms/OpenMP/spmdization_guarding_two_reaching_kernels.ll