Usando o Br_S OpCode para apontar para a próxima instrução usando Reflection.Emit.Label

Estou experimentando analisar a IL para emitir um método. Eu recebi o código IL de um método em uma string [] onde cada string é uma instrução IL. Estou fazendo um loop sobre essa matriz e adicionando OpCodes usando um ILGenerator:

        foreach (string ins in instructions) //string representations of IL          
        {
            string opCode = ins.Split(':').ElementAt(1);

            // other conditions omitted

            if (opCode.Contains("br.s"))
            {
                Label targetInstruction = ilGenerator.DefineLabel();

                ilGenerator.MarkLabel(targetInstruction);

                ilGenerator.Emit(OpCodes.Br_S, targetInstruction); 
            }

Aqui está o IL que eu preciso reproduzir:

Source IL:
IL_0000: nop
IL_0001: ldstr "Hello, World!"
IL_0006: stloc.0
IL_0007: br.s IL_0009
IL_0009: ldloc.0
IL_000a: ret

E aqui está o que estou obtendo como saída:

Target IL:
IL_0000: nop
IL_0001: ldstr "Hello, World!"
IL_0006: stloc.0
IL_0007: br.s IL_0007   // this is wrong -- needs to point to IL_0009
IL_0009: ldloc.0
IL_000a: ret

Como você pode ver, a chamada br.s está apontando para si mesma, o que obviamente causa um loop infinito. Como faço para apontar para a seguinte instrução como na fonte? Isso tem a ver com o uso de Reflection.Emit.Label, mas não tenho certeza de como funcion

EDITA A propósito, a IL vista acima é para esse método simples,

    public string HelloWorld()
    {
            return "Hello, World!";
    }

questionAnswers(3)

yourAnswerToTheQuestion