141ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen//===-- Scalar.cpp --------------------------------------------------------===// 241ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen// 341ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen// The LLVM Compiler Infrastructure 441ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen// 541ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen// This file is distributed under the University of Illinois Open Source 641ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen// License. See LICENSE.TXT for details. 741ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen// 841ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen//===----------------------------------------------------------------------===// 941ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen// 10a94d6e87c4c49f2e81b01d66d8bfb591277f8f96Nadav Rotem// This file implements common infrastructure for libLLVMScalarOpts.a, which 111a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson// implements several scalar transformations over the LLVM intermediate 121a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson// representation, including the C bindings for that library. 1341ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen// 1441ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen//===----------------------------------------------------------------------===// 1541ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 16d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/Transforms/Scalar.h" 171a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson#include "llvm-c/Initialization.h" 18d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm-c/Transforms/Scalar.h" 190d9874b48d747298dcea7e4e6385b511c04a7842Rafael Espindola#include "llvm/Analysis/Passes.h" 200b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/DataLayout.h" 2136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/IR/Verifier.h" 22d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/InitializePasses.h" 23d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/PassManager.h" 2441ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 2541ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksenusing namespace llvm; 2641ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 27a94d6e87c4c49f2e81b01d66d8bfb591277f8f96Nadav Rotem/// initializeScalarOptsPasses - Initialize all passes linked into the 281a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson/// ScalarOpts library. 291a3d23362168ae6d8e07efd547a92cc36738a789Owen Andersonvoid llvm::initializeScalarOpts(PassRegistry &Registry) { 301a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeADCEPass(Registry); 31563b29f8db68275407ffcd2a9a5f0ba77ee5e899Diego Novillo initializeSampleProfileLoaderPass(Registry); 3236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines initializeConstantHoistingPass(Registry); 331a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeConstantPropagationPass(Registry); 341a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeCorrelatedValuePropagationPass(Registry); 351a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeDCEPass(Registry); 361a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeDeadInstEliminationPass(Registry); 3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines initializeScalarizerPass(Registry); 381a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeDSEPass(Registry); 391a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeGVNPass(Registry); 4012be936cc912b1ff4d1c73c7f2c805a3462da1abChris Lattner initializeEarlyCSEPass(Registry); 411a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeIndVarSimplifyPass(Registry); 421a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeJumpThreadingPass(Registry); 431a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeLICMPass(Registry); 441a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeLoopDeletionPass(Registry); 45832f61117d69019376c4aabedd4de3831279e288Cameron Zwarich initializeLoopInstSimplifyPass(Registry); 461a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeLoopRotatePass(Registry); 471a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeLoopStrengthReducePass(Registry); 48bebe48dbfe00078329341945bfb11f778ace6d12Hal Finkel initializeLoopRerollPass(Registry); 491a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeLoopUnrollPass(Registry); 501a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeLoopUnswitchPass(Registry); 51b0db161f5b85c4a31046d2271d9e270991b53a15Chris Lattner initializeLoopIdiomRecognizePass(Registry); 521a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeLowerAtomicPass(Registry); 539da9934e27dfb48de77b80a3e20ed2d869b52024Jakub Staszak initializeLowerExpectIntrinsicPass(Registry); 541a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeMemCpyOptPass(Registry); 55a8a7099c1849fcbb4a68642a292fd0250aa46505Richard Sandiford initializePartiallyInlineLibCallsPass(Registry); 561a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeReassociatePass(Registry); 571a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeRegToMemPass(Registry); 581a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeSCCPPass(Registry); 591a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeIPSCCPPass(Registry); 60713aa9431d84805c5b7ddce57159d14ee94cd548Chandler Carruth initializeSROAPass(Registry); 61b1686c32fc694636cbf15a59b23b2a741b65ecf4Cameron Zwarich initializeSROA_DTPass(Registry); 62b352d6eb49927a7c707cbd9046cfc525b0c3f2d7Chris Lattner initializeSROA_SSAUpPass(Registry); 6301d7203ef8316fdd71c3cec59f8e68fb869e0dbfTom Stellard initializeCFGSimplifyPassPass(Registry); 64ad966ea7a81a538425d5319f6d8568e460639e54Matt Arsenault initializeStructurizeCFGPass(Registry); 651a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeSinkingPass(Registry); 661a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeTailCallElimPass(Registry); 67dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines initializeSeparateConstOffsetFromGEPPass(Registry); 68cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines initializeLoadCombinePass(Registry); 691a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson} 701a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson 711a3d23362168ae6d8e07efd547a92cc36738a789Owen Andersonvoid LLVMInitializeScalarOpts(LLVMPassRegistryRef R) { 721a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson initializeScalarOpts(*unwrap(R)); 731a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson} 741a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson 7557c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM) { 7657c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createAggressiveDCEPass()); 7757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 7857c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 7957c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddCFGSimplificationPass(LLVMPassManagerRef PM) { 8057c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createCFGSimplificationPass()); 8157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 8257c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 8357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddDeadStoreEliminationPass(LLVMPassManagerRef PM) { 8457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createDeadStoreEliminationPass()); 8557c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 8657c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 8736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesvoid LLVMAddScalarizerPass(LLVMPassManagerRef PM) { 8836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines unwrap(PM)->add(createScalarizerPass()); 8936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} 9036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 9157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddGVNPass(LLVMPassManagerRef PM) { 9257c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createGVNPass()); 9357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 9457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 9557c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddIndVarSimplifyPass(LLVMPassManagerRef PM) { 9657c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createIndVarSimplifyPass()); 9741ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen} 9841ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 9941ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksenvoid LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM) { 10041ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen unwrap(PM)->add(createInstructionCombiningPass()); 10141ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen} 10241ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 10357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddJumpThreadingPass(LLVMPassManagerRef PM) { 10457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createJumpThreadingPass()); 10569cf031ee33fc564c3888694cb1cd8ab5dae9fd2Gordon Henriksen} 10669cf031ee33fc564c3888694cb1cd8ab5dae9fd2Gordon Henriksen 10757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddLICMPass(LLVMPassManagerRef PM) { 10857c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createLICMPass()); 10957c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 11057c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 11157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddLoopDeletionPass(LLVMPassManagerRef PM) { 11257c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createLoopDeletionPass()); 11357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 11457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 11545e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindolavoid LLVMAddLoopIdiomPass(LLVMPassManagerRef PM) { 11645e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola unwrap(PM)->add(createLoopIdiomPass()); 11745e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola} 11845e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola 11957c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddLoopRotatePass(LLVMPassManagerRef PM) { 12057c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createLoopRotatePass()); 12157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 12257c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 123bebe48dbfe00078329341945bfb11f778ace6d12Hal Finkelvoid LLVMAddLoopRerollPass(LLVMPassManagerRef PM) { 124bebe48dbfe00078329341945bfb11f778ace6d12Hal Finkel unwrap(PM)->add(createLoopRerollPass()); 125bebe48dbfe00078329341945bfb11f778ace6d12Hal Finkel} 126bebe48dbfe00078329341945bfb11f778ace6d12Hal Finkel 12757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddLoopUnrollPass(LLVMPassManagerRef PM) { 12857c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createLoopUnrollPass()); 12957c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 13057c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 13157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddLoopUnswitchPass(LLVMPassManagerRef PM) { 13257c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createLoopUnswitchPass()); 13357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 13457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 13557c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddMemCpyOptPass(LLVMPassManagerRef PM) { 13657c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createMemCpyOptPass()); 13757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 13857c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 139a8a7099c1849fcbb4a68642a292fd0250aa46505Richard Sandifordvoid LLVMAddPartiallyInlineLibCallsPass(LLVMPassManagerRef PM) { 140a8a7099c1849fcbb4a68642a292fd0250aa46505Richard Sandiford unwrap(PM)->add(createPartiallyInlineLibCallsPass()); 141a8a7099c1849fcbb4a68642a292fd0250aa46505Richard Sandiford} 142a8a7099c1849fcbb4a68642a292fd0250aa46505Richard Sandiford 14357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef PM) { 14457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createPromoteMemoryToRegisterPass()); 14569cf031ee33fc564c3888694cb1cd8ab5dae9fd2Gordon Henriksen} 14669cf031ee33fc564c3888694cb1cd8ab5dae9fd2Gordon Henriksen 14741ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksenvoid LLVMAddReassociatePass(LLVMPassManagerRef PM) { 14841ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen unwrap(PM)->add(createReassociatePass()); 14941ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen} 15041ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 15157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddSCCPPass(LLVMPassManagerRef PM) { 15257c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createSCCPPass()); 15341ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen} 15441ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen 15557c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef PM) { 15657c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createScalarReplAggregatesPass()); 15757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 15857c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 15945e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindolavoid LLVMAddScalarReplAggregatesPassSSA(LLVMPassManagerRef PM) { 16045e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola unwrap(PM)->add(createScalarReplAggregatesPass(-1, false)); 16145e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola} 16245e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola 16347a53a6e4ca2e49284c800e9b9e0172e7df7217cNate Begemanvoid LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef PM, 16447a53a6e4ca2e49284c800e9b9e0172e7df7217cNate Begeman int Threshold) { 16547a53a6e4ca2e49284c800e9b9e0172e7df7217cNate Begeman unwrap(PM)->add(createScalarReplAggregatesPass(Threshold)); 16647a53a6e4ca2e49284c800e9b9e0172e7df7217cNate Begeman} 16747a53a6e4ca2e49284c800e9b9e0172e7df7217cNate Begeman 16857c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef PM) { 169be87bce32bc9af9bc5918a6e08806b61e3088165Meador Inge // NOTE: The simplify-libcalls pass has been removed. 17057c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 17157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 17257c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddTailCallEliminationPass(LLVMPassManagerRef PM) { 17357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createTailCallEliminationPass()); 17457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 17557c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 17657c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddConstantPropagationPass(LLVMPassManagerRef PM) { 17757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createConstantPropagationPass()); 17857c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 17957c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 18057c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef PM) { 18157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createDemoteRegisterToMemoryPass()); 18241ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen} 18347a53a6e4ca2e49284c800e9b9e0172e7df7217cNate Begeman 18447a53a6e4ca2e49284c800e9b9e0172e7df7217cNate Begemanvoid LLVMAddVerifierPass(LLVMPassManagerRef PM) { 18547a53a6e4ca2e49284c800e9b9e0172e7df7217cNate Begeman unwrap(PM)->add(createVerifierPass()); 186dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // FIXME: should this also add createDebugInfoVerifierPass()? 18747a53a6e4ca2e49284c800e9b9e0172e7df7217cNate Begeman} 18845e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola 18945e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindolavoid LLVMAddCorrelatedValuePropagationPass(LLVMPassManagerRef PM) { 19045e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola unwrap(PM)->add(createCorrelatedValuePropagationPass()); 19145e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola} 19245e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola 19345e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindolavoid LLVMAddEarlyCSEPass(LLVMPassManagerRef PM) { 19445e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola unwrap(PM)->add(createEarlyCSEPass()); 19545e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola} 1960d9874b48d747298dcea7e4e6385b511c04a7842Rafael Espindola 1970d9874b48d747298dcea7e4e6385b511c04a7842Rafael Espindolavoid LLVMAddTypeBasedAliasAnalysisPass(LLVMPassManagerRef PM) { 1980d9874b48d747298dcea7e4e6385b511c04a7842Rafael Espindola unwrap(PM)->add(createTypeBasedAliasAnalysisPass()); 1990d9874b48d747298dcea7e4e6385b511c04a7842Rafael Espindola} 2000d9874b48d747298dcea7e4e6385b511c04a7842Rafael Espindola 2010d9874b48d747298dcea7e4e6385b511c04a7842Rafael Espindolavoid LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM) { 2020d9874b48d747298dcea7e4e6385b511c04a7842Rafael Espindola unwrap(PM)->add(createBasicAliasAnalysisPass()); 2030d9874b48d747298dcea7e4e6385b511c04a7842Rafael Espindola} 2040335a14ae771ce1793fb5401acfeb2fb59fc1c6fRafael Espindola 2050335a14ae771ce1793fb5401acfeb2fb59fc1c6fRafael Espindolavoid LLVMAddLowerExpectIntrinsicPass(LLVMPassManagerRef PM) { 2060335a14ae771ce1793fb5401acfeb2fb59fc1c6fRafael Espindola unwrap(PM)->add(createLowerExpectIntrinsicPass()); 2070335a14ae771ce1793fb5401acfeb2fb59fc1c6fRafael Espindola} 208