The legacy PM is deprecated, so update a bunch of lit tests running opt to use the new PM syntax when specifying the pipeline. In this patch focus has been put on test cases for ConstantMerge, ConstraintElimination, CorrelatedValuePropagation, GlobalDCE, GlobalOpt, SCCP, TailCallElim and PredicateInfo. Differential Revision: https://reviews.llvm.org/D114516
52 lines
1.5 KiB
LLVM
52 lines
1.5 KiB
LLVM
; RUN: opt < %s -passes=globalopt -S | FileCheck %s
|
|
|
|
; Test the evaluation of a store and a load via a bitcast, and check
|
|
; that globals are constant folded to the correct value.
|
|
|
|
; CHECK: @u = dso_local local_unnamed_addr global %union.A { i8* inttoptr (i64 12345 to i8*) }, align 8
|
|
; CHECK: @l = dso_local local_unnamed_addr global i64 12345, align 8
|
|
|
|
; Test derived from:
|
|
;
|
|
; union A {
|
|
; A(long long ll) : l(ll) {}
|
|
; void *p;
|
|
; long long l;
|
|
; } u(12345);
|
|
;
|
|
; long long l = u.l;
|
|
|
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-unknown-linux-gnu"
|
|
|
|
%union.A = type { i8* }
|
|
|
|
$_ZN1AC2Ex = comdat any
|
|
|
|
@u = dso_local global %union.A zeroinitializer, align 8
|
|
@l = dso_local global i64 0, align 8
|
|
@llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__sub_I_test.cpp, i8* null }]
|
|
|
|
define internal void @__cxx_global_var_init() section ".text.startup" {
|
|
call void @_ZN1AC2Ex(%union.A* @u, i64 12345)
|
|
ret void
|
|
}
|
|
|
|
define linkonce_odr dso_local void @_ZN1AC2Ex(%union.A* %this, i64 %ll) unnamed_addr comdat align 2 {
|
|
%l = bitcast %union.A* %this to i64*
|
|
store i64 %ll, i64* %l, align 8
|
|
ret void
|
|
}
|
|
|
|
define internal void @__cxx_global_var_init.1() section ".text.startup" {
|
|
%1 = load i64, i64* bitcast (%union.A* @u to i64*), align 8
|
|
store i64 %1, i64* @l, align 8
|
|
ret void
|
|
}
|
|
|
|
define internal void @_GLOBAL__sub_I_test.cpp() section ".text.startup" {
|
|
call void @__cxx_global_var_init()
|
|
call void @__cxx_global_var_init.1()
|
|
ret void
|
|
}
|